summaryrefslogtreecommitdiffstats
path: root/accounts/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/forms.py')
-rw-r--r--accounts/forms.py179
1 files changed, 125 insertions, 54 deletions
diff --git a/accounts/forms.py b/accounts/forms.py
index b59ab64..01713ad 100644
--- a/accounts/forms.py
+++ b/accounts/forms.py
@@ -3,27 +3,50 @@ import re
from flask import url_for
from flask_wtf import FlaskForm as Form
from flask_login import current_user
-from wtforms import StringField, PasswordField, ValidationError, \
- BooleanField, validators
+from wtforms import (
+ StringField,
+ PasswordField,
+ ValidationError,
+ BooleanField,
+ validators,
+)
from wtforms.form import FormMeta
from markupsafe import Markup
from .utils import NotRegexp
from accounts.app import accounts_app
-USERNAME_RE = re.compile(r'^[a-zA-Z][a-zA-Z0-9-]{1,15}$')
-USERNAME_EXCLUDE_RE = re.compile(r'^(admin|root)')
+USERNAME_RE = re.compile(r"^[a-zA-Z][a-zA-Z0-9-]{1,15}$")
+USERNAME_EXCLUDE_RE = re.compile(r"^(admin|root)")
class RegisterForm(Form):
- username = StringField('Benutzername', [
- validators.Regexp(USERNAME_RE, message='Benutzername darf nur aus a-z, '
- 'Zahlen und - bestehen (2-16 Zeichen, am Anfang nur a-z).'),
- NotRegexp(USERNAME_EXCLUDE_RE, message='Dieser Benutzername ist nicht erlaubt.'),
- ])
- mail = StringField('E-Mail-Adresse', [validators.Email(), validators.Length(min=6, max=50)])
- question = StringField('Hauptstadt von Deutschland?', [validators.AnyOf(
- ('Berlin', 'berlin'), message='Bitte beantworte die Frage.')])
+ username = StringField(
+ "Benutzername",
+ [
+ validators.Regexp(
+ USERNAME_RE,
+ message="Benutzername darf nur aus a-z, "
+ "Zahlen und - bestehen (2-16 Zeichen, am Anfang nur a-z).",
+ ),
+ NotRegexp(
+ USERNAME_EXCLUDE_RE,
+ message="Dieser Benutzername ist nicht erlaubt.",
+ ),
+ ],
+ )
+ mail = StringField(
+ "E-Mail-Adresse",
+ [validators.Email(), validators.Length(min=6, max=50)],
+ )
+ question = StringField(
+ "Hauptstadt von Deutschland?",
+ [
+ validators.AnyOf(
+ ("Berlin", "berlin"), message="Bitte beantworte die Frage."
+ )
+ ],
+ )
def validate_username(self, field):
try:
@@ -31,12 +54,15 @@ class RegisterForm(Form):
except accounts_app.user_backend.NoSuchUserError:
if accounts_app.username_blacklist:
if field.data.lower() in accounts_app.username_blacklist:
- raise ValidationError(Markup(
- 'Dieser Benutzername ist momentan nicht erlaubt. '
- '<a href="%s">Weitere Informationen</a>'
- % url_for('default.about')))
+ raise ValidationError(
+ Markup(
+ "Dieser Benutzername ist momentan nicht erlaubt. "
+ '<a href="%s">Weitere Informationen</a>'
+ % url_for("default.about")
+ )
+ )
else:
- raise ValidationError('Dieser Benutzername ist schon vergeben.')
+ raise ValidationError("Dieser Benutzername ist schon vergeben.")
def validate_mail(self, field):
try:
@@ -44,11 +70,14 @@ class RegisterForm(Form):
except accounts_app.user_backend.NoSuchUserError:
pass
else:
- raise ValidationError(Markup(
- 'Ein Benutzername mit dieser Adresse existiert bereits. '
- 'Falls du deinen Benutzernamen vergessen hast, kannst du '
- 'die <a href="%s">Passwort-vergessen-Funktion</a> benutzen.'
- % url_for('default.lost_password')))
+ raise ValidationError(
+ Markup(
+ "Ein Benutzername mit dieser Adresse existiert bereits. "
+ "Falls du deinen Benutzernamen vergessen hast, kannst du "
+ 'die <a href="%s">Passwort-vergessen-Funktion</a> benutzen.'
+ % url_for("default.lost_password")
+ )
+ )
class AdminCreateAccountForm(RegisterForm):
@@ -58,89 +87,131 @@ class AdminCreateAccountForm(RegisterForm):
except accounts_app.user_backend.NoSuchUserError:
return
else:
- raise ValidationError('Dieser Benutzername ist schon vergeben')
+ raise ValidationError("Dieser Benutzername ist schon vergeben")
question = None
class RegisterCompleteForm(Form):
- password = PasswordField('Passwort', [validators.DataRequired(),
- validators.EqualTo('password_confirm', message='Passwörter stimmen nicht überein')])
- password_confirm = PasswordField('Passwort bestätigen')
+ password = PasswordField(
+ "Passwort",
+ [
+ validators.DataRequired(),
+ validators.EqualTo(
+ "password_confirm", message="Passwörter stimmen nicht überein"
+ ),
+ ],
+ )
+ password_confirm = PasswordField("Passwort bestätigen")
# n.b. this form is also used in lost_password_complete
class LostPasswordForm(Form):
- username_or_mail = StringField('Benutzername oder E-Mail')
+ username_or_mail = StringField("Benutzername oder E-Mail")
user = None
def validate_username_or_mail(self, field):
- if '@' not in field.data:
+ if "@" not in field.data:
try:
self.user = accounts_app.user_backend.get_by_uid(field.data)
except accounts_app.user_backend.NoSuchUserError:
- raise ValidationError('Es gibt keinen Benutzer mit diesem Namen.')
+ raise ValidationError(
+ "Es gibt keinen Benutzer mit diesem Namen."
+ )
else:
try:
self.user = accounts_app.user_backend.get_by_mail(field.data)
except accounts_app.user_backend.NoSuchUserError:
- raise ValidationError('Es gibt keinen Benutzer mit dieser Adresse.')
+ raise ValidationError(
+ "Es gibt keinen Benutzer mit dieser Adresse."
+ )
class SettingsMeta(FormMeta):
def __call__(cls, *args, **kwargs):
for service in accounts_app.all_services:
- setattr(cls, 'password_%s' % service.id, PasswordField(
- 'Passwort für %s' % service.name, [
- validators.Optional(),
- validators.EqualTo(
- 'password_confirm_%s' % service.id,
- message='Passwörter stimmen nicht überein'),
- ]))
- setattr(cls, 'password_confirm_%s' % service.id, PasswordField(
- 'Passwort für %s (Bestätigung)' % service.name))
- setattr(cls, 'delete_%s' % service.id, BooleanField(
- 'Passwort für %s löschen' % service.name))
+ setattr(
+ cls,
+ "password_%s" % service.id,
+ PasswordField(
+ "Passwort für %s" % service.name,
+ [
+ validators.Optional(),
+ validators.EqualTo(
+ "password_confirm_%s" % service.id,
+ message="Passwörter stimmen nicht überein",
+ ),
+ ],
+ ),
+ )
+ setattr(
+ cls,
+ "password_confirm_%s" % service.id,
+ PasswordField("Passwort für %s (Bestätigung)" % service.name),
+ )
+ setattr(
+ cls,
+ "delete_%s" % service.id,
+ BooleanField("Passwort für %s löschen" % service.name),
+ )
return super(SettingsMeta, cls).__call__(*args, **kwargs)
class SettingsForm(Form, metaclass=SettingsMeta):
- old_password = PasswordField('Altes Passwort')
- password = PasswordField('Neues Passwort', [validators.Optional(),
- validators.EqualTo('password_confirm', message='Passwörter stimmen nicht überein')])
- password_confirm = PasswordField('Passwort bestätigen')
- mail = StringField('E-Mail-Adresse', [validators.Optional(), validators.Email(), validators.Length(min=6, max=50)])
+ old_password = PasswordField("Altes Passwort")
+ password = PasswordField(
+ "Neues Passwort",
+ [
+ validators.Optional(),
+ validators.EqualTo(
+ "password_confirm", message="Passwörter stimmen nicht überein"
+ ),
+ ],
+ )
+ password_confirm = PasswordField("Passwort bestätigen")
+ mail = StringField(
+ "E-Mail-Adresse",
+ [
+ validators.Optional(),
+ validators.Email(),
+ validators.Length(min=6, max=50),
+ ],
+ )
def validate_old_password(self, field):
if self.password.data:
if not field.data:
- raise ValidationError('Gib bitte dein altes Passwort ein, um ein neues zu setzen.')
+ raise ValidationError(
+ "Gib bitte dein altes Passwort ein, um ein neues zu setzen."
+ )
if field.data != current_user.password:
- raise ValidationError('Altes Passwort ist falsch.')
+ raise ValidationError("Altes Passwort ist falsch.")
def validate_mail(self, field):
results = accounts_app.user_backend.find_by_mail(field.data)
for user in results:
if user.uid != current_user.uid:
- raise ValidationError('Diese E-Mail-Adresse wird schon von einem anderen Account benutzt!')
+ raise ValidationError(
+ "Diese E-Mail-Adresse wird schon von einem anderen Account benutzt!"
+ )
def get_servicepassword(self, service_id: str):
- return getattr(self, 'password_%s' % service_id)
+ return getattr(self, "password_%s" % service_id)
def get_servicepasswordconfirm(self, service_id: str):
- return getattr(self, 'password_confirm_%s' % service_id)
+ return getattr(self, "password_confirm_%s" % service_id)
def get_servicedelete(self, service_id: str):
- return getattr(self, 'delete_%s' % service_id)
+ return getattr(self, "delete_%s" % service_id)
class AdminDisableAccountForm(Form):
- username = StringField('Benutzername')
+ username = StringField("Benutzername")
user = None
def validate_username(self, field):
try:
self.user = accounts_app.user_backend.get_by_uid(field.data)
except accounts_app.user_backend.NoSuchUserError:
- raise ValidationError('Dieser Benutzername existiert nicht')
+ raise ValidationError("Dieser Benutzername existiert nicht")