Commit cb678cccb7254e81dfe47cc2ed482825613e2f29

Authored by Unknown
1 parent 6fbad9c5

Changement pour la configuration du réseau

La configuration du réseau se fait maintenant depuis l'interface web sur la page "Paramétrer une mise à jour". Cette fonction n'est accessible qu'au rang ADMIN. 
Le fichier app.conf est toujours utilisé pour définir un utilisateur ADMIN.
PFE06/app.conf
1 1 adminEmail: pfe@pfe.fr
2   -adminPassword: pfepfe
3   -nodes:
4   - - name: AT-001
5   - ip: '85.10.201.246'
6   - arch: ARM
7   - - name: AT-002
8   - ip: '85.10.201.247'
9   - arch: ARM
10   - - name: AT-003
11   - ip: '85.10.201.248'
12   - arch: ARM
13   - - name: ATTTT-004
14   - ip: '85.10.201.249'
15   - arch: ARM
16 2 \ No newline at end of file
  3 +adminPassword: pfepfe
17 4 \ No newline at end of file
... ...
PFE06/src/main/java/com/PFE/ServerManager/AppConfig.java
... ... @@ -3,7 +3,6 @@ package com.PFE.ServerManager;
3 3 import org.springframework.beans.factory.annotation.Autowired;
4 4 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
5 5 import org.springframework.stereotype.Component;
6   -import org.yaml.snakeyaml.TypeDescription;
7 6 import org.yaml.snakeyaml.Yaml;
8 7 import org.yaml.snakeyaml.constructor.Constructor;
9 8  
... ... @@ -22,18 +21,28 @@ public class AppConfig {
22 21 RoleRepository roleRepository;
23 22  
24 23 @Autowired
25   - MajRepository majRepository;
26   -
27   - @Autowired
28 24 BCryptPasswordEncoder bCryptPasswordEncoder;
29 25  
30   - @Autowired
31   - NodeRepository nodeRepository;
32   -
33 26 @PostConstruct
34 27 public void init() {
35 28 System.out.println("============= Configuration de l'application =============");
36 29  
  30 + /* Ajout des rôles si non présent */
  31 +
  32 + if(roleRepository.count() != 2) {
  33 + roleRepository.deleteAll();
  34 + Role roleAdmin = new Role();
  35 + roleAdmin.setRole_id(1);
  36 + roleAdmin.setRole("ADMIN");
  37 + roleRepository.save(roleAdmin);
  38 + Role roleUser = new Role();
  39 + roleUser.setRole_id(2);
  40 + roleUser.setRole("USER");
  41 + roleRepository.save(roleUser);
  42 + }
  43 +
  44 + /* Ajout d'un utilisateur ADMIN avec les informations du fichier de conf*/
  45 +
37 46 Yaml yaml = new Yaml(new Constructor(ConfYAML.class));
38 47 InputStream inputStream = null;
39 48 try {
... ... @@ -56,17 +65,5 @@ public class AppConfig {
56 65 if(temp == null) {
57 66 customerRepository.save(n);
58 67 }
59   -
60   - Iterator<NodeYAML> iter = conf.getNodes().iterator();
61   - while (iter.hasNext()) {
62   - NodeYAML element = iter.next();
63   - Node node = new Node();
64   - node.setName(element.getName());
65   - node.setArch(element.getArch());
66   - node.setIp(element.getIp());
67   - node.setNode_id((int)(nodeRepository.count() + 1));
68   - nodeRepository.save(node);
69   - }
70   -
71 68 }
72 69 }
73 70 \ No newline at end of file
... ...
PFE06/src/main/java/com/PFE/ServerManager/ConfYAML.java
1 1 package com.PFE.ServerManager;
2 2  
3   -import java.util.List;
4   -
5 3 public class ConfYAML {
6 4  
7 5 private String adminEmail;
8 6 private String adminPassword;
9   - private List<NodeYAML> nodes;
10 7  
11 8 public void setAdminEmail(String adminEmail) {
12 9 this.adminEmail = adminEmail;
... ... @@ -16,10 +13,6 @@ public class ConfYAML {
16 13 this.adminPassword = adminPassword;
17 14 }
18 15  
19   - public void setNodes(List<NodeYAML> nodes) {
20   - this.nodes = nodes;
21   - }
22   -
23 16 public String getAdminEmail() {
24 17 return adminEmail;
25 18 }
... ... @@ -28,8 +21,5 @@ public class ConfYAML {
28 21 return adminPassword;
29 22 }
30 23  
31   - public List<NodeYAML> getNodes() {
32   - return nodes;
33   - }
34 24  
35 25 }
... ...
PFE06/src/main/java/com/PFE/ServerManager/ConfigNodes.java 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +package com.PFE.ServerManager;
  2 +
  3 +import java.util.List;
  4 +
  5 +public class ConfigNodes {
  6 +
  7 + private List<NodeYAML> nodes;
  8 +
  9 + public List<NodeYAML> getNodes() {
  10 + return nodes;
  11 + }
  12 +
  13 + public void setNodes(List<NodeYAML> nodes) {
  14 + this.nodes = nodes;
  15 + }
  16 +}
... ...
PFE06/src/main/java/com/PFE/ServerManager/MainController.java
... ... @@ -14,6 +14,8 @@ import java.util.*;
14 14 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
15 15 import org.springframework.security.core.context.SecurityContextHolder;
16 16 import org.springframework.security.core.Authentication;
  17 +import org.yaml.snakeyaml.Yaml;
  18 +import org.yaml.snakeyaml.constructor.Constructor;
17 19  
18 20 import javax.servlet.annotation.MultipartConfig;
19 21  
... ... @@ -39,7 +41,7 @@ public class MainController {
39 41  
40 42 @GetMapping(value="/")
41 43 public String uploadRedirection(){
42   - return "redirect:upload";
  44 + return "redirect:home";
43 45 }
44 46  
45 47 @GetMapping(value="/home")
... ... @@ -186,6 +188,35 @@ public class MainController {
186 188 }
187 189 }
188 190  
  191 + @RequestMapping(value = "/config", method = RequestMethod.POST)
  192 + @ResponseStatus(value = HttpStatus.OK)
  193 + public void submitConfig(@RequestParam MultipartFile file) {
  194 +
  195 + Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  196 + Customer customer = customerRepository.findByEmail(auth.getName());
  197 + InputStream inputStream = null;
  198 + try {
  199 + inputStream = file.getInputStream();
  200 + }
  201 + catch (IOException e) {
  202 + e.printStackTrace();
  203 + }
  204 +
  205 + nodeRepository.deleteAll();
  206 + Yaml yaml = new Yaml(new Constructor(ConfigNodes.class));
  207 + ConfigNodes conf = yaml.load(inputStream);
  208 +
  209 + Iterator<NodeYAML> iter = conf.getNodes().iterator();
  210 + while (iter.hasNext()) {
  211 + NodeYAML element = iter.next();
  212 + Node node = new Node();
  213 + node.setName(element.getName());
  214 + node.setArch(element.getArch());
  215 + node.setIp(element.getIp());
  216 + node.setNode_id((int)(nodeRepository.count() + 1));
  217 + nodeRepository.save(node);
  218 + }
  219 + }
189 220  
190 221 @GetMapping(path="/login")
191 222 public ModelAndView login() {
... ...
PFE06/src/main/java/com/PFE/ServerManager/SecurityConfig.java
... ... @@ -35,6 +35,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
35 35 .authorizeRequests()
36 36 .antMatchers("/home").hasAnyAuthority("USER","ADMIN")
37 37 .antMatchers("/registration").hasAuthority("ADMIN")
  38 + .antMatchers("/config").hasAuthority("ADMIN")
38 39 .antMatchers("/all").hasAuthority("ADMIN")
39 40 .antMatchers("/login").permitAll()
40 41 .antMatchers("/denied").permitAll()
... ...
PFE06/src/main/resources/application.properties
... ... @@ -2,7 +2,7 @@
2 2 #-----------------------------------------------#
3 3 #---------- Spring Database management ---------#
4 4 #-----------------------------------------------#
5   -spring.jpa.hibernate.ddl-auto=create
  5 +spring.jpa.hibernate.ddl-auto=update
6 6 #update
7 7 #"create" recrée la base de données à chaque lancement
8 8 #"update" met à jour la base données
... ...
PFE06/src/main/resources/data.sql
1   -/* ce fichier doit être placé dans les ressources afin d'être utilisé */
2   -
3   -INSERT INTO "role" VALUES (1, 'ADMIN');
4   -INSERT INTO "role" VALUES (2, 'USER');
5 1 \ No newline at end of file
  2 +/* ce fichier doit être placé dans les ressources afin d'être utilisé */
6 3 \ No newline at end of file
... ...
PFE06/src/main/resources/static/js/session.js
1 1 $(document).ready(function() {
2 2  
  3 + /********** Configuration file ***********/
  4 +
  5 + var configName = document.getElementById("config_name");
  6 + var configSend = document.getElementById("config_send");
  7 + var file = document.getElementById("configInputFile");
  8 + var readyToSend = false;
  9 + var formData = new FormData();
  10 +
  11 + file.addEventListener('change', function() {
  12 + delete formData;
  13 + formData = new FormData();
  14 + configName.innerHTML = this.files[0].name;
  15 + formData.append("file", this.files[0]);
  16 + readyToSend = true;
  17 + }, false)
  18 +
  19 + configSend.addEventListener('click', function() {
  20 + var modalContent = document.getElementById("modal-content");
  21 + var modalTitle = document.getElementById("modal-title");
  22 + if(readyToSend) {
  23 + var request = new XMLHttpRequest();
  24 + request.open("POST", "/config");
  25 +
  26 + request.onreadystatechange = function() {
  27 + if(this.readyState === XMLHttpRequest.DONE && this.status === 200) {
  28 + var modalButton = document.getElementById("modal-button");
  29 + modalButton.addEventListener('click', function(e) {
  30 + location.reload();
  31 + })
  32 + modalContent.innerHTML = "Upload terminé !";
  33 + modalTitle.innerHTML = "Félicitations";
  34 + $("#warningFilesNumber").modal();
  35 + }
  36 + }
  37 +
  38 + request.send(formData);
  39 + }
  40 + else {
  41 + modalContent.innerHTML = "Veuillez sélectionner un fichier !";
  42 + $("#warningFilesNumber").modal()
  43 + }
  44 +
  45 + })
  46 +
3 47 /********** Tableau **********/
4 48  
5 49 var tableNodes = $('#nodes-table').DataTable( {
... ...
PFE06/src/main/resources/templates/home.html
... ... @@ -100,6 +100,5 @@
100 100 <script src="https://cdn.datatables.net/select/1.2.7/js/dataTables.select.min.js" charset="utf-8"></script>
101 101 <script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js" charset="utf-8"></script>
102 102 <script src="https://cdn.datatables.net/responsive/2.2.3/js/dataTables.responsive.min.js" charset="utf-8"></script>
103   -<script th:src="@{/js/upload.js}"></script>
104 103 </body>
105 104 </html>
... ...
PFE06/src/main/resources/templates/registration.html
... ... @@ -59,7 +59,7 @@
59 59  
60 60 <form id="Login" th:action="@{/registration}" method="POST">
61 61 <div class="form-group">
62   - <input type="text" class="form-control" id="username" placeholder="Entrer le pseudo" name="email">
  62 + <input type="email" class="form-control" id="username" placeholder="Entrer l'email" name="email">
63 63 </div>
64 64 <div class="form-group">
65 65 <input type="password" class="form-control" id="password" placeholder="Entrer le mot de passe" name="password">
... ...
PFE06/src/main/resources/templates/session.html
... ... @@ -44,6 +44,36 @@
44 44 </nav>
45 45  
46 46 <div class="container" style="padding-bottom: 50px;">
  47 +
  48 + <div th:remove="tag" th:if="${customerRole} == 'ADMIN'">
  49 + <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Changer la configuration réseau</h1>
  50 + <div class="input-group mb-3">
  51 + <div class="input-group-prepend">
  52 + <button id="config_send" class="btn btn-outline-secondary" type="button">Envoyer</button>
  53 + </div>
  54 + <div class="custom-file">
  55 + <input type="file" class="custom-file-input" id="configInputFile">
  56 + <label id="config_name" class="custom-file-label" for="configInputFile">Choisir un fichier</label>
  57 + </div>
  58 + </div>
  59 +
  60 + <div class="form-group">
  61 + <label for="comment">Exemple :</label>
  62 + <textarea readonly class="form-control" rows="5" id="comment">
  63 +nodes:
  64 + - name: AT-001
  65 + ip: '85.10.201.246'
  66 + arch: ARM
  67 + - name: AT-002
  68 + ip: '85.10.201.247'
  69 + arch: ARM
  70 + - name: AT-003
  71 + ip: '85.10.201.248'
  72 + arch: ARM
  73 + </textarea>
  74 + </div>
  75 + </div>
  76 +
47 77 <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Relancer une mise à jour</h1>
48 78 <div class="form-group">
49 79 <select multiple class="form-control">
... ... @@ -53,6 +83,7 @@
53 83 <button id="start_maj" type="submit" class="btn btn-primary" style="margin-top:20px;">Lancer la mise à jour</button>
54 84 </div>
55 85 <h1 style="margin-bottom:50px; margin-top:50px; border-bottom:1px solid #CCC; padding-bottom:20px;">Créer une mise à jour</h1>
  86 +
56 87 <table id="nodes-table" class="table table-striped table-bordered dt-responsive nowrap">
57 88 <thead>
58 89 <tr>
... ...