capsul-flask/capsulflask/auth.py

54 lines
1.3 KiB
Python
Raw Normal View History

2020-05-10 01:36:14 +00:00
import functools
from flask import Blueprint
from flask import g
from flask import redirect
from flask import url_for
from flask import session
from capsulflask.db import get_model
bp = Blueprint("auth", __name__, url_prefix="/auth")
def account_required(view):
"""View decorator that redirects anonymous users to the login page."""
@functools.wraps(view)
def wrapped_view(**kwargs):
if session.get("account") is None:
return redirect(url_for("auth.login"))
return view(**kwargs)
return wrapped_view
@bp.route("/register", methods=("GET", "POST"))
def register():
if request.method == "POST":
email = request.form["email"]
model = get_model()
error = None
if not email:
error = "Email is required."
elif (
model.
):
error = f"User {username} is already registered."
if error is None:
# the name is available, store it in the database and go to
# the login page
db.execute(
"INSERT INTO user (username, password) VALUES (?, ?)",
(username, generate_password_hash(password)),
)
db.commit()
return redirect(url_for("auth.login"))
flash(error)
return render_template("auth/register.html")