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!
4 files
+ 79
10
Compare changes
  • Side-by-side
  • Inline

Files

+ 22
7
 
import datetime
 
from flask import render_template, request, g, redirect, url_for, session
from flask import render_template, request, g, redirect, url_for, session
from flask_wtf import FlaskForm
from flask_wtf import FlaskForm
import wtforms
import wtforms
import wtforms.validators as validators
import wtforms.validators as validators
from sqlalchemy.orm import joinedload
from sqlalchemy.orm import joinedload
 
import mo.util
import mo.db as db
import mo.db as db
import mo.rights
import mo.rights
import mo.users
import mo.users
@@ -32,14 +35,26 @@ def login():
@@ -32,14 +35,26 @@ def login():
app.logger.error('Login: Neznámý uživatel <%s>', email)
app.logger.error('Login: Neznámý uživatel <%s>', email)
error = 'Neznámý uživatel.'
error = 'Neznámý uživatel.'
elif form.reset.data:
elif form.reset.data:
# FIXME: Zkontrolovat aktivní požadavek
app.logger.info('Login: Požadavek na změnu hesla pro <%s>', email)
app.logger.info('Login: Požadavek na změnu hesla pro <%s>', email)
token = mo.users.ask_reset_password(user)
link = url_for('reset', token=token)
min_time_between_resets = datetime.timedelta(minutes=1)
db.get_session().commit()
now = datetime.datetime.now().astimezone()
# FIXME: Poslat e-mail
if (user.reset_at is not None
app.logger.info('Link: %s', link)
and now - user.reset_at < min_time_between_resets):
return render_template('reset.html')
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, _external=True)
 
db.get_session().commit()
 
 
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))
 
 
app.logger.info('Link: %s', link)
 
return render_template('reset.html')
 
elif not form.passwd.data or not mo.users.check_password(user, form.passwd.data):
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)
app.logger.error('Login: Špatné heslo pro uživatele <%s>', email)
error = 'Chybné heslo.'
error = 'Chybné heslo.'
Loading