diff options
Diffstat (limited to 'accounts')
-rw-r--r-- | accounts/default_settings.py | 2 | ||||
-rw-r--r-- | accounts/forms.py | 63 | ||||
-rw-r--r-- | accounts/models.py | 10 | ||||
-rw-r--r-- | accounts/utils/__init__.py | 7 | ||||
-rw-r--r-- | accounts/utils/console.py | 3 | ||||
-rw-r--r-- | accounts/utils/sessions.py | 6 | ||||
-rw-r--r-- | accounts/views/default/__init__.py | 10 |
7 files changed, 48 insertions, 53 deletions
diff --git a/accounts/default_settings.py b/accounts/default_settings.py index dacc8b5..fde85a6 100644 --- a/accounts/default_settings.py +++ b/accounts/default_settings.py @@ -17,7 +17,7 @@ SENDMAIL_COMMAND = '/usr/sbin/sendmail' PERMANENT_SESSION_LIFETIME = timedelta(seconds=600) # 10 minutes LDAP_HOST = 'ldap://localhost:5678' -LDAP_BASE_DN = [('dc','accounts'),('dc','spline'),('dc','inf'),('dc','fu-berlin'),('dc','de')] +LDAP_BASE_DN = [('dc', 'accounts'), ('dc', 'spline'), ('dc', 'inf'), ('dc', 'fu-berlin'), ('dc', 'de')] LDAP_ADMIN_USER = 'admin' LDAP_ADMIN_PASS = 'admin' diff --git a/accounts/forms.py b/accounts/forms.py index c414e57..b404d73 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import re -from flask import g, current_app, session, Markup, url_for +from flask import current_app, Markup, url_for from flask.ext.wtf import Form from flask.ext.login import current_user from wtforms import TextField, PasswordField, ValidationError, BooleanField,\ @@ -9,45 +9,47 @@ from wtforms.form import FormMeta from utils import NotRegexp -_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 = TextField('Benutzername', [ - validators.Regexp(_username_re, message=u'Benutzername darf nur aus ' - u'a-z, Zahlen und - bestehen (2-16 Zeichen, am Anfang nur a-z).'), - NotRegexp(_username_exclude_re, message=u'Dieser Benutzername ist nicht erlaubt.'), + validators.Regexp(USERNAME_RE, message=u'Benutzername darf nur aus a-z, ' + u'Zahlen und - bestehen (2-16 Zeichen, am Anfang nur a-z).'), + NotRegexp(USERNAME_EXCLUDE_RE, message=u'Dieser Benutzername ist nicht erlaubt.'), ]) mail = TextField('E-Mail-Adresse', [validators.Email(), validators.Length(min=6, max=50)]) - question = TextField('Hauptstadt von Deutschland?', [validators.AnyOf(('Berlin', 'berlin'), - message=u'Bitte beantworte die Frage.')]) + question = TextField('Hauptstadt von Deutschland?', [validators.AnyOf( + ('Berlin', 'berlin'), message=u'Bitte beantworte die Frage.')]) - def validate_username(form, field): + def validate_username(self, field): try: current_app.user_backend.get_by_uid(field.data) except current_app.user_backend.NoSuchUserError: - if current_app.username_blacklist: + if current_app.username_blacklist if field.data.lower() in current_app.username_blacklist: - - raise ValidationError(Markup(u'Dieser Benutzername ist momentan nicht erlaubt. ' - u'<a href="%s">Weitere Informationen</a>' % url_for('default.about'))) + raise ValidationError(Markup( + u'Dieser Benutzername ist momentan nicht erlaubt. ' + u'<a href="%s">Weitere Informationen</a>' + % url_for('default.about'))) else: raise ValidationError(u'Dieser Benutzername ist schon vergeben.') - def validate_mail(form, field): + def validate_mail(self, field): try: current_app.user_backend.get_by_mail(field.data) except current_app.user_backend.NoSuchUserError: pass else: - raise ValidationError(Markup(u'Ein Benutzername mit dieser Adresse existiert bereits. ' - u'Falls du deinen Benutzernamen vergessen hast, kannst du die ' - u'<a href="%s">Passwort-vergessen-Funktion</a> benutzen.' - % url_for('default.lost_password'))) + raise ValidationError(Markup( + u'Ein Benutzername mit dieser Adresse existiert bereits. ' + u'Falls du deinen Benutzernamen vergessen hast, kannst du ' + u'die <a href="%s">Passwort-vergessen-Funktion</a> benutzen.' + % url_for('default.lost_password'))) class AdminCreateAccountForm(RegisterForm): - def validate_username(form, field): + def validate_username(self, field): try: current_app.user_backend.get_by_uid(field.data) except current_app.user_backend.NoSuchUserError: @@ -67,17 +69,18 @@ class RegisterCompleteForm(Form): class LostPasswordForm(Form): username_or_mail = TextField(u'Benutzername oder E-Mail') + user = None - def validate_username_or_mail(form, field): + def validate_username_or_mail(self, field): if '@' not in field.data: try: - form.user = current_app.user_backend.get_by_uid(field.data) - except NoSuchUserError: + self.user = current_app.user_backend.get_by_uid(field.data) + except current_app.user_backend.NoSuchUserError: raise ValidationError(u'Es gibt keinen Benutzer mit diesem Namen.') else: try: - form.user = current_app.user_backend.get_by_mail(field.data) - except NoSuchUserError: + self.user = current_app.user_backend.get_by_mail(field.data) + except current_app.user_backend.NoSuchUserError: raise ValidationError(u'Es gibt keinen Benutzer mit dieser Adresse.') @@ -98,6 +101,7 @@ class SettingsMeta(FormMeta): return super(SettingsMeta, cls).__call__(*args, **kwargs) + class SettingsForm(Form): __metaclass__ = SettingsMeta @@ -107,14 +111,14 @@ class SettingsForm(Form): password_confirm = PasswordField(u'Passwort bestätigen') mail = TextField('E-Mail-Adresse', [validators.Optional(), validators.Email(), validators.Length(min=6, max=50)]) - def validate_old_password(form, field): - if form.password.data: + def validate_old_password(self, field): + if self.password.data: if not field.data: raise ValidationError(u'Gib bitte dein altes Passwort ein, um ein neues zu setzen.') if field.data != current_user.password: raise ValidationError(u'Altes Passwort ist falsch.') - def validate_mail(form, field): + def validate_mail(self, field): results = current_app.user_backend.find_by_mail(field.data) for user in results: if user.uid != current_user.uid: @@ -132,9 +136,10 @@ class SettingsForm(Form): class AdminDisableAccountForm(Form): username = TextField(u'Benutzername') + user = None - def validate_username(form, field): + def validate_username(self, field): try: - form.user = current_app.user_backend.get_by_uid(field.data) + self.user = current_app.user_backend.get_by_uid(field.data) except current_app.user_backend.NoSuchUserError: raise ValidationError(u'Dieser Benutzername existiert nicht') diff --git a/accounts/models.py b/accounts/models.py index 0c7ffdb..0fdc1f7 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -12,9 +12,9 @@ class Account(UserMixin): """ _ready = False - def __init__(self, uid, mail, services=[], dn=None, password=None): + def __init__(self, uid, mail, services=None, dn=None, password=None): self.uid = uid.encode('utf8') if isinstance(uid, unicode) else uid - self.services = services + self.services = list() if services is None else services self.dn = dn self.password = password.encode('utf8') if isinstance(password, unicode) else password self.new_password_root = None @@ -28,7 +28,7 @@ class Account(UserMixin): return "<Account uid=%s>" % self.uid def reset_password(self, service): - self.new_password_services[service] = (None, None) + self.new_password_services[service] = (None, None) def change_password(self, new_password, old_password='', service=None): """ @@ -83,8 +83,8 @@ class Account(UserMixin): class Service(object): - def __init__(self, id, name, url): - self.id = id + def __init__(self, service_id, name, url): + self.id = service_id self.name = name self.url = url self.changed = None # used by settings view diff --git a/accounts/utils/__init__.py b/accounts/utils/__init__.py index 0759fd1..7e658d0 100644 --- a/accounts/utils/__init__.py +++ b/accounts/utils/__init__.py @@ -1,14 +1,9 @@ # -*- coding: utf-8 -*- import importlib from functools import wraps -from flask import current_app, flash, g, redirect, render_template, \ - request, session, url_for -from flask.ext.login import current_user -from werkzeug.exceptions import Forbidden +from flask import render_template, request from wtforms.validators import Regexp, ValidationError -from .confirmation import Confirmation - # using http://flask.pocoo.org/docs/patterns/viewdecorators/ def templated(template=None): diff --git a/accounts/utils/console.py b/accounts/utils/console.py index fb55030..170286c 100644 --- a/accounts/utils/console.py +++ b/accounts/utils/console.py @@ -50,9 +50,6 @@ class TablePrinter(object): def _update_format_string(self): - def _column_format(width): - return '%%-%ds' % width - sep = ' %s ' % self.separator self.format_string = '%s %s %s' % ( self.separator, diff --git a/accounts/utils/sessions.py b/accounts/utils/sessions.py index dd4e4bb..8dc8cf3 100644 --- a/accounts/utils/sessions.py +++ b/accounts/utils/sessions.py @@ -61,9 +61,7 @@ class EncryptedSessionInterface(SecureCookieSessionInterface): session = self.session_class() if session is not None: - if app.config.get('PERMANENT_SESSION_LIFETIME') is not None: - session.permanent = True - else: - session.permanent = False + session.permanent = \ + app.config.get('PERMANENT_SESSION_LIFETIME') is not None return session diff --git a/accounts/views/default/__init__.py b/accounts/views/default/__init__.py index a3e6c0e..68938c1 100644 --- a/accounts/views/default/__init__.py +++ b/accounts/views/default/__init__.py @@ -3,12 +3,14 @@ from __future__ import absolute_import from copy import deepcopy from flask import Blueprint -from flask import current_app, redirect, request, g, flash, url_for +from flask import current_app, redirect, render_template, request, g, \ + flash, url_for from flask.ext.login import login_required, login_user, logout_user, current_user +from werkzeug.exceptions import Forbidden from accounts.forms import RegisterForm, RegisterCompleteForm, \ LostPasswordForm, SettingsForm -from accounts.utils import * +from accounts.utils import templated from accounts.utils.confirmation import Confirmation from accounts.utils.login import logout_required from accounts.models import Account @@ -53,8 +55,6 @@ def register_complete(token): form = RegisterCompleteForm() if form.validate_on_submit(): - password = form.password.data - user = Account(username, mail, password=form.password.data) current_app.user_backend.register(user) login_user(user) @@ -128,7 +128,7 @@ def index(): if request.form.get('submit_services'): for service in current_app.all_services: field = form.get_servicedelete(service.id) - if(field.data): + if field.data: current_user.reset_password(service.id) changed = True |