diff options
author | Marian Sigler <m@qjym.de> | 2012-10-05 22:09:57 +0200 |
---|---|---|
committer | Marian Sigler <m@qjym.de> | 2012-10-05 22:09:57 +0200 |
commit | f977b8ee3e46b3b3ead86d08b3ef6298a4b430b9 (patch) | |
tree | 00321051a25baa65c84a1589d06a46935818a5e4 | |
parent | 457066ad1bc58ef70b1e224616c8ba9955d2acf4 (diff) | |
download | web-f977b8ee3e46b3b3ead86d08b3ef6298a4b430b9.tar.gz web-f977b8ee3e46b3b3ead86d08b3ef6298a4b430b9.tar.bz2 web-f977b8ee3e46b3b3ead86d08b3ef6298a4b430b9.zip |
Disallow usernames starting with admin or root. Allow digits.
-rw-r--r-- | forms.py | 10 | ||||
-rw-r--r-- | templates/about.html | 2 | ||||
-rw-r--r-- | templates/register.html | 8 | ||||
-rw-r--r-- | utils.py | 17 |
4 files changed, 28 insertions, 9 deletions
@@ -4,7 +4,7 @@ from flask import g, current_app, session, url_for, Markup from flask.ext.wtf import Form, validators, TextField, PasswordField,\ ValidationError, BooleanField from functools import partial -from utils import _username_re, decrypt_password +from utils import _username_re, _username_exclude_re, decrypt_password, NotRegexp username = partial(TextField, 'Benutzername', [validators.Regexp(_username_re, @@ -12,7 +12,11 @@ username = partial(TextField, 'Benutzername', [validators.Regexp(_username_re, class RegisterForm(Form): - username = username() + 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.'), + ]) mail = TextField('E-Mail-Adresse', [validators.Email(), validators.Length(min=6, max=50)]) def validate_username(form, field): @@ -49,7 +53,7 @@ class RegisterCompleteForm(Form): class LoginForm(Form): - username = username() + username = TextField(u'Benutzername') password = PasswordField('Passwort', [validators.Required()]) diff --git a/templates/about.html b/templates/about.html index 03d56e4..3056e97 100644 --- a/templates/about.html +++ b/templates/about.html @@ -1,6 +1,6 @@ {%- extends 'base.html' %} {%- from '_macros.html' import render_field %} -{%- set title = 'Über spline account' %} +{%- set title = 'Über spline accounts' %} {%- block content %} <h2>Was ist ein Spline-Account?</h2> <p> diff --git a/templates/register.html b/templates/register.html index c5cad1b..e724e2f 100644 --- a/templates/register.html +++ b/templates/register.html @@ -6,12 +6,12 @@ <p>Hier kannst du dir einen Spline-Account erstellen.</p> <p> Da der Benutzername von möglichst vielen Diensten verarbeitet werden - können soll, sind nur normale Buchstaben (keine Umlaute) und Unterstriche - erlaubt. + können soll, sind nur normale Buchstaben (keine Umlaute), Zahlen und + Bindestriche erlaubt (beim ersten Zeichen nur Buchstaben). </p> <p> - Bitte such dir deinen Benutzernamen gut aus. Er kann später nicht mehr geändert - werden. + Bitte such dir deinen Benutzernamen gut aus. Er kann später nicht mehr + geändert werden. </p> <form action="{{ url_for('register') }}" method="post" class="form-horizontal"> {{ render_field(form.username, autofocus="autofocus") }} @@ -10,14 +10,17 @@ from Crypto.Cipher import AES from email.mime.text import MIMEText from functools import wraps from flask import current_app, flash, g, redirect, render_template, request, session, url_for +from flask.ext.wtf import ValidationError from hashlib import sha1 from random import randint from time import time from werkzeug.exceptions import Forbidden +from wtforms.validators import Regexp -_username_re = re.compile(r'^[-a-zA-Z]{2,16}') +_username_re = re.compile(r'^[a-zA-Z][a-zA-Z0-9-]{1,15}') +_username_exclude_re = re.compile(r'^(admin|root)') # using http://flask.pocoo.org/docs/patterns/viewdecorators/ def templated(template=None): @@ -212,3 +215,15 @@ def send_register_confirmation_mail(username, mail): send_mail(mail, u'E-Mail-Adresse bestätigen', body, sender=current_app.config.get('MAIL_CONFIRM_SENDER')) + + +class NotRegexp(Regexp): + """ + Like wtforms.validators.Regexp, but rejects data that DOES match the regex. + """ + def __call__(self, form, field): + if self.regex.match(field.data or u''): + if self.message is None: + self.message = field.gettext(u'Invalid input.') + + raise ValidationError(self.message) |