diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ResetPasswordBean.java b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ResetPasswordBean.java new file mode 100644 index 0000000..6fcf21e --- /dev/null +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ResetPasswordBean.java @@ -0,0 +1,82 @@ +package uppa.project.bean; + +import jakarta.persistence.EntityManager; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; +import uppa.project.database.dao.DAO; +import uppa.project.database.dao.DAOException; +import uppa.project.database.dao.EntityManagerProvider; +import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; +import uppa.project.database.pojo.RecoveryPasswordToken; +import uppa.project.database.pojo.User; + +public class ResetPasswordBean implements Serializable { + + private static final long serialVersionUID = 1L; + + private String token; + private String password; + private String errorMessage; + + public ResetPasswordBean() { + } + + public ResetPasswordBean(String token, String password) { + this.token = token; + this.password = password; + } + + public boolean validate() { + Game_JPA_DAO_Factory jpaDaoFactory = new Game_JPA_DAO_Factory(); + DAO userDAO; + DAO recoveryPasswordTokenDAO; + + // Check if the user is valid + EntityManager entityManager = EntityManagerProvider.getInstance(); + entityManager.getTransaction().begin(); + try { + userDAO = jpaDaoFactory.getDAOUser(); + recoveryPasswordTokenDAO = jpaDaoFactory.getDAORecoveryPasswordToken(); + + // Check if the token is valid + RecoveryPasswordToken[] tokens = recoveryPasswordTokenDAO.findByField("token", token); + if (tokens.length == 0) { + errorMessage = "Ce token n'est pas valide"; + return false; + } + RecoveryPasswordToken token = tokens[0]; + + //Recuperer l'utilisateur associé au token + User user = token.getUser(); + if (user == null) { + errorMessage = "Erreur: Aucun utilisateur associé à ce token"; + return false; + } + user.setPassword(password); + + userDAO.update(user); + entityManager.getTransaction().commit(); + } catch (DAOException e) { + errorMessage = "Une erreur est survenue (DB_CONNECTION_ERROR)"; + entityManager.getTransaction().rollback(); + return false; + } + return true; + } + + public ResetPasswordBean setToken(String token) { + this.token = token; + return this; + } + + public ResetPasswordBean setPassword(String password) { + this.password = password; + return this; + } + + public String getErrorMessage() { + return errorMessage; + } +} diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ResetPasswordServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ResetPasswordServlet.java index 2e384ef..67452f9 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ResetPasswordServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ResetPasswordServlet.java @@ -1,16 +1,22 @@ package uppa.project.web.servlet; +import com.google.gson.Gson; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; +import uppa.project.bean.RegisterBean; +import uppa.project.bean.ResetPasswordBean; import uppa.project.database.dao.DAOException; import uppa.project.database.dao.jpa.DAO_JPA_RecoveryPasswordToken; import uppa.project.database.dao.jpa.DAO_JPA_User; import uppa.project.database.pojo.RecoveryPasswordToken; import uppa.project.database.pojo.User; +import uppa.project.json.HttpResponse; +import uppa.project.json.HttpResponseCode; @WebServlet(name = "resetPasswordServlet", value = "/reset-password") public class ResetPasswordServlet extends HttpServlet { @@ -20,11 +26,11 @@ public class ResetPasswordServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { RecoveryPasswordToken token = findRecoveryToken(request.getParameter("token")); if (token == null) { - response.sendRedirect(request.getContextPath() + "/forgotten-password?error=invalid-token"); + request.getRequestDispatcher("/WEB-INF/pages/invalid-token-password.jsp").forward(request, response); return; } if (token.getExpirationDate().compareTo(new java.util.Date()) < 0){ - response.sendRedirect(request.getContextPath() + "/forgotten-password?error=expired-token"); + request.getRequestDispatcher("/WEB-INF/pages/expired-token-password.jsp").forward(request, response); return; } request.setAttribute("current", "reset-password"); @@ -39,28 +45,28 @@ public class ResetPasswordServlet extends HttpServlet { * @throws IOException */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { - RecoveryPasswordToken recoveryPasswordToken = findRecoveryToken(request.getParameter("token")); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + PrintWriter out = response.getWriter(); - User user = recoveryPasswordToken.getUser(); - String newPassword = request.getParameter("newPassword"); - String confirmPassword = request.getParameter("confirmPassword"); - System.out.println("newPassword: " + newPassword); - System.out.println("confirmPassword: " + confirmPassword); - System.out.println(!newPassword.equals(confirmPassword)); - if (!newPassword.equals(confirmPassword)) { - System.out.println("ici"); - response.sendRedirect(request.getContextPath() + "/reset-password?error=matching-password&token=" + recoveryPasswordToken.getToken()); - return; - } - user.setPassword(newPassword); - DAO_JPA_User daoJpaUser = null; - try { - daoJpaUser = new DAO_JPA_User(); - daoJpaUser.update(user); - response.sendRedirect(request.getContextPath() + "/login?success=password-reseted"); - } catch (DAOException e) { - response.sendRedirect(request.getContextPath() + "/reset-password?error=1"); + ResetPasswordBean resetPasswordBean = new ResetPasswordBean() + .setToken(request.getParameter("token")) + .setPassword(request.getParameter("password")) + ; + + Gson gson = new Gson(); + HttpResponse httpResponse; + if (resetPasswordBean.validate()) { + httpResponse = new HttpResponse( + HttpResponseCode.OK, + "Register success" + ); + } else { + httpResponse = new HttpResponse(HttpResponseCode.INTERNAL_SERVER_ERROR, resetPasswordBean.getErrorMessage()); } + + out.println(gson.toJson(httpResponse)); + out.flush(); } public static RecoveryPasswordToken findRecoveryToken(String token) { diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/reset-password.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/reset-password.jsp index 0d76490..3b60588 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/reset-password.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/reset-password.jsp @@ -1,27 +1,22 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> - - - Récupération du mot de passe - -<%-- --%> - - - - <%@include file="../components/navbar.jsp"%> -
- -

Récupération du mot de passe

-
- - - - - <% if (request.getParameter("error") != null && request.getParameter("error").equals("matching-password")) {%> -

Les mots de passe ne correspondent pas

- <% } %> - - -
-
- - +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %> +<%@taglib prefix="form" tagdir="/WEB-INF/tags/forms" %> + + Cards Rush - Récuperation mot de passe + +
+
+
+
+
+
+

Récupération de mot de passe

+ +
+
+
+
+
+
+
+
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag new file mode 100644 index 0000000..e0939df --- /dev/null +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/reset-password.tag @@ -0,0 +1,114 @@ +<%@tag description="form/register" pageEncoding="UTF-8" %> + +
+ +
+ + +
+ +
+ + +
+ + +
+

Déjà inscrit ? Se connecter

+
+ + + + +