Add two new custom password validators. One ensures passwords have a minimum number of uppercase letters and the other ensures passwords have a minimum amount of numbers. Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.core.exceptions import ValidationError
|
|
from django.utils.translation import gettext as _
|
|
|
|
|
|
class MinimumCapitalLettersContentValidator(object):
|
|
"""
|
|
Validate whether the password contains a minimum number of uppercase
|
|
letters.
|
|
"""
|
|
def __init__(self, minimum_capital_letters=1):
|
|
self.minimum_capital_letters = minimum_capital_letters
|
|
|
|
def validate(self, password, user=None):
|
|
if sum([1 for letter in password if letter.isupper()]) < self.minimum_capital_letters: # NOQA
|
|
raise ValidationError(
|
|
_(
|
|
'This password must contain at least '
|
|
'%(minimum_capital_letters)d capital letters.'
|
|
), code='password_not_enough_capital_letters',
|
|
params={
|
|
'minimum_capital_letters': self.minimum_capital_letters
|
|
},
|
|
)
|
|
|
|
def get_help_text(self):
|
|
return _(
|
|
'Your password must contain at least %(minimum_capital_letters)d '
|
|
'capital letters.'
|
|
% {'minimum_capital_letters': self.minimum_capital_letters}
|
|
)
|
|
|
|
|
|
class MinimumNumberContentValidator(object):
|
|
"""
|
|
Validate whether the password contains a minimum number digits.
|
|
"""
|
|
def __init__(self, minimum_numbers=1):
|
|
self.minimum_numbers = minimum_numbers
|
|
|
|
def validate(self, password, user=None):
|
|
if sum([1 for letter in password if letter.isdigit()]) < self.minimum_numbers: # NOQA
|
|
raise ValidationError(
|
|
_(
|
|
'This password must contain at least %(minimum_numbers)d '
|
|
'numbers.'
|
|
), code='password_not_enough_numbers',
|
|
params={'minimum_numbers': self.minimum_numbers},
|
|
)
|
|
|
|
def get_help_text(self):
|
|
return _(
|
|
'Your password must contain at least %(minimum_numbers)d numbers.'
|
|
% {'minimum_numbers': self.minimum_numbers}
|
|
)
|