You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
suchwow/suchwow/utils/decorators.py

39 lines
1.3 KiB

from flask import session, redirect, url_for, flash
from functools import wraps
from suchwow._models import User
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if "auth" not in session or not session["auth"]:
return redirect(url_for("auth.login"))
return f(*args, **kwargs)
return decorated_function
def moderator_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if "auth" not in session or not session["auth"]:
return redirect(url_for("auth.login"))
u = User.select().where(User.username == session["auth"]["preferred_username"]).first()
if u.moderator:
return f(*args, **kwargs)
else:
flash("You are not a moderator", "is-warning")
return redirect(url_for("main.index"))
return decorated_function
def address_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
u = User.select().where(User.username == session["auth"]["preferred_username"]).first()
if not u.address:
url = "{}?redirect={}".format(
url_for("profile.edit"),
url_for("post.create")
)
return redirect(url)
return f(*args, **kwargs)
return decorated_function