summaryrefslogtreecommitdiff
path: root/models.py
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