diff options
-rw-r--r-- | app.py | 4 | ||||
-rw-r--r-- | forms.py | 27 | ||||
-rw-r--r-- | templates/index.html | 2 | ||||
-rw-r--r-- | templates/lost_password.html | 9 |
4 files changed, 28 insertions, 14 deletions
@@ -142,10 +142,10 @@ def lost_password(): if request.method == 'POST' and form.validate(): #TODO: make the link only usable once (e.g include a hash of the old pw) # atm the only thing we do is make the link valid for only little time - confirm_token = make_confirmation('lost_password', (form.username.data,)) + confirm_token = make_confirmation('lost_password', (form.user.uid,)) confirm_link = url_for('lost_password_complete', token=confirm_token, _external=True) - body = render_template('mail/lost_password.txt', username=form.username.data, + body = render_template('mail/lost_password.txt', username=form.user.uid, link=confirm_link) send_mail(form.user.mail, u'Passwort vergessen', body, @@ -45,13 +45,26 @@ class LoginForm(Form): class LostPasswordForm(Form): - username = username() + username_or_mail = TextField(u'Benutzername oder E-Mail') + + def validate_username_or_mail(form, field): + print 'validate %r %r' % (field, field.data) + if '@' not in field.data: + print 'validate username' + try: + form.user = g.ldap.get_by_uid(field.data) + print 'success, %r' % form.user + except NoSuchUserError: + raise ValidationError(u'Es gibt keinen Benutzer mit diesem Namen.') + else: + print 'validate mail' + try: + form.user = g.ldap.get_by_mail(field.data) + print 'success, %r' % form.user + except NoSuchUserError: + raise ValidationError(u'Es gibt keinen Benutzer mit dieser Adresse.') + - def validate_username(form, field): - try: - form.user = g.ldap.get_by_uid(field.data) - except NoSuchUserError: - raise ValidationError(u'Es gibt keinen Benutzer mit diesem Namen.') class SettingsForm(Form): @@ -64,7 +77,7 @@ class SettingsForm(Form): results = g.ldap.find_by_mail(field.data) for user in results: if user.uid != g.user.uid: - raise ValidationError(u'Diese E-Mail-Adresse wird schon von einem anderen account benutzt!') + raise ValidationError(u'Diese E-Mail-Adresse wird schon von einem anderen Account benutzt!') def get_servicepassword(self, service_id): return getattr(self, 'password_%s' % service_id) diff --git a/templates/index.html b/templates/index.html index e28d126..4e98750 100644 --- a/templates/index.html +++ b/templates/index.html @@ -14,7 +14,7 @@ {{ render_field(form.password) }} <div class="form-actions"><input type="submit" value="Login" /></div> <p class="form-actions"><a href="/register">Account erstellen</a></div> - <p class="form-actions"><a href="/lost_password">Passwort vergessen</a></div> + <p class="form-actions"><a href="/lost_password">Passwort oder Benutzername vergessen</a></div> </form> {%- endblock %} diff --git a/templates/lost_password.html b/templates/lost_password.html index 7f6dbd7..fc1e6b8 100644 --- a/templates/lost_password.html +++ b/templates/lost_password.html @@ -5,11 +5,12 @@ {%- block content %} <form action="{{ url_for('lost_password') }}" method="post" class="form-horizontal"> <p> - Du hast dein Passwort vergessen? Kein Problem. - Gib einfach unten deinen Benutzernamen ein, und wir schicken dir einen Link, - mit dem du dir ein neues setzen kannst. + Du hast dein Passwort und/oder deinen Benutzernamen vergessen? Kein Problem. + Gib einfach unten deinen Benutzernamen bzw. E-Mail-Adresse ein, und wir + schicken dir einen Link, mit dem du dir ein neues setzen kannst. + In dieser Mail steht dann auch dein Benutzername. </p> - {{ render_field(form.username, autofocus="autofocus") }} + {{ render_field(form.username_or_mail, autofocus="autofocus") }} {{ render_submit(value='Weiter')}} </form> {%- endblock %} |