Coverage for authentication\validators\passwordValidator.py: 76%
17 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Validateur personnalisé pour les mots de passe forts.
4Ce module fournit un validateur qui impose des règles strictes de sécurité
5pour les mots de passe utilisateur :
6- Minimum 12 caractères
7- Au moins une majuscule
8- Au moins une minuscule
9- Au moins un chiffre
10- Au moins un caractère spécial
12:module: users.validators.password
13"""
15import re
16from django.core.exceptions import ValidationError
17from django.utils.translation import gettext
19class StrongPasswordValidator:
20 """
21 Validateur pour des mots de passe sécurisés.
23 Impose des règles strictes de sécurité pour les mots de passe utilisateur.
25 :methods:
26 - validate(password, user=None): Valide le mot de passe selon les règles.
27 - get_help_text(): Retourne un texte d'aide décrivant les règles.
28 """
30 def validate(self, password, user=None):
31 """
32 Valide un mot de passe selon les règles définies.
34 :param password: Le mot de passe à valider
35 :type password: str
36 :param user: L'utilisateur associé (non utilisé ici)
37 :type user: User, optional
38 :raises ValidationError: Si le mot de passe ne respecte pas une des règles
39 """
40 if len(password) < 12:
41 raise ValidationError(gettext("Le mot de passe doit contenir au moins 12 caractères."))
43 if not re.search(r'[A-Z]', password):
44 raise ValidationError(gettext("Le mot de passe doit contenir au moins une majuscule."))
46 if not re.search(r'[a-z]', password):
47 raise ValidationError(gettext("Le mot de passe doit contenir au moins une minuscule."))
49 if not re.search(r'[0-9]', password):
50 raise ValidationError(gettext("Le mot de passe doit contenir au moins un chiffre."))
52 if not re.search(r'[^A-Za-z0-9]', password):
53 raise ValidationError(gettext("Le mot de passe doit contenir au moins un caractère spécial."))
55 def get_help_text(self):
56 """
57 Retourne le texte d'aide pour ce validateur.
59 :return: Message d'aide expliquant les règles de mot de passe
60 :rtype: str
61 """
62 return gettext(
63 "Le mot de passe doit contenir au moins 12 caractères, "
64 "avec une majuscule, une minuscule, un chiffre et un caractère spécial."
65 )