Skip to content

Commit

Permalink
fix: fix des messages d'erreur au reset du password
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasDetre committed Nov 21, 2024
1 parent ef03bb4 commit c845c16
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand All @@ -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 () => {
Expand All @@ -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 () => {
Expand All @@ -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 () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,32 @@ 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 {
decryptedToken = jwt.verify(resetPasswordToken, deps.jwtSecret) as {
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)",
},
})}
/>
Expand Down
17 changes: 12 additions & 5 deletions ui/app/(wrapped)/auth/reset-password/ResetPasswordForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -31,6 +32,7 @@ export const ResetPasswordForm = ({ resetPasswordToken }: { resetPasswordToken:

const {
mutate: activateAccount,
error,
isError,
isLoading,
} = client.ref("[POST]/auth/reset-password").useMutation({
Expand All @@ -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)",
},
})}
/>
Expand All @@ -75,10 +77,15 @@ export const ResetPasswordForm = ({ resetPasswordToken }: { resetPasswordToken:
/>
{!!errors.repeatPassword && <FormErrorMessage>{errors.repeatPassword.message}</FormErrorMessage>}
</FormControl>
{isError && (
<Text fontSize="sm" mt="4" textAlign="center" color="red.500">
Erreur lors de la réinitialisation du mot de passe
</Text>
{isError && isAxiosError(error) && (
<>
<Text fontSize="sm" mt="4" textAlign="center" color="red.500">
Erreur lors de la réinitialisation du mot de passe :
</Text>
<Text fontSize="sm" mt="4" textAlign="center" color="red.500">
{error.response?.data?.message}
</Text>
</>
)}
<Flex>
<Button isLoading={isLoading} type="submit" mt="4" ml="auto" variant="primary">
Expand Down

0 comments on commit c845c16

Please sign in to comment.