feat: devWeb - update reset password page

This commit is contained in:
kmitresse
2024-04-17 16:58:26 +02:00
parent 2c3fee898a
commit ae126d4e09
4 changed files with 246 additions and 49 deletions
@@ -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<User> userDAO;
DAO<RecoveryPasswordToken> 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;
}
}
@@ -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) {