summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarian Sigler <m@qjym.de>2012-09-29 17:55:14 +0200
committerMarian Sigler <m@qjym.de>2012-09-29 17:56:14 +0200
commit2f5998a079e2a4f882c1ea3c1a3ceebca404e3a8 (patch)
treebb9326d5404e383cb6cb6ed285966356f273912c
parent0afa6b651dfb326481d8b0d0fd5d599384889170 (diff)
downloadweb-2f5998a079e2a4f882c1ea3c1a3ceebca404e3a8.tar.gz
web-2f5998a079e2a4f882c1ea3c1a3ceebca404e3a8.tar.bz2
web-2f5998a079e2a4f882c1ea3c1a3ceebca404e3a8.zip
Make it possible to enter an email address at lost_password.
That way users who forgot their username can find it out.
-rw-r--r--app.py4
-rw-r--r--forms.py27
-rw-r--r--templates/index.html2
-rw-r--r--templates/lost_password.html9
4 files changed, 28 insertions, 14 deletions
diff --git a/app.py b/app.py
index eae781f..5998a81 100644
--- a/app.py
+++ b/app.py
@@ -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,
diff --git a/forms.py b/forms.py
index 53f70ff..84ccb29 100644
--- a/forms.py
+++ b/forms.py
@@ -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 %}