From 885ea243c12077ef1d428d733ae6bdea931d8971 Mon Sep 17 00:00:00 2001 From: kmitresse Date: Tue, 11 Jun 2024 14:09:02 +0200 Subject: [PATCH] feat: devweb - Make translations on forgotten and reset password pages (including mail and token) --- .../project/bean/ForgottenPasswordBean.java | 29 ++++---- .../web/servlet/ForgottenPasswordServlet.java | 8 ++- .../web/servlet/ResetPasswordServlet.java | 5 ++ .../pages/errors/expired-token-password.jsp | 6 +- .../pages/errors/invalid-token-password.jsp | 9 ++- .../WEB-INF/pages/forgotten-password.jsp | 6 +- .../webapp/WEB-INF/pages/reset-password.jsp | 10 ++- .../WEB-INF/tags/forms/forgotten-password.tag | 39 ++--------- .../WEB-INF/tags/forms/reset-password.tag | 12 ++-- .../webapp/WEB-INF/tags/layouts/error.tag | 5 +- .../src/main/webapp/WEB-INF/translations.json | 68 ++++++++++++++++++- 11 files changed, 126 insertions(+), 71 deletions(-) diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ForgottenPasswordBean.java b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ForgottenPasswordBean.java index 8c810ab..19d4309 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ForgottenPasswordBean.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/bean/ForgottenPasswordBean.java @@ -8,6 +8,7 @@ package uppa.project.bean; import java.io.Serial; import java.io.Serializable; +import java.text.MessageFormat; import java.util.Properties; import java.util.UUID; import javax.mail.Authenticator; @@ -24,6 +25,7 @@ import uppa.project.database.dao.DAOException; import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; import uppa.project.database.pojo.RecoveryPasswordToken; import uppa.project.database.pojo.User; +import uppa.project.web.translation.Translator; import static uppa.project.web.servlet.ForgottenPasswordServlet.CreateToken; @@ -34,6 +36,8 @@ public class ForgottenPasswordBean implements Serializable { private String email; + private Translator translator; + public ForgottenPasswordBean() { } @@ -73,6 +77,11 @@ public class ForgottenPasswordBean implements Serializable { return this; } + public ForgottenPasswordBean setTranslator(Translator translator) { + this.translator = translator; + return this; + } + /** * Création et envoi d'un token de réinitialisation de mot de passe * @@ -117,20 +126,12 @@ public class ForgottenPasswordBean implements Serializable { 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 :"+ requestPath +"/reset-password?token=" + token + "\n\n" + - "Ce lien est valable 10 minutes.\n" + - "Si vous n'êtes pas à l'origine de cette demande, ne prenez pas compte de ce mail.\n\n" + - "Cordialement,\n" + - "L'équipe CardRush" + - "\n\n\n\n" + - "Ce message est généré automatiquement, merci de ne pas y répondre.\n" + - "CardRush est la propriété de CardRush Corporation, 2024. Tous droits réservés.\n" + - "CardRush Corporation, 2024, 1 rue de la programmation web, 64000 Pau, France\n" + - "Société fictive créée dans le cadre d'un projet universitaire. Auteurs du projet: MITRESSÉ Kevin & VABRE Lucàs " - ); + message.setSubject(this.translator.translate("forgotten_email_object")); + String contentTemplate = this.translator.translate("forgotten_email_content"); + String content = MessageFormat.format(contentTemplate, requestPath, token); + message.setText(content); + System.out.println(contentTemplate); + System.out.println(content); // Envoi du message Transport.send(message); diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ForgottenPasswordServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ForgottenPasswordServlet.java index a271912..4dd2466 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ForgottenPasswordServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/ForgottenPasswordServlet.java @@ -25,6 +25,7 @@ import uppa.project.database.pojo.User; import uppa.project.database.dao.EntityManagerProvider; import uppa.project.json.HttpResponse; import uppa.project.json.HttpResponseCode; +import uppa.project.web.translation.Translator; @WebServlet(name = "forgottenPasswordServlet", value = "/forgotten-password") public class ForgottenPasswordServlet extends HttpServlet { @@ -41,6 +42,10 @@ public class ForgottenPasswordServlet extends HttpServlet { * @throws ServletException si une erreur de servlet survient */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + if (request.getSession().getAttribute("translator") == null) { + request.getSession().setAttribute("language", "FR"); + request.getSession().setAttribute("translator", Translator.generateTranslator(request.getSession(), request.getServletContext())); + } request.setAttribute("current", "forgotten-password"); request.getRequestDispatcher("/WEB-INF/pages/forgotten-password.jsp").forward(request, response); } @@ -58,7 +63,8 @@ public class ForgottenPasswordServlet extends HttpServlet { PrintWriter out = response.getWriter(); ForgottenPasswordBean forgottenPasswordBean = new ForgottenPasswordBean() - .setEmail(request.getParameter("email")); + .setEmail(request.getParameter("email")) + .setTranslator((Translator) request.getSession().getAttribute("translator")); Gson gson = new Gson(); HttpResponse httpResponse; 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 e97403a..67ced00 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 @@ -14,6 +14,7 @@ import uppa.project.database.dao.jpa.DAO_JPA_RecoveryPasswordToken; import uppa.project.database.pojo.RecoveryPasswordToken; import uppa.project.json.HttpResponse; import uppa.project.json.HttpResponseCode; +import uppa.project.web.translation.Translator; @WebServlet(name = "resetPasswordServlet", value = "/reset-password") public class ResetPasswordServlet extends HttpServlet { @@ -29,6 +30,10 @@ public class ResetPasswordServlet extends HttpServlet { * @throws ServletException si une erreur de servlet survient */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + if (request.getSession().getAttribute("translator") == null) { + request.getSession().setAttribute("language", "FR"); + request.getSession().setAttribute("translator", Translator.generateTranslator(request.getSession(), request.getServletContext())); + } RecoveryPasswordToken token = findRecoveryToken(request.getParameter("token")); if (token == null) { request.getRequestDispatcher("/WEB-INF/pages/errors/invalid-token-password.jsp").forward(request, response); diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/expired-token-password.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/expired-token-password.jsp index ac0a8bf..cc05dbd 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/expired-token-password.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/expired-token-password.jsp @@ -1,10 +1,12 @@ +<%@ page import="uppa.project.web.translation.Translator" %> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %> <%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %> <%@taglib prefix="form" tagdir="/WEB-INF/tags/forms" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %> - + - Retour à la page de connexion + ${translator.translate('error_token_go_to_connection_page')} diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/invalid-token-password.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/invalid-token-password.jsp index 09db196..ca95275 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/invalid-token-password.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/errors/invalid-token-password.jsp @@ -1,9 +1,12 @@ +<%@ page import="uppa.project.web.translation.Translator" %> <%@ 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" %> +<%@taglib prefix="form" tagdir="/WEB-INF/tags/forms" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %> - + - Retour à la page de connexion + ${translator.translate('error_token_go_to_connection_page')} - \ No newline at end of file + diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/forgotten-password.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/forgotten-password.jsp index 4cbf15c..36650d7 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/forgotten-password.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/forgotten-password.jsp @@ -1,9 +1,11 @@ +<%@ page import="uppa.project.web.translation.Translator" %> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %> <%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %> <%@taglib prefix="form" tagdir="/WEB-INF/tags/forms" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %> - + @@ -12,7 +14,7 @@
-

Mot de passe oublié ?

+

${translator.translate('forgotten_title')}

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 5d9eebd..62cccc2 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,9 +1,11 @@ +<%@ page import="uppa.project.web.translation.Translator" %> <%@ 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" %> <%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %> - + @@ -12,12 +14,8 @@
-

Récupération de mot de passe

+

${translator.translate('reset_title')}

-
-

- Déjà inscrit ? Se connecter -

diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/forgotten-password.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/forgotten-password.tag index c1c9e3f..87c92a4 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/forgotten-password.tag +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/forms/forgotten-password.tag @@ -1,47 +1,18 @@ <%@tag description="form/forgotten-password" pageEncoding="UTF-8" %> +<%@ tag import="uppa.project.web.translation.Translator" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %>
- +
-
Veuillez entrer votre email pour obtenir un lien de récupération
+
${translator.translate('forgotten_email_description')}
- +
-<%----%> - 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 index 9218cd5..f88bbc3 100644 --- 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 @@ -1,23 +1,25 @@ <%@tag description="form/register" pageEncoding="UTF-8" %> +<%@ tag import="uppa.project.web.translation.Translator" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %>
- +
- +
- +
- +
- +
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/layouts/error.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/layouts/error.tag index 35b9788..7fb4d2a 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/layouts/error.tag +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/layouts/error.tag @@ -2,10 +2,11 @@ <%@taglib prefix="layout" tagdir="/WEB-INF/tags/layouts" %> <%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %> <%@taglib prefix="form" tagdir="/WEB-INF/tags/forms" %> - +<%@ tag import="uppa.project.web.translation.Translator" %> +<% Translator translator = (Translator) request.getSession().getAttribute("translator"); %> <%@attribute name="message"%> - +
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/translations.json b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/translations.json index 04ae7cf..cbe62dd 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/translations.json +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/translations.json @@ -120,8 +120,8 @@ "FR": "Les mots de passe ne correspondent pas" }, "forgotten_title" : { - "EN": "Forgotten password", - "FR": "Mot de passe oublié" + "EN": "Forgotten password ?", + "FR": "Mot de passe oublié ?" }, "forgotten_submit" : { "EN": "Send email", @@ -138,5 +138,69 @@ "forgotten_email_description" : { "EN": "Enter the email address associated with your account to receive a password reset link.", "FR": "Entrez l'adresse email associée à votre compte pour recevoir un lien de réinitialisation de mot de passe." + }, + "forgotten_email_object" : { + "EN": "Reset password", + "FR": "Réinitialiser le mot de passe" + }, + "forgotten_email_content" : { + "EN": "Hello,\n\nYou have requested a password reset.\nTo do this, please click on the following link: {0}/reset-password?token={1}\n\nThis link is valid for 10 minutes.\nIf you are not the origin of this request, please ignore this email.\n\nSincerely,\nThe CardRush team\n\n\n\nThis message is generated automatically, please do not reply to it.\nCardRush is the property of CardRush Corporation, 2024. All rights reserved.\nCardRush Corporation, 2024, 1 rue de la programmation web, 64000 Pau, France\nFictitious company created as part of a university project. Project authors: MITRESSÉ Kevin & VABRE Lucàs", + "FR": "Bonjour,\n\nVous avez demandé la réinitialisation de votre mot de passe.\nPour cela, veuillez cliquer sur le lien suivant :{0}/reset-password?token={1}\n\nCe lien est valable 10 minutes.\nSi vous n'êtes pas à l'origine de cette demande, ne prenez pas compte de ce mail.\n\nCordialement,\nL'équipe CardRush\n\n\n\nCe message est généré automatiquement, merci de ne pas y répondre.\nCardRush est la propriété de CardRush Corporation, 2024. Tous droits réservés.\\nCardRush Corporation, 2024, 1 rue de la programmation web, 64000 Pau, France\nSociété fictive créée dans le cadre d'un projet universitaire. Auteurs du projet: MITRESSÉ Kevin & VABRE Lucàs" + }, + "reset_title" : { + "EN": "Reset password", + "FR": "Réinitialisation du mot de passe" + }, + "reset_submit" : { + "EN": "Reset", + "FR": "Réinitialiser" + }, + "invalid_token" : { + "EN": "Invalid token", + "FR": "Token invalide" + }, + "expired_token" : { + "EN": "Expired token", + "FR": "Token expiré" + }, + "error_token_go_to_connection_page" :{ + "EN": "Return to the login page", + "FR": "Retour à la page de connexion" + }, + "error" : { + "EN": "Error", + "FR": "Erreur" + }, + + "reset_success" : { + "EN": "Password reset successfully", + "FR": "Mot de passe réinitialisé avec succès" + }, + "reset_password" : { + "EN": "New password", + "FR": "Nouveau mot de passe" + }, + "reset_confirm_password" : { + "EN": "Confirm new password", + "FR": "Confirmer le nouveau mot de passe" + }, + "reset_password_description" : { + "EN": "Enter your new password", + "FR": "Entrez votre nouveau mot de passe" + }, + "reset_error_password" : { + "EN": "Passwords do not match", + "FR": "Les mots de passe ne correspondent pas" + }, + "profile_title" : { + "EN": "Profile", + "FR": "Profil" + }, + "profile_edit" : { + "EN": "Edit", + "FR": "Modifier" } + + + }