diff --git a/amadeus/templates/base.html b/amadeus/templates/base.html index 3380838..92e4730 100644 --- a/amadeus/templates/base.html +++ b/amadeus/templates/base.html @@ -118,7 +118,7 @@
diff --git a/users/forms.py b/users/forms.py index 2fa24ed..75600af 100644 --- a/users/forms.py +++ b/users/forms.py @@ -2,6 +2,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from rolepermissions.shortcuts import assign_role +from django.contrib.auth import update_session_auth_hash from .models import User class Validation(forms.ModelForm): @@ -14,49 +15,57 @@ class Validation(forms.ModelForm): if image: if hasattr(image, '_size'): if image._size > self.MAX_UPLOAD_SIZE: - raise forms.ValidationError(_("The image is too large. It should have less than 2MB.")) + self._errors['image'] = [_("The image is too large. It should have less than 2MB.")] - return image + return ValueError - def clean_password(self): - password = self.cleaned_data.get('password') + return image + def clean_new_password(self): + password = self.cleaned_data.get('new_password') + print(self.cleaned_data) if self.is_edit and len(password) == 0: return password # At least MIN_LENGTH long if len(password) < self.MIN_PASS_LENGTH: - raise forms.ValidationError(_("The password must contain at least % d characters." % self.MIN_PASS_LENGTH)) + self._errors['new_password'] = [_("The new password must contain at least % d characters." % self.MIN_PASS_LENGTH)] + + return ValueError # At least one letter and one non-letter first_isalpha = password[0].isalpha() if all(c.isalpha() == first_isalpha for c in password): - raise forms.ValidationError(_('The password must contain at least one letter and at least one digit or a punctuation character.')) + self._errors['new_password'] = [_('The password must contain at least one letter and at least one digit or a punctuation character.')] + + return ValueError return password def clean_password2(self): - password = self.cleaned_data.get("password") + password = self.cleaned_data.get("new_password") password2 = self.cleaned_data.get("password2") if self.is_edit and len(password) == 0: return password2 if password and password2 and password != password2: - raise forms.ValidationError(_('The confirmation password is incorrect.')) + self._errors['password2'] = [_('The confirmation password is incorrect.')] + + return ValueError return password2 class RegisterUserForm(Validation): - password = forms.CharField(label=_('Password'), widget = forms.PasswordInput) - password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput) + new_password = forms.CharField(label=_('Password'), widget = forms.PasswordInput(render_value=True)) + password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput(render_value=True)) is_edit = False def save(self, commit=True): super(RegisterUserForm, self).save(commit=False) - self.instance.set_password(self.cleaned_data['password']) + self.instance.set_password(self.cleaned_data['new_password']) self.instance.save() @@ -94,19 +103,19 @@ class UserForm(Validation): self.is_edit = is_update if self.is_edit: - del self.fields['password'] + del self.fields['new_password'] del self.fields['password2'] if not is_edit: - password = forms.CharField(label=_('Password'), widget = forms.PasswordInput, required = False) - password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput, required = False) + new_password = forms.CharField(label=_('Password'), widget = forms.PasswordInput(render_value=True), required = False) + password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput(render_value=True), required = False) def save(self, commit=True): super(UserForm, self).save(commit=False) if not self.is_edit: - self.instance.set_password(self.cleaned_data['password']) + self.instance.set_password(self.cleaned_data['new_password']) self.instance.save() @@ -117,4 +126,46 @@ class UserForm(Validation): fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image', 'is_staff', 'is_active'] widgets = { 'description': forms.Textarea, - } \ No newline at end of file + } + +class ChangePassForm(Validation): + def __init__(self, *args, **kwargs): + self.user = kwargs.pop('user', None) + self.request = kwargs.pop('request', None) + super(ChangePassForm, self).__init__(*args, **kwargs) + + is_edit = False + + new_password = forms.CharField(label=_('New Password'), widget = forms.PasswordInput(render_value=True), required = True) + password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput(render_value=True), required = True) + + def clean_password(self): + password = self.cleaned_data.get('password', None) + + if not self.user.check_password(password): + self._errors['password'] = [_('The value inputed does not match with your actual password.')] + + return ValueError + + return password + + def save(self, commit=True): + super(ChangePassForm, self).save(commit=False) + + self.instance.set_password(self.cleaned_data['new_password']) + + update_session_auth_hash(self.request, self.instance) + + self.instance.save() + + return self.instance + + class Meta: + model = User + fields = ['password'] + labels = { + 'password': _('Actual Password') + } + widgets = { + 'password': forms.PasswordInput + } \ No newline at end of file diff --git a/users/templates/users/_form.html b/users/templates/users/_form.html index 6b1aad4..41865e8 100644 --- a/users/templates/users/_form.html +++ b/users/templates/users/_form.html @@ -7,7 +7,7 @@{{ message }}
-{{ message }}
-{{ message }}
-