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: msg = _("The new password does not match its confirmation.") raise forms.ValidationError(msg) try: validate_password(new_pass, user=user) except ValidationError as error: raise forms.ValidationError(error) if not user.check_password(old_pass): msg = _("The current password is incorrect.") raise forms.ValidationError(msg) 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): msg = _("The current password is incorrect.") raise forms.ValidationError(msg)