start user page port
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
from flask import (
|
||||
Blueprint, render_template, request, redirect, url_for, flash, session
|
||||
Blueprint, render_template, request, redirect, url_for, flash, session, current_app
|
||||
)
|
||||
from functools import wraps
|
||||
from ..models import Users, Sessions
|
||||
from ..constants import InfoboxKind, PermissionLevel
|
||||
from ..auth import digest, verify
|
||||
@ -42,12 +43,67 @@ def validate_username(username):
|
||||
return bool(re.fullmatch(pattern, username))
|
||||
|
||||
|
||||
def redirect_if_logged_in(*args, **kwargs):
|
||||
def decorator(view_func):
|
||||
@wraps(view_func)
|
||||
def wrapper(*view_args, **view_kwargs):
|
||||
if is_logged_in():
|
||||
# resolve callables
|
||||
processed_kwargs = {
|
||||
k: v() if callable(v) else v
|
||||
for k, v in kwargs.items()
|
||||
}
|
||||
endpoint = args[0] if args else processed_kwargs.get("endpoint")
|
||||
if endpoint.startswith("."):
|
||||
blueprint = current_app.blueprints.get(view_func.__name__.split(".")[0])
|
||||
if blueprint:
|
||||
endpoint = endpoint.lstrip(".")
|
||||
return redirect(url_for(f"{blueprint.name}.{endpoint}", **processed_kwargs))
|
||||
return redirect(url_for(*args, **processed_kwargs))
|
||||
return view_func(*view_args, **view_kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
def login_required(view_func):
|
||||
@wraps(view_func)
|
||||
def wrapper(*args, **kwargs):
|
||||
if not is_logged_in():
|
||||
return redirect(url_for("users.log_in"))
|
||||
return view_func(*args, **kwargs)
|
||||
return wrapper
|
||||
|
||||
|
||||
def mod_only(*args, **kwargs):
|
||||
def decorator(view_func):
|
||||
@wraps(view_func)
|
||||
def wrapper(*view_args, **view_kwargs):
|
||||
if not get_active_user().is_mod():
|
||||
# resolve callables
|
||||
processed_kwargs = {
|
||||
k: v() if callable(v) else v
|
||||
for k, v in kwargs.items()
|
||||
}
|
||||
endpoint = args[0] if args else processed_kwargs.get("endpoint")
|
||||
if endpoint.startswith("."):
|
||||
blueprint = current_app.blueprints.get(view_func.__name__.split(".")[0])
|
||||
if blueprint:
|
||||
endpoint = endpoint.lstrip(".")
|
||||
return redirect(url_for(f"{blueprint.name}.{endpoint}", **processed_kwargs))
|
||||
return redirect(url_for(*args, **processed_kwargs))
|
||||
return view_func(*view_args, **view_kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
@bp.get("/log_in")
|
||||
@redirect_if_logged_in(".page", username = lambda: get_active_user().username)
|
||||
def log_in():
|
||||
return render_template("users/log_in.html")
|
||||
|
||||
|
||||
@bp.post("/log_in")
|
||||
@redirect_if_logged_in(".page", username = lambda: get_active_user().username)
|
||||
def log_in_post():
|
||||
target_user = Users.find({
|
||||
"username": request.form['username']
|
||||
@ -68,11 +124,13 @@ def log_in_post():
|
||||
|
||||
|
||||
@bp.get("/sign_up")
|
||||
@redirect_if_logged_in(".page", username = lambda: get_active_user().username)
|
||||
def sign_up():
|
||||
return render_template("users/sign_up.html")
|
||||
|
||||
|
||||
@bp.post("/sign_up")
|
||||
@redirect_if_logged_in(".page", username = lambda: get_active_user().username)
|
||||
def sign_up_post():
|
||||
username = request.form['username']
|
||||
password = request.form['password']
|
||||
@ -112,19 +170,29 @@ def sign_up_post():
|
||||
|
||||
@bp.get("/<username>")
|
||||
def page(username):
|
||||
return "stub"
|
||||
target_user = Users.find({"username": username})
|
||||
return render_template("users/user.html", target_user = target_user)
|
||||
|
||||
|
||||
@bp.get("/<username>/setings")
|
||||
@login_required
|
||||
def settings(username):
|
||||
return "stub"
|
||||
|
||||
|
||||
@bp.get("/<username>/inbox")
|
||||
@login_required
|
||||
def inbox(username):
|
||||
return "stub"
|
||||
|
||||
|
||||
@bp.get("/list")
|
||||
@login_required
|
||||
@mod_only(".page", username = lambda: get_active_user().username)
|
||||
def user_list():
|
||||
return "stub"
|
||||
|
||||
|
||||
@bp.post("/log_out")
|
||||
def log_out():
|
||||
pass
|
||||
|
Reference in New Issue
Block a user