mirror of
https://github.com/kmitresse/Cards-Rush.git
synced 2026-05-15 17:11:48 +00:00
feat: devWeb - update forgotten-password
This commit is contained in:
+24
-61
@@ -6,6 +6,7 @@
|
||||
|
||||
package uppa.project.web.servlet;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.annotation.WebServlet;
|
||||
@@ -13,20 +14,17 @@ import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.UUID;
|
||||
import javax.mail.Message;
|
||||
import uppa.project.Global;
|
||||
import java.io.PrintWriter;
|
||||
import uppa.project.bean.ForgottenPasswordBean;
|
||||
import uppa.project.database.dao.DAO;
|
||||
import uppa.project.database.dao.DAOException;
|
||||
import uppa.project.database.dao.jpa.DAO_JPA_User;
|
||||
import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory;
|
||||
import uppa.project.database.pojo.RecoveryPasswordToken;
|
||||
import uppa.project.database.pojo.User;
|
||||
import java.util.Properties;
|
||||
import javax.mail.*;
|
||||
import javax.mail.internet.*;
|
||||
import uppa.project.database.dao.EntityManagerProvider;
|
||||
|
||||
import uppa.project.json.HttpResponse;
|
||||
import uppa.project.json.HttpResponseCode;
|
||||
|
||||
@WebServlet(name = "forgottenPasswordServlet", value = "/forgotten-password")
|
||||
public class ForgottenPasswordServlet extends HttpServlet {
|
||||
@@ -36,7 +34,7 @@ public class ForgottenPasswordServlet extends HttpServlet {
|
||||
|
||||
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||
request.setAttribute("current", "forgotten-password");
|
||||
request.getRequestDispatcher("/WEB-INF/views/forgotten-password.jsp").forward(request, response);
|
||||
request.getRequestDispatcher("/WEB-INF/pages/forgotten-password.jsp").forward(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -47,62 +45,27 @@ public class ForgottenPasswordServlet extends HttpServlet {
|
||||
* @throws IOException
|
||||
*/
|
||||
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String email = request.getParameter("email");
|
||||
User user = getUserByEmail(email);
|
||||
if (user == null) {
|
||||
response.sendRedirect(request.getContextPath() + "/forgotten-password?error=1");
|
||||
response.setContentType("application/json");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
PrintWriter out = response.getWriter();
|
||||
|
||||
ForgottenPasswordBean forgottenPasswordBean = new ForgottenPasswordBean()
|
||||
.setEmail(request.getParameter("email"));
|
||||
|
||||
Gson gson = new Gson();
|
||||
HttpResponse httpResponse;
|
||||
String url = request.getRequestURL().toString();
|
||||
//retirer le dernier segment de l'url pour avoir le contextPath
|
||||
String uri = url.substring(0, url.lastIndexOf("/"));
|
||||
System.out.println(uri);
|
||||
if (forgottenPasswordBean.validate(uri)) {
|
||||
httpResponse = new HttpResponse(HttpResponseCode.OK, "Mail sent");
|
||||
} else {
|
||||
String token = UUID.randomUUID().toString();
|
||||
RecoveryPasswordToken recoveryPasswordToken = new RecoveryPasswordToken(token, user);
|
||||
CreateToken(recoveryPasswordToken);
|
||||
sendRecoveryEmail(email, token, request);
|
||||
response.sendRedirect(request.getContextPath() + "/forgotten-password?success=200");
|
||||
httpResponse = new HttpResponse(HttpResponseCode.NOT_FOUND, "<strong>Erreur:</strong> L'email renseigné est inconnu de nos services.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoi d'un e-mail de réinitialisation de mot de passe
|
||||
*
|
||||
* @param email
|
||||
* @param token
|
||||
*/
|
||||
public void sendRecoveryEmail(String email, String token, HttpServletRequest request){
|
||||
String host = Global.MAIL_HOST;
|
||||
String port = Global.MAIL_PORT;
|
||||
String username = Global.MAIL_USERNAME;
|
||||
String password = Global.MAIL_PASSWORD;
|
||||
|
||||
Properties props = new Properties();
|
||||
props.put("mail.smtp.auth", "true");
|
||||
props.put("mail.smtp.starttls.enable", "true");
|
||||
props.put("mail.smtp.host", host);
|
||||
props.put("mail.smtp.port", port);
|
||||
|
||||
Session session = Session.getInstance(props, new Authenticator() {
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(username, password);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
// Création du message
|
||||
Message message = new MimeMessage(session);
|
||||
message.setFrom(new InternetAddress(username));
|
||||
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email));
|
||||
message.setSubject("Réinitialisation de votre mot de passe");
|
||||
message.setText("Bonjour,\n\n" +
|
||||
"Vous avez demandé la réinitialisation de votre mot de passe.\n" +
|
||||
"Pour cela, veuillez cliquer sur le lien suivant :"+ request.getContextPath() +"/project_war_exploded/reset-password?token=" + token + "\n\n" +
|
||||
"Cordialement,\n" +
|
||||
"L'équipe CardRush");
|
||||
// Envoi du message
|
||||
Transport.send(message);
|
||||
|
||||
System.out.println("E-mail envoyé avec succès à : " + email);
|
||||
} catch (MessagingException e) {
|
||||
throw new RuntimeException("Erreur lors de l'envoi de l'e-mail", e);
|
||||
}
|
||||
out.println(gson.toJson(httpResponse));
|
||||
out.flush();
|
||||
}
|
||||
|
||||
public static User getUserByEmail(String email){
|
||||
|
||||
Reference in New Issue
Block a user