Files
mayan-edms/mayan/apps/authentication/validators.py
Roberto Rosario 10ccab662f 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>
2018-11-27 20:07:18 -04:00

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}
)