# -*- coding: utf-8 -*- import logging from django import forms from django.contrib.auth import forms as auth_forms, password_validation from django.utils.translation import gettext, gettext_lazy as _ logger = logging.getLogger(__name__) class LoginForm(auth_forms.AuthenticationForm): username = auth_forms.UsernameField( label=_('E-Mail-Adresse'), widget=forms.TextInput(attrs={'autofocus': True}), ) error_messages = { 'invalid_login': _('Benutzername oder Passwort falsch.'), 'inactive': _('This account is inactive.'), } def clean_username(self): username = self.cleaned_data.get('username') return username.lower() class SetPasswordForm(forms.Form): new_password = forms.CharField(label=_('Neues Passwort'), widget=forms.PasswordInput) new_password_repeat = forms.CharField(label=_('Neues Passwort wiederholen'), widget=forms.PasswordInput) send_password_mail = forms.BooleanField(required=False, initial=False, label=_('Neues Passwort per E-Mail zusenden'), ) def __init__(self, user, *args, **kwargs): self.user = user super().__init__(*args, **kwargs) def clean_new_password(self): password = self.cleaned_data.get('new_password') password_validation.validate_password(password, self.user) return password def clean_new_password_repeat(self): password1 = self.cleaned_data.get('new_password') password2 = self.cleaned_data.get('new_password_repeat') if password1 and password2: if password1 != password2: raise forms.ValidationError( gettext('Passwörter stimmen nicht überein'), code='password_mismatch', ) return password2 def save(self, commit=True): new_password = self.cleaned_data.get('new_password') self.user.set_password(new_password) if commit: self.user.save() return self.user class CreateAndSendPasswordForm(forms.Form): username = auth_forms.UsernameField( label=_('E-Mail-Adresse'), widget=forms.TextInput(attrs={'autofocus': True}), ) def clean_username(self): username = self.cleaned_data.get('username') return username.lower()