blob: 04517023286414ec2e34fd6b72d5a2c40f219f97 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
from django import forms
import re
class ChangePasswordForm(forms.Form):
new_password = forms.CharField(widget=forms.PasswordInput)
new_password_again = forms.CharField(widget=forms.PasswordInput)
def clean(self):
'''
Validate the password submitted.
'''
cleaned_data = self.cleaned_data
# The two submitted strings need to match.
new_password = cleaned_data.get('new_password')
new_password_again = cleaned_data.get('new_password_again')
if new_password != new_password_again:
raise forms.ValidationError('The typed passwords do not \
match.')
# Check that the length is at least 10 characters.
if not len(new_password) >= 10:
raise forms.ValidationError('Your password needs to be at \
least 10 characters long. Currently %d characters.' % len(new_password))
# The password needs to contain at least one upper and one lower case
# letter and three numbers or special characters.
if not re.search('[a-z]', new_password) or not re.search(
'[A-Z]', new_password):
raise forms.ValidationError('You need at least one upper \
case letter and one lower case letter in your password.')
numbers = re.findall('\d', new_password)
specials = re.findall('[,.\[\]!@#$%^&*?_\(\)-]', new_password)
if (len(numbers)+len(specials)) < 3:
raise forms.ValidationError('You need at least three numbers or \
special characters i.e. 1234567890,.][!@#$%^&*?_()-')
return cleaned_data
|