Newer
Older
from flask_jwt_extended import verify_jwt_in_request
from flask_jwt_extended.utils import get_jwt_claims
def validate_editor(db_item, *views):
claims = get_jwt_claims()
city_id = int(claims.get("city_id"))
if db_item.city_id != city_id:
abort(http_codes.UNAUTHORIZED)
def check_jwt(editor=False, *views):
def wrapper(fn):
@wraps(fn)
def decorator(*args, **kwargs):
verify_jwt_in_request()
claims = get_jwt_claims()
role = claims.get("role")
view = claims.get("view")
if role == "Admin":
return fn(*args, **kwargs)
elif editor and role == "Editor":
return fn(*args, **kwargs)
elif view in views:
return decorator
return wrapper
def text_response(message, code=http_codes.OK):
def list_response(items, total=None, code=http_codes.OK):
if not total:
total = len(items)
return {"items": items, "count": len(items), "total_count": total}, code
def item_response(item, code=http_codes.OK):
from flask_restx import Api
from .alternatives import api as alternative_ns
from .answers import api as answer_ns
from .competitions import api as comp_ns
from .slides import api as slide_ns
from .teams import api as team_ns
flask_api = Api()
flask_api.add_namespace(media_ns, path="/api/media")
flask_api.add_namespace(misc_ns, path="/api/misc")
flask_api.add_namespace(user_ns, path="/api/users")
flask_api.add_namespace(auth_ns, path="/api/auth")
flask_api.add_namespace(comp_ns, path="/api/competitions")
flask_api.add_namespace(slide_ns, path="/api/competitions/<CID>/slides")
flask_api.add_namespace(alternative_ns, path="/api/competitions/<CID>/slides/<SOrder>/questions/<QID>/alternatives")
flask_api.add_namespace(answer_ns, path="/api/competitions/<CID>/teams/<TID>/answers")
flask_api.add_namespace(team_ns, path="/api/competitions/<CID>/teams")
flask_api.add_namespace(code_ns, path="/api/competitions/<CID>/codes")
flask_api.add_namespace(question_ns, path="/api/competitions/<CID>")
flask_api.add_namespace(component_ns, path="/api/competitions/<CID>/slides/<SOrder>/components")