138 lines
6.7 KiB
Java
138 lines
6.7 KiB
Java
package fr.eni.enchere.controllers;
|
|
|
|
import fr.eni.enchere.bo.UserProfil;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
import org.springframework.ui.Model;
|
|
import fr.eni.enchere.bll.UserService;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.validation.BindingResult;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.security.core.Authentication;
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
@Controller()
|
|
@RequestMapping("/profil")
|
|
public class ProfilController {
|
|
|
|
private final UserService userService;
|
|
private PasswordEncoder passwordEncoder;
|
|
|
|
|
|
public ProfilController(UserService userService, PasswordEncoder passwordEncoder) {
|
|
this.userService = userService;
|
|
this.passwordEncoder = passwordEncoder;
|
|
}
|
|
|
|
@GetMapping
|
|
public String viewProfile(Model model) {
|
|
// Obtenez l'authentification actuelle
|
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
// Vérifiez si l'utilisateur est authentifié
|
|
if (!authentication.getName().equals("anonymousUser")) {
|
|
// Obtenez les détails de l'utilisateur authentifié
|
|
String username = authentication.getName();
|
|
// Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur
|
|
UserProfil userProfile = userService.utilisateurByName(username);
|
|
// Ajoutez les informations du profil à l'objet Model pour les afficher dans la page HTML
|
|
// model.addAttribute("user", new UserProfil());
|
|
model.addAttribute("userProfile", userProfile);
|
|
return "profil";
|
|
}else {
|
|
return "accueil";
|
|
}
|
|
}
|
|
|
|
@GetMapping("/edit")
|
|
public String edit(Model model) {
|
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
if (!authentication.getName().equals("anonymousUser")) {
|
|
String username = authentication.getName();
|
|
UserProfil userProfile = userService.utilisateurByName(username);
|
|
model.addAttribute("userProfile", userProfile);
|
|
}
|
|
return "editProfil";
|
|
}
|
|
|
|
@PostMapping("/edit")
|
|
public String editProfile(Model model) {
|
|
// Obtenez l'authentification actuelle
|
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
// Vérifiez si l'utilisateur est authentifié
|
|
if (!authentication.getName().equals("anonymousUser")) {
|
|
// Obtenez les détails de l'utilisateur authentifié
|
|
String username = authentication.getName();
|
|
// Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur
|
|
UserProfil userProfile = userService.utilisateurByName(username);
|
|
// Ajoutez les informations du profil à l'objet Model pour les afficher dans la page HTML
|
|
// model.addAttribute("user", new UserProfil());
|
|
model.addAttribute("userProfile", userProfile);
|
|
return "editProfil";
|
|
}else {
|
|
return "accueil";
|
|
}
|
|
}
|
|
|
|
@PostMapping("/delete")
|
|
public String deleteUser() {
|
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
// Obtenez les détails de l'utilisateur authentifié
|
|
String username = authentication.getName();
|
|
// Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur
|
|
UserProfil userProfile = userService.utilisateurByName(username);
|
|
//Supprimer le compte
|
|
userService.deleteUtilisateur(userProfile.getId());
|
|
return "redirect:/logout";
|
|
}
|
|
|
|
@PostMapping("/updateUser")
|
|
public String setUser(@ModelAttribute("userProfile") UserProfil userProfile, BindingResult result) {
|
|
// Obtenez l'authentification actuelle
|
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
// Vérifiez si l'utilisateur est authentifié
|
|
if (!authentication.getName().equals("anonymousUser")) {
|
|
// Obtenez les détails de l'utilisateur authentifié
|
|
String username = authentication.getName();
|
|
// Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur
|
|
UserProfil currentUserProfile = userService.utilisateurByName(username);
|
|
// Vérifiez si le mot de passe actuel correspond à celui stocké dans la base de données
|
|
if (!passwordEncoder.matches(userProfile.getCurrentPassword(), currentUserProfile.getPassword())) {
|
|
// Mot de passe actuel incorrect, renvoyer une erreur
|
|
result.rejectValue("currentPassword", "invalid", "Mot de passe actuel incorrect");
|
|
return "editProfil"; // Rediriger vers la page de modification du profil avec une erreur
|
|
}
|
|
// Vérifiez si le nouveau mot de passe et sa confirmation correspondent
|
|
if (!userProfile.getNewPassword().equals(userProfile.getConfirmPassword())) {
|
|
// Mauvaise correspondance entre le nouveau mot de passe et sa confirmation, renvoyer une erreur
|
|
result.rejectValue("confirmPassword", "invalid", "La confirmation du mot de passe ne correspond pas au nouveau mot de passe");
|
|
return "editProfil"; // Rediriger vers la page de modification du profil avec une erreur
|
|
}
|
|
// Vérifier si le mot de passe est sécurisé
|
|
String passwordRegex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$";
|
|
Pattern pattern = Pattern.compile(passwordRegex);
|
|
// Vérifier si le mot de passe correspond à l'expression régulière
|
|
if (!pattern.matcher(userProfile.getNewPassword()).matches()){
|
|
result.rejectValue("confirmPassword", "invalid", "Le mot de passe ne correspond pas aux critères de sécurité.");
|
|
return "editProfil";
|
|
}
|
|
// Mettez à jour le mot de passe de l'utilisateur avec le nouveau mot de passe
|
|
userService.setUtilisateur(userProfile);
|
|
return "redirect:/profil"; // Rediriger vers la page de profil après la modification réussie
|
|
} else {
|
|
return "accueil";
|
|
}
|
|
}
|
|
|
|
@GetMapping("/showProfil")
|
|
public String showOtherProfil(@RequestParam("userPseudo") String userPseudo, Model model) {
|
|
|
|
model.addAttribute("userProfil", userService.utilisateurByName(userPseudo));
|
|
|
|
|
|
|
|
return "showProfil";
|
|
}
|
|
|
|
}
|