Password validations: Add two new validators
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>
This commit is contained in:
56
mayan/apps/authentication/validators.py
Normal file
56
mayan/apps/authentication/validators.py
Normal file
@@ -0,0 +1,56 @@
|
||||
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}
|
||||
)
|
||||
Reference in New Issue
Block a user