summaryrefslogtreecommitdiffstats
path: root/accounts/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/forms.py')
-rw-r--r--accounts/forms.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/accounts/forms.py b/accounts/forms.py
index bdef0ed..bbae07f 100644
--- a/accounts/forms.py
+++ b/accounts/forms.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-from account import SERVICES
from flask import g, current_app, session, Markup
from flask.ext.wtf import Form
from flask.ext.login import current_user
from wtforms import TextField, PasswordField, ValidationError, BooleanField,\
validators
+from wtforms.form import FormMeta
from functools import partial
from utils import _username_re, _username_exclude_re, NotRegexp, url_for
@@ -81,9 +81,26 @@ class LostPasswordForm(Form):
raise ValidationError(u'Es gibt keinen Benutzer mit dieser Adresse.')
+class SettingsMeta(FormMeta):
+ def __call__(cls, *args, **kwargs):
+ for service in current_app.all_services:
+ setattr(cls, 'password_%s' % service.id, PasswordField(
+ u'Passwort für %s' % service.name, [
+ validators.Optional(),
+ validators.EqualTo(
+ 'password_confirm_%s' % service.id,
+ message=u'Passwörter stimmen nicht überein'),
+ ]))
+ setattr(cls, 'password_confirm_%s' % service.id, PasswordField(
+ u'Passwort für %s (Bestätigung)' % service.name))
+ setattr(cls, 'delete_%s' % service.id, BooleanField(
+ u'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=u'Passwörter stimmen nicht überein')])
@@ -105,8 +122,10 @@ class SettingsForm(Form):
def get_servicepassword(self, service_id):
return getattr(self, 'password_%s' % service_id)
+
def get_servicepasswordconfirm(self, service_id):
return getattr(self, 'password_confirm_%s' % service_id)
+
def get_servicedelete(self, service_id):
return getattr(self, 'delete_%s' % service_id)
@@ -119,16 +138,3 @@ class AdminDisableAccountForm(Form):
form.user = current_app.user_backend.get_by_uid(field.data)
except current_app.user_backend.NoSuchUserError:
raise ValidationError(u'Dieser Benutzername existiert nicht')
-
-
-#TODO: find out how we can use app.all_services in that early state
-for service in SERVICES:
- setattr(SettingsForm, 'password_%s' % service.id,
- PasswordField(u'Passwort für %s' % service.name, [
- validators.Optional(),
- validators.EqualTo('password_confirm_%s' % service.id, message=u'Passwörter stimmen nicht überein'),
- ]))
- setattr(SettingsForm, 'password_confirm_%s' % service.id,
- PasswordField(u'Passwort für %s (Bestätigung)' % service.name))
- setattr(SettingsForm, 'delete_%s' % service.id,
- BooleanField(u'Passwort für %s löschen' % service.name))