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

1""" 

2Validateur personnalisé pour les mots de passe forts. 

3 

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 

11 

12:module: users.validators.password 

13""" 

14 

15import re 

16from django.core.exceptions import ValidationError 

17from django.utils.translation import gettext 

18 

19class StrongPasswordValidator: 

20 """ 

21 Validateur pour des mots de passe sécurisés. 

22 

23 Impose des règles strictes de sécurité pour les mots de passe utilisateur. 

24 

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 """ 

29 

30 def validate(self, password, user=None): 

31 """ 

32 Valide un mot de passe selon les règles définies. 

33 

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.")) 

42 

43 if not re.search(r'[A-Z]', password): 

44 raise ValidationError(gettext("Le mot de passe doit contenir au moins une majuscule.")) 

45 

46 if not re.search(r'[a-z]', password): 

47 raise ValidationError(gettext("Le mot de passe doit contenir au moins une minuscule.")) 

48 

49 if not re.search(r'[0-9]', password): 

50 raise ValidationError(gettext("Le mot de passe doit contenir au moins un chiffre.")) 

51 

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.")) 

54 

55 def get_help_text(self): 

56 """ 

57 Retourne le texte d'aide pour ce validateur. 

58 

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 )