from flask import Blueprint, redirect, url_for, render_template, request, session from functools import wraps from ..auth import digest, verify, create_session, is_logged_in from ..models import Users bp = Blueprint('users', __name__, url_prefix='/users/') def redirect_if_logged_in(destination='topics.all_topics'): def decorator(view_func): @wraps(view_func) def wrapper(*args, **kwargs): if is_logged_in(): return redirect(url_for(destination)) return view_func(*args, **kwargs) return wrapper return decorator @bp.get('/log-in') @redirect_if_logged_in() def log_in(): return render_template('users/log_in.html') @bp.post('/log-in') @redirect_if_logged_in() def log_in_post(): user = Users.find({'username': request.form['username']}) if not user: return redirect(url_for('.log_in', error='The username or password you entered is incorrect.')) if not verify(user.password_hash, request.form['password']): return redirect(url_for('.log_in', error='The username or password you entered is incorrect.')) session['remember'] = request.form.get('remember') == 'on' sess = create_session(user.id, not session['remember']) session['pyrom_session_key'] = sess.key if session['remember']: session.permanent = True return redirect(request.form.get('return_to', default=url_for('topics.all_topics'))) @bp.get('/sign-up') @redirect_if_logged_in() def sign_up(): return 'stub' @bp.get('/') def user_page(username): return 'stub' @bp.get('//settings') def settings(username): return 'stub' @bp.get('//inbox') def inbox(username): return 'stub' @bp.get('//bookmarks') def bookmarks(username): return 'stub'