from django.contrib.auth.password_validation import validate_password from django.contrib.auth.forms import UserCreationForm from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from django.contrib import messages from django import forms from .models import NelUser class RegistrationForm(UserCreationForm): class Meta: model = NelUser fields = (NelUser.EMAIL_FIELD,) class ChangePasswordForm(forms.Form): current_password = forms.CharField(label=_('current_password'), widget=forms.PasswordInput) new_password = forms.CharField(label=_('new_password'), widget=forms.PasswordInput) new_password_confirm = forms.CharField(label=_('new_password_confirm'), widget=forms.PasswordInput) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request') return super().__init__(*args, **kwargs) def clean(self): cleaned_data = super().clean() old_pass = cleaned_data.get('current_password') new_pass = cleaned_data.get('new_password') new_pass_confirm = cleaned_data.get('new_password_confirm') user = self.request.user if new_pass != new_pass_confirm: raise forms.ValidationError(_('The new password does not match its confirmation.')) try: validate_password(new_pass, user=user) except ValidationError as error: raise forms.ValidationError(error) if not user.check_password(old_pass): raise forms.ValidationError(_('The current password is incorrect.')) class DeleteAccountForm(forms.Form): current_password = forms.CharField(label=_('current_password'), widget=forms.PasswordInput) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request') return super().__init__(*args, **kwargs) def clean(self): cleaned_data = super().clean() password = cleaned_data.get('current_password') user = self.request.user if not user.check_password(password): raise forms.ValidationError(_('The current password is incorrect.'))