import re
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _
from django.contrib.auth import password_validation
[docs]class NumberValidator(object):
[docs] def validate(self, password, user=None):
if not re.findall('\d', password):
raise ValidationError(
_("The password must contain at least 1 digit, 0-9."),
code='password_no_number',
)
[docs] def get_help_text(self):
return _(
"Your password must contain at least 1 digit, 0-9."
)
[docs]class UppercaseValidator(object):
[docs] def validate(self, password, user=None):
if not re.findall('[A-Z]', password):
raise ValidationError(
_("The password must contain at least 1 uppercase letter, A-Z."),
code='password_no_upper',
)
[docs] def get_help_text(self):
return _(
"Your password must contain at least 1 uppercase letter, A-Z."
)
[docs]class LowercaseValidator(object):
[docs] def validate(self, password, user=None):
if not re.findall('[a-z]', password):
raise ValidationError(
_("The password must contain at least 1 lowercase letter, a-z."),
code='password_no_lower',
)
[docs] def get_help_text(self):
return _(
"Your password must contain at least 1 lowercase letter, a-z."
)
[docs]class SymbolValidator(object):
[docs] def validate(self, password, user=None):
if not re.findall('[()[\]{}|\\`~!@#$%^&*_\-+=;:\'",<>./?]', password):
raise ValidationError(
_("The password must contain at least 1 symbol: " +
"()[]{}|\`~!@#$%^&*_-+=;:'\",<>./?"),
code='password_no_symbol',
)
[docs] def get_help_text(self):
return _(
"Your password must contain at least 1 symbol: " +
"()[]{}|\`~!@#$%^&*_-+=;:'\",<>./?"
)
[docs]def get_validators():
validators = []
validators.append(NumberValidator())
validators.append(UppercaseValidator())
validators.append(LowercaseValidator())
validators.append(SymbolValidator())
validators.append(password_validation.MinimumLengthValidator(8))
return validators