Skip to content
Snippets Groups Projects

Změny vzhledu

Merged Jiří Setnička requested to merge jirka/layout into devel
Files
6
+ 17
18
import datetime
from flask import render_template, request, g, redirect, url_for, session
from flask.helpers import flash
from flask_wtf import FlaskForm
import werkzeug.exceptions
import wtforms
from wtforms.fields.html5 import EmailField
import wtforms.validators as validators
from sqlalchemy.orm import joinedload
from typing import Optional
@@ -17,7 +19,7 @@ from mo.web import app, NeedLoginError
class LoginForm(FlaskForm):
next = wtforms.HiddenField()
email = wtforms.StringField('E-mail', validators=[validators.DataRequired()])
email = EmailField('E-mail', validators=[validators.DataRequired()])
passwd = wtforms.PasswordField('Heslo')
submit = wtforms.SubmitField('Přihlásit se')
reset = wtforms.SubmitField('Obnovit heslo')
@@ -44,7 +46,7 @@ def login():
if not user:
app.logger.error('Login: Neznámý uživatel <%s>', email)
error = 'Neznámý uživatel.'
flash('Neznámý uživatel', 'danger')
elif form.reset.data:
app.logger.info('Login: Požadavek na reset hesla pro <%s>', email)
@@ -52,17 +54,17 @@ def login():
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.'
flash('Poslední požadavek na obnovení hesla byl odeslán příliš nedávno', 'danger')
else:
token = mo.users.ask_reset_password(user)
db.get_session().commit()
mo.util.send_password_reset_email(user, token)
return render_template('reset.html')
flash('Na uvedenou adresu byl odeslán e-mail s odkazem na obnovu hesla', 'success')
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.'
flash('Chybné heslo', 'danger')
else:
app.logger.info('Login: Přihlásil se uživatel <%s>', email)
mo.users.login(user)
@@ -70,7 +72,7 @@ def login():
session['uid'] = user.user_id
return after_login(user, form.next.data)
return render_template('login.html', form=form, error=error)
return render_template('login.html', form=form)
@app.route('/auth/logout', methods=('POST',))
@@ -115,22 +117,20 @@ def handle_need_login(e):
class ResetForm(FlaskForm):
token = wtforms.HiddenField()
passwd = wtforms.PasswordField('Heslo')
passwd = wtforms.PasswordField('Nové heslo')
submit = wtforms.SubmitField('Nastavit heslo')
cancel = wtforms.SubmitField('Zrušit obnovu hesla')
@app.route('/auth/reset', methods=('GET', 'POST'))
def reset():
if request.args.get('done'):
return render_template('reset.html', okay='Heslo nastaveno.')
form = ResetForm(token=request.args.get('token'))
ok = form.validate_on_submit()
user = mo.users.check_reset_password(form.token.data)
if not user:
return render_template('reset.html', fatal='Neplatný požadavek na obnovu hesla.')
flash('Neplatný požadavek na obnovu hesla', 'danger')
return redirect(url_for('login'))
if not ok:
return render_template('reset.html', form=form)
@@ -138,13 +138,11 @@ def reset():
mo.users.cancel_reset_password(user)
app.logger.info('Login: Zrušen reset hesla pro uživatele <%s>', user.email)
db.get_session().commit()
return render_template('reset.html', okay='Obnova hesla zrušena.')
flash('Obnova hesla zrušena', 'warning')
return redirect(url_for('login'))
elif len(form.passwd.data) < 8:
return render_template(
'reset.html',
form=form,
error='Heslo musí být aspoň 8 znaků dlouhé.'
)
flash('Heslo musí být aspoň 8 znaků dlouhé', 'danger')
return render_template('reset.html', form=form)
else:
mo.users.do_reset_password(user)
mo.users.set_password(user, form.passwd.data)
@@ -155,4 +153,5 @@ def reset():
details={'action': 'reset-passwd'},
)
db.get_session().commit()
return redirect(url_for('reset', done=1))
flash('Nové heslo úspěšně nastaveno, nyní se můžete přihlásit', 'success')
return redirect(url_for('login'))
Loading