From 353ba78815abd7307a8559182c86dc242b28ea81 Mon Sep 17 00:00:00 2001 From: codeurzebs Date: Mon, 10 Jun 2024 00:26:41 +0100 Subject: [PATCH] add Lock_Screen config --- .../candidatpotentiel/DashboardServlet.java | 4 + .../superadmin/EditUserServlet.java | 5 +- .../superadmin/LockScreenServlet.java | 120 ++++++++++++++++++ .../data/secure/superadmin-area/dashboard.jsp | 2 +- .../secure/superadmin-area/lock_screen.jsp | 88 +++++++++++++ 5 files changed, 216 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/spiderdiplome/controllers/accountservlets/candidatpotentiel/DashboardServlet.java create mode 100644 src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/LockScreenServlet.java create mode 100644 src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/lock_screen.jsp diff --git a/src/main/java/com/spiderdiplome/controllers/accountservlets/candidatpotentiel/DashboardServlet.java b/src/main/java/com/spiderdiplome/controllers/accountservlets/candidatpotentiel/DashboardServlet.java new file mode 100644 index 0000000..003d518 --- /dev/null +++ b/src/main/java/com/spiderdiplome/controllers/accountservlets/candidatpotentiel/DashboardServlet.java @@ -0,0 +1,4 @@ +package com.spiderdiplome.controllers.accountservlets.candidatpotentiel; + +public class DashboardServlet { +} diff --git a/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/EditUserServlet.java b/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/EditUserServlet.java index a6ffacf..fcc0922 100644 --- a/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/EditUserServlet.java +++ b/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/EditUserServlet.java @@ -74,6 +74,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S Utilisateur existingUser = utilisateurDAO.findByMatricule(matricule); if (existingUser == null) { setErrorAndRedirect(req, resp, "Aucun utilisateur avec ce matricule."); + System.out.println("Aucun utilisateur avec ce matricule."); return; } @@ -82,7 +83,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S try { existingUser = updateUser(existingUser, phoneEmail, statusbd, role, firstName, lastName, password); utilisateurDAO.update(existingUser); - + System.out.println("Le compte a été mis à jour avec succès !"); setSuccessAndRedirect(req, resp, "Le compte a été mis à jour avec succès !"); } catch (Exception e) { setErrorAndRedirect(req, resp, "Erreur lors de la mise à jour de l'utilisateur : " + e.getMessage()); @@ -102,7 +103,7 @@ private Utilisateur updateUser(Utilisateur user, String phoneEmail, int status, user.setRole(role); user.setNom(firstName); user.setPrenom(lastName); - if (password != null && !password.isEmpty()) { + if (password != null) { String hashedPassword = this.passwordHashing.hash(password, salt); if (hashedPassword == null) { throw new Exception("Erreur lors du hachage du mot de passe"); diff --git a/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/LockScreenServlet.java b/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/LockScreenServlet.java new file mode 100644 index 0000000..c75f3f0 --- /dev/null +++ b/src/main/java/com/spiderdiplome/controllers/accountservlets/superadmin/LockScreenServlet.java @@ -0,0 +1,120 @@ +package com.spiderdiplome.controllers.accountservlets.superadmin; + +import com.spiderdiplome.models.Utilisateur; +import com.spiderdiplome.repository.implement.UtilisateurDAOImpl; +import com.spiderdiplome.security.authentification.AuthenticationService; +import com.spiderdiplome.security.tokenjjwt.TokenProvider; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.*; +import javax.ws.rs.core.HttpHeaders; +import java.io.IOException; +import java.io.PrintWriter; + +@WebServlet(description = "Lock Screen Servlet", urlPatterns = {"/verrouiller"}) +public class LockScreenServlet extends HttpServlet { + + private UtilisateurDAOImpl utilisateurDAO; + private AuthenticationService authService; + + @Override + public void init() throws ServletException { + super.init(); + // Initialisation du servlet + utilisateurDAO = new UtilisateurDAOImpl(); + authService = new AuthenticationService(); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + HttpSession session = req.getSession(false); + if (session != null && session.getAttribute("user") != null) { + Utilisateur utilisateur = (Utilisateur) session.getAttribute("user"); + req.setAttribute("usermatricule", utilisateur.getMatricule()); + session.invalidate(); + this.getServletContext().getRequestDispatcher("/WEB-INF/views/v1/data/secure/superadmin-area/lock_screen.jsp").forward(req, resp); + } else { + this.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp); + } + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String matricule = req.getParameter("matricule"); + String password = req.getParameter("password"); + try { + if (authService.authenticate(matricule, password)) { + handleSuccessfulAuthentication(req, resp, matricule); + } else { + forwardWithError(req, resp, "Le nom d'utilisateur ou le mot de passe que vous avez entré est incorrect. Veuillez réessayer."); + } + } catch (Exception e) { + forwardWithError(req, resp, "Certaines données que vous avez entrées ne sont pas valides. Veuillez vérifier et réessayer."); + } + } + + private boolean isInvalid(String matricule, String password) { + return matricule == null || matricule.isEmpty() || password == null || password.isEmpty(); + } + + private boolean isUserAlreadyLoggedIn(HttpServletRequest req) { + HttpSession session = req.getSession(false); + return session != null && session.getAttribute("user") != null; + } + + private void handleSuccessfulAuthentication(HttpServletRequest req, HttpServletResponse resp, String matricule) throws IOException { + Utilisateur utilisateur = utilisateurDAO.findByMatricule(matricule); + HttpSession session = req.getSession(true); + session.setAttribute("user", utilisateur); + + TokenProvider tokenProvider = (TokenProvider) getServletContext().getAttribute("tokenProvider"); + String token = tokenProvider.createToken(matricule); + session.setAttribute("token", token); + + resp.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + token); + + Cookie userCookie = new Cookie("user_spiderdiplome", matricule); + userCookie.setMaxAge(24 * 60 * 60); + resp.addCookie(userCookie); + + String redirectUrl = getRedirectUrl(utilisateur, token); + sendSuccessResponse(resp, redirectUrl); + } + + private String getRedirectUrl(Utilisateur utilisateur, String token) { + switch (utilisateur.getRole()) { + case "superadmin": + return "tableau-de-bord?st=" + token; + case "user": + return "userPage.jsp"; + default: + return "otherPage.jsp"; + } + } + + private void sendSuccessResponse(HttpServletResponse resp, String redirectUrl) throws IOException { + resp.setContentType("text/html"); + PrintWriter out = resp.getWriter(); + out.println("
\n" + + "\t\t\t\t\t\t\t

Authentification Reussie! Connexion en cours.......

\n" + + "\t\t\t\t\t\t
"); + out.println(""); + } + + private void forwardWithError(HttpServletRequest req, HttpServletResponse resp, String errorMessage) throws ServletException, IOException { + req.setAttribute("errorMessage", "
\n" + + " Erreur d'authentification! " + errorMessage + "\n" + + "
"); + this.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp); + } + + @Override + public void destroy() { + super.destroy(); + } +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/dashboard.jsp b/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/dashboard.jsp index 26efd10..7529a07 100644 --- a/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/dashboard.jsp +++ b/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/dashboard.jsp @@ -244,7 +244,7 @@ - + diff --git a/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/lock_screen.jsp b/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/lock_screen.jsp new file mode 100644 index 0000000..6e60db8 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/v1/data/secure/superadmin-area/lock_screen.jsp @@ -0,0 +1,88 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + Verrouillage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +