From c845c168ef0b6b9b70d17282c5991d3aecdb0806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20D=C3=A9tr=C3=A9?= Date: Tue, 19 Nov 2024 10:56:50 +0100 Subject: [PATCH] fix: fix des messages d'erreur au reset du password --- .../resetPassword/resetPassword.test.ts | 14 ++++++++++---- .../resetPassword/resetPassword.usecase.ts | 15 +++++++++++---- .../auth/activer-compte/ActivateAccountForm.tsx | 2 +- .../auth/reset-password/ResetPasswordForm.tsx | 17 ++++++++++++----- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/server/src/modules/core/usecases/resetPassword/resetPassword.test.ts b/server/src/modules/core/usecases/resetPassword/resetPassword.test.ts index 505f815c5..9ef6016ee 100644 --- a/server/src/modules/core/usecases/resetPassword/resetPassword.test.ts +++ b/server/src/modules/core/usecases/resetPassword/resetPassword.test.ts @@ -23,7 +23,9 @@ describe("resetPassword usecase", () => { repeatPassword: correctPassword, resetPasswordToken: undefined as unknown as string, }) - ).rejects.toThrow("missing token"); + ).rejects.toThrow( + "Lien de réinitialisation incorrect ou expiré. Veuillez reprendre la procédure de réinitialisation depuis le début." + ); }); it("should throw an exception if the token is invalid", async () => { @@ -38,7 +40,9 @@ describe("resetPassword usecase", () => { repeatPassword: correctPassword, resetPasswordToken: "fakeToken", }) - ).rejects.toThrow("wrong token"); + ).rejects.toThrow( + "Lien de réinitialisation incorrect ou expiré. Veuillez reprendre la procédure de réinitialisation depuis le début." + ); }); it("should throw an exception if passwords are different", async () => { @@ -53,7 +57,7 @@ describe("resetPassword usecase", () => { repeatPassword: "bbb", resetPasswordToken, }) - ).rejects.toThrow("different passwords"); + ).rejects.toThrow("Mot de passe non identiques."); }); it("should throw an exception if password is unsafe", async () => { @@ -68,7 +72,9 @@ describe("resetPassword usecase", () => { repeatPassword: "azerty", resetPasswordToken, }) - ).rejects.toThrow("password unsafe"); + ).rejects.toThrow( + "Le mot de passe doit contenir entre 8 et 15 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)" + ); }); it("should set password", async () => { diff --git a/server/src/modules/core/usecases/resetPassword/resetPassword.usecase.ts b/server/src/modules/core/usecases/resetPassword/resetPassword.usecase.ts index 31075c0b3..5c2044f7b 100644 --- a/server/src/modules/core/usecases/resetPassword/resetPassword.usecase.ts +++ b/server/src/modules/core/usecases/resetPassword/resetPassword.usecase.ts @@ -24,7 +24,10 @@ export const [resetPassword, resetPasswordFactory] = inject( repeatPassword: string; resetPasswordToken: string; }) => { - if (!resetPasswordToken) throw Boom.unauthorized("missing token"); + if (!resetPasswordToken) + throw Boom.unauthorized( + "Lien de réinitialisation incorrect ou expiré. Veuillez reprendre la procédure de réinitialisation depuis le début." + ); let decryptedToken: { email: string }; try { @@ -32,17 +35,21 @@ export const [resetPassword, resetPasswordFactory] = inject( email: string; }; } catch { - throw Boom.unauthorized("wrong token"); + throw Boom.unauthorized( + "Lien de réinitialisation incorrect ou expiré. Veuillez reprendre la procédure de réinitialisation depuis le début." + ); } const email = decryptedToken.email.toLowerCase(); if (password !== repeatPassword) { - throw Boom.badRequest("different passwords"); + throw Boom.badRequest("Mot de passe non identiques."); } if (!password.match(passwordRegex)) { - throw Boom.badRequest("password unsafe"); + throw Boom.badRequest( + "Le mot de passe doit contenir entre 8 et 15 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)" + ); } const hashedPassword = hashPassword(password); diff --git a/ui/app/(wrapped)/auth/activer-compte/ActivateAccountForm.tsx b/ui/app/(wrapped)/auth/activer-compte/ActivateAccountForm.tsx index c9e631f4c..40c545b23 100644 --- a/ui/app/(wrapped)/auth/activer-compte/ActivateAccountForm.tsx +++ b/ui/app/(wrapped)/auth/activer-compte/ActivateAccountForm.tsx @@ -57,7 +57,7 @@ export const ActivateAccountForm = ({ activationToken }: { activationToken: stri pattern: { value: new RegExp(passwordRegex), message: - "Le mot de passe doit contenir au moins 8 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)", + "Le mot de passe doit contenir entre 8 et 15 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)", }, })} /> diff --git a/ui/app/(wrapped)/auth/reset-password/ResetPasswordForm.tsx b/ui/app/(wrapped)/auth/reset-password/ResetPasswordForm.tsx index e6a6caeb2..a7b57b99c 100644 --- a/ui/app/(wrapped)/auth/reset-password/ResetPasswordForm.tsx +++ b/ui/app/(wrapped)/auth/reset-password/ResetPasswordForm.tsx @@ -11,6 +11,7 @@ import { Input, Text, } from "@chakra-ui/react"; +import { isAxiosError } from "axios"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { passwordRegex } from "shared/utils/passwordRegex"; @@ -31,6 +32,7 @@ export const ResetPasswordForm = ({ resetPasswordToken }: { resetPasswordToken: const { mutate: activateAccount, + error, isError, isLoading, } = client.ref("[POST]/auth/reset-password").useMutation({ @@ -54,7 +56,7 @@ export const ResetPasswordForm = ({ resetPasswordToken }: { resetPasswordToken: pattern: { value: new RegExp(passwordRegex), message: - "Le mot de passe doit contenir au moins 8 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)", + "Le mot de passe doit contenir entre 8 et 15 caractères, une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial (les espaces ne sont pas acceptés)", }, })} /> @@ -75,10 +77,15 @@ export const ResetPasswordForm = ({ resetPasswordToken }: { resetPasswordToken: /> {!!errors.repeatPassword && {errors.repeatPassword.message}} - {isError && ( - - Erreur lors de la réinitialisation du mot de passe - + {isError && isAxiosError(error) && ( + <> + + Erreur lors de la réinitialisation du mot de passe : + + + {error.response?.data?.message} + + )}