Skip to content
Snippets Groups Projects

Posílání emailů na obnovu hesla

Merged Václav Volhejn requested to merge reset-email into master
All threads resolved!
3 files
+ 58
2
Compare changes
  • Side-by-side
  • Inline

Files

+ 27
9
import datetime
from flask import render_template, request, g, redirect, url_for, session
from flask_wtf import FlaskForm
import wtforms
import wtforms.validators as validators
from sqlalchemy.orm import joinedload
import mo.util
import mo.db as db
import mo.rights
import mo.users
@@ -32,14 +35,25 @@ def login():
app.logger.error('Login: Neznámý uživatel <%s>', email)
error = 'Neznámý uživatel.'
elif form.reset.data:
# FIXME: Zkontrolovat aktivní požadavek
app.logger.info('Login: Požadavek na změnu hesla pro <%s>', email)
min_time_between_resets = datetime.timedelta(minutes=1)
now = datetime.datetime.now().astimezone()
if (user.reset_at is not None
and now - user.reset_at < min_time_between_resets):
error = 'Poslední požadavek na obnovení hesla byl odeslán příliš nedávno.'
else:
token = mo.users.ask_reset_password(user)
link = url_for('reset', token=token)
link = url_for('reset', token=token, _external=True)
db.get_session().commit()
# FIXME: Poslat e-mail
app.logger.info('Link: %s', link)
try:
mo.util.send_password_reset_email(user, link)
except RuntimeError as e:
app.logger.error('Login: problém při posílání emailu: {}'.format(e))
return render_template('reset.html')
elif not form.passwd.data or not mo.users.check_password(user, form.passwd.data):
app.logger.error('Login: Špatné heslo pro uživatele <%s>', email)
error = 'Chybné heslo.'
@@ -97,8 +111,12 @@ def reset():
mo.users.cancel_reset_password(user)
db.get_session().commit()
return render_template('reset.html', okay='Obnova hesla zrušena.')
elif len(form.passwd.data) < 4: # FIXME
return render_template('reset.html', form=form, error='Heslo je příliš krátké.')
elif len(form.passwd.data) < 8:
return render_template(
'reset.html',
form=form,
error='Heslo musí být aspoň 8 znaků dlouhé.'
)
else:
mo.users.do_reset_password(user)
mo.users.set_password(user, form.passwd.data)
Loading