MainController.java 3.97 KB
package com.PFE.ServerManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.HashSet;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.Authentication;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.ResponseEntity;

import javax.jws.WebParam;
import javax.persistence.SequenceGenerator;
import javax.servlet.annotation.MultipartConfig;

@Controller
@MultipartConfig(fileSizeThreshold = 20971520)
public class MainController {

    @Autowired
    CustomerRepository customerRepository;

    @Autowired
    RoleRepository roleRepository;

    @Autowired
    BCryptPasswordEncoder bCryptPasswordEncoder;

    @GetMapping(value="/")
    public String homeRedirection(){
        return "redirect:home";
    }

    @GetMapping(value="/home")
    public ModelAndView home() {
        ModelAndView modelAndView = new ModelAndView();
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        Customer customer = customerRepository.findByPseudo(auth.getName());
        modelAndView.addObject("customerName", customer.getPseudo());
        modelAndView.addObject("customerRole", customer.getRole());
        modelAndView.setViewName("home");
        return modelAndView;
    }

    @GetMapping(path="/registration")
    public ModelAndView registration() {
        ModelAndView modelAndView = new ModelAndView();
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        Customer customer = customerRepository.findByPseudo(auth.getName());
        modelAndView.addObject("customerName", customer.getPseudo());
        modelAndView.setViewName("registration");
        return modelAndView;
    }

    @GetMapping(path="/denied")
    public String denied() {
        return "denied";
    }

    @PostMapping(path="/registration")
    public ModelAndView addNewUser(@RequestParam String pseudo, @RequestParam String password, @RequestParam String role) {
        //Model map, ModelAndView ou l'utilisation direct comme dans la méthode précédente sont 3 méthodes qui permettent d'envoyer des informations et donc de changer l'apparence d'une page
        ModelAndView modelAndView = new ModelAndView(); // il n'est peut être pas utile d'utiliser ModelAndView
        Customer n = new Customer();
        n.setPseudo(pseudo);
        n.setPassword(bCryptPasswordEncoder.encode(password));
        n.setId((int)(customerRepository.count()+1));
        n.setActive(1);
        Customer temp = customerRepository.findByPseudo(pseudo);
        Role userRole = roleRepository.findByRole(role);
        n.setRoles(new HashSet<Role>(Arrays.asList(userRole)));

        if(temp != null) {
            modelAndView.addObject("ok", "l'utilisateur existe déjà");
        }
        else {
            modelAndView.addObject("ok", "l'utilisateur a bien été ajouté");
            customerRepository.save(n);
        }
        modelAndView.setViewName("registration");
        return modelAndView;
    }

    @PostMapping(path="/file")
    public ResponseEntity<?> addFile(@RequestParam("file") MultipartFile uploadedFile, @RequestParam String filename, @RequestParam String nodes) {
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @GetMapping(path="/login")
    public ModelAndView login() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("login");
        return modelAndView;
    }

    @GetMapping(path="/all")
    public @ResponseBody Iterable<Customer> getAllUsers() {
        return customerRepository.findAll();
    }

    @GetMapping(value="/success")
    public String success(){
        return "success";
    }
}