Ejemplo n.º 1
0
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', )
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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', )
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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']