class LoginInfoForm(forms.ModelForm): error_messages = { 'pw_current_wrong': _("The current password you entered was not correct."), } old_password = forms.CharField(widget=forms.PasswordInput, label=_('Password (current)'), required=True) password = PasswordField( label=_('New password'), required=False, ) password_repeat = PasswordConfirmationField( label=phrases.base.password_repeat, required=False, confirm_with='password', ) def clean_old_password(self): old_pw = self.cleaned_data.get('old_password') if not check_password(old_pw, self.user.password): raise forms.ValidationError( self.error_messages['pw_current_wrong'], code='pw_current_wrong', ) return old_pw def clean_email(self): email = self.cleaned_data.get('email') if User.objects.exclude(pk=self.user.pk).filter(email__iexact=email): raise ValidationError( _('Please choose a different email address.')) return email def clean(self): super().clean() password = self.cleaned_data.get('password') if password and not password == self.cleaned_data.get( 'password_repeat'): raise ValidationError(phrases.base.passwords_differ) def __init__(self, user, *args, **kwargs): self.user = user kwargs['instance'] = user super().__init__(*args, **kwargs) def save(self): super().save() password = self.cleaned_data.get('password') if password: self.user.set_password(password) self.user.save() class Meta: model = User fields = ('email', )
class RecoverForm(forms.Form): password = PasswordField( label=_('New password'), required=False, ) password_repeat = PasswordConfirmationField( label=phrases.base.password_repeat, required=False, confirm_with='password', ) def clean(self): data = super().clean() if data.get('password') != data.get('password_repeat'): raise ValidationError(phrases.base.passwords_differ) return data
class LoginInfoForm(forms.ModelForm): error_messages = { 'pw_current_wrong': _("The current password you entered was not correct."), } old_password = forms.CharField(widget=forms.PasswordInput, label=_('Password (current)'), required=True) password = PasswordField( label=_('New password'), required=False, ) password_repeat = PasswordConfirmationField( label=_('New password (again)'), required=False, confirm_with='password', ) def clean_old_password(self): old_pw = self.cleaned_data.get('old_password') if not check_password(old_pw, self.user.password): raise forms.ValidationError( self.error_messages['pw_current_wrong'], code='pw_current_wrong', ) return old_pw def __init__(self, user, *args, **kwargs): self.user = user kwargs['instance'] = user super().__init__(*args, **kwargs) def save(self): password = self.cleaned_data.get('password') if not password == self.cleaned_data.get('password_repeat'): raise ValidationError( _('You entered two different passwords. Please input the same one twice!' )) super().save() if password: self.user.set_password(password) self.user.save() class Meta: model = User fields = ('email', )
class RecoverForm(forms.Form): password = PasswordField( label=_("New password"), required=False, ) password_repeat = PasswordConfirmationField( label=phrases.base.password_repeat, required=False, confirm_with="password", ) def clean(self): data = super().clean() if data.get("password") != data.get("password_repeat"): self.add_error("password_repeat", ValidationError(phrases.base.passwords_differ)) return data
class RecoverForm(forms.Form): password = PasswordField( label=_('New password'), required=False, ) password_repeat = PasswordConfirmationField( label=_('New password (again)'), required=False, confirm_with='password', ) def clean(self): data = super().clean() if data.get('password') != data.get('password_repeat'): raise ValidationError(_('You entered two different passwords. Please input the same one twice!')) return data
class UserForm(CfPFormMixin, forms.Form): login_email = forms.EmailField(max_length=60, label=phrases.base.enter_email, required=False) login_password = forms.CharField(widget=forms.PasswordInput, label=_("Password"), required=False) register_name = forms.CharField(label=_("Name"), required=False) register_email = forms.EmailField(label=_("Email address"), required=False) register_password = PasswordField(label=_("Password"), required=False) register_password_repeat = PasswordConfirmationField( label=_("Password (again)"), required=False, confirm_with="register_password") def __init__(self, *args, **kwargs): kwargs.pop("event", None) super().__init__(*args, **kwargs) self.fields["register_email"].widget.attrs = { "placeholder": _("Email address") } def _clean_login(self, data): try: uname = User.objects.get( email__iexact=data.get("login_email")).email except User.DoesNotExist: # We do this to avoid timing attacks uname = "user@invalid" user = authenticate(username=uname, password=data.get("login_password")) if user is None: raise ValidationError( _("No user account matches the entered credentials. " "Are you sure that you typed your password correctly?")) if not user.is_active: raise ValidationError( _("Sorry, your account is currently disabled.")) data["user_id"] = user.pk def _clean_register(self, data): if data.get("register_password") != data.get( "register_password_repeat"): self.add_error( "register_password_repeat", ValidationError(phrases.base.passwords_differ), ) if User.objects.filter( email__iexact=data.get("register_email")).exists(): self.add_error( "register_email", ValidationError( _("We already have a user with that email address. Did you already register " "before and just need to log in?")), ) def clean(self): data = super().clean() if data.get("login_email") and data.get("login_password"): self._clean_login(data) elif (data.get("register_email") and data.get("register_password") and data.get("register_name")): self._clean_register(data) else: raise ValidationError( _("Please fill all fields of either the login or the registration form." )) return data def save(self): data = self.cleaned_data if data.get("login_email") and data.get("login_password"): return data["user_id"] user = User.objects.create_user( name=data.get("register_name").strip(), email=data.get("register_email").lower().strip(), password=data.get("register_password"), locale=translation.get_language(), timezone=timezone.get_current_timezone_name(), ) data["user_id"] = user.pk return user.pk
class UserForm(forms.Form): login_username = forms.CharField(max_length=60, label=phrases.base.username_or_email, required=False) login_password = forms.CharField(widget=forms.PasswordInput, label=_('Password'), required=False) register_username = forms.CharField(max_length=60, label=_('Username'), required=False) register_email = forms.EmailField(label=_('Email address'), required=False) register_password = PasswordField( label=_('Password'), required=False, ) register_password_repeat = PasswordConfirmationField( label=_('Password (again)'), required=False, confirm_with='register_password', ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['register_email'].widget.attrs = { 'placeholder': _('Email address') } def _clean_login(self, data): if '@' in data.get('login_username'): try: uname = User.objects.get(email=data.get('login_username')).nick except User.DoesNotExist: uname = 'user@invalid' else: uname = data.get('login_username') user = authenticate(username=uname, password=data.get('login_password')) if user is None: raise ValidationError( _('No user account matches the entered credentials. ' 'Are you sure that you typed your password correctly?')) if not user.is_active: raise ValidationError( _('Sorry, your account is currently disabled.')) data['user_id'] = user.pk def _clean_register(self, data): if data.get('register_password') != data.get( 'register_password_repeat'): raise ValidationError(phrases.base.passwords_differ) if User.objects.filter(nick=data.get('register_username')).exists(): raise ValidationError( _('We already have a user with that username. Did you already register before ' 'and just need to log in?')) if User.objects.filter(email=data.get('register_email')).exists(): raise ValidationError( _('We already have a user with that email address. Did you already register ' 'before and just need to log in?')) def clean(self): data = super().clean() if data.get('login_username') and data.get('login_password'): self._clean_login(data) elif data.get('register_username') and data.get( 'register_email') and data.get('register_password'): self._clean_register(data) else: raise ValidationError( _('You need to fill all fields of either the login or the registration form.' )) return data def save(self): data = self.cleaned_data if data.get('register_username') and data.get( 'register_email') and data.get('register_password'): user = User.objects.create_user( nick=data.get('register_username'), email=data.get('register_email'), password=data.get('register_password'), locale=translation.get_language(), timezone=timezone.get_current_timezone_name()) data['user_id'] = user.pk return data['user_id']