diff options
Diffstat (limited to 'api/hierarchy.py')
-rw-r--r-- | api/hierarchy.py | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/api/hierarchy.py b/api/hierarchy.py index c50aa81..87b9db9 100644 --- a/api/hierarchy.py +++ b/api/hierarchy.py @@ -8,7 +8,7 @@ ranks = ["none", "user", "moderator", "admin", "bot"] def util_two_id(type="user"): - ''' + ''' type?: "user" | "game" ! only used internally ! func(token_id?: str, explicit_id?: str) @@ -16,51 +16,51 @@ def util_two_id(type="user"): This decorator doesn't check for hierarchy constraints, but does make sure that token_id or explicit_id are valid user_id's ''' - def decorator(func): - def wrapper(): - token_id = None - explicit_id = None + def decorator(func): + def wrapper(): + token_id = None + explicit_id = None - token = request.cookies.get("token") or "" - if token: token_id = token_login(token) + token = request.cookies.get("token") or "" + if token: token_id = token_login(token) - data = request.get_json() - if data: explicit_id = data.get("id") + data = request.get_json() + if data: explicit_id = data.get("id") - # if there's an explicit_id, validate it using `type` - if explicit_id and \ - not valid.validate(explicit_id, type): - explicit_id = None + # if there's an explicit_id, validate it using `type` + if explicit_id and \ + not valid.validate(explicit_id, type): + explicit_id = None - return func(token_id, explicit_id) + return func(token_id, explicit_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper - return decorator + return decorator def two_person(func): - ''' + ''' endpoint should have two parameters: endpoint(user_1_id: str, user_2_id: str) no authentication, just runs endpoint() if both token_id and explicit_id are present from @util_two_id. ''' - @util_two_id("user") - def wrapper(token_id, explicit_id): - if not all_def([token_id, explicit_id]): - return "", 400 + @util_two_id("user") + def wrapper(token_id, explicit_id): + if not all_def([token_id, explicit_id]): + return "", 400 - return func(token_id, explicit_id) + return func(token_id, explicit_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper def one_person(func): - ''' + ''' endpoint should have two parameters: endpoint(user_id: str, viewer?: str) @@ -68,35 +68,35 @@ def one_person(func): doesn't check for authentication expects that func takes these arguments: (user_id, viewer?) ''' - @util_two_id("user") - def wrapper(token_id, explicit_id): - if all_notdef([token_id, explicit_id]): - return "", 400 + @util_two_id("user") + def wrapper(token_id, explicit_id): + if all_notdef([token_id, explicit_id]): + return "", 400 - return func(explicit_id or token_id, token_id) + return func(explicit_id or token_id, token_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper def game_id_with_viewer(func): - ''' + ''' endpoint should have two parameters: endpoint(game_id: str, viewer?: str) ''' - @util_two_id("game") - def wrapper(token_id, game_id): - if all_notdef([token_id, game_id]): - return "", 400 + @util_two_id("game") + def wrapper(token_id, game_id): + if all_notdef([token_id, game_id]): + return "", 400 - return func(game_id, token_id) + return func(game_id, token_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper def auth_required(level): - ''' + ''' level = "none" | "user" | "moderator" | "admin" | "bot" endpoint should have one parameter for the user_id of the request author: endpoint(user_id: str) # `user_id` can only be `None` when `level == "none"` @@ -105,33 +105,33 @@ def auth_required(level): This decorator only runs endpoint() if token_id from @util_two_id is not None and passes hierarchy constraints ''' - def decorator(func): - @util_two_id("user") - def wrapper(token_id, explicit_id): - if not token_id: - if level == ranks[0]: - return func(None) - else: - return "", 400 + def decorator(func): + @util_two_id("user") + def wrapper(token_id, explicit_id): + if not token_id: + if level == ranks[0]: + return func(None) + else: + return "", 400 - user_rank_text = cursor.execute( - "select type from users where user_id = ?", [token_id] - ).fetchone()[0] + user_rank_text = cursor.execute( + "select type from users where user_id = ?", [token_id] + ).fetchone()[0] - required_rank = ranks.index(level) - user_rank = ranks.index(user_rank_text) - if required_rank > user_rank: return "", 403 + required_rank = ranks.index(level) + user_rank = ranks.index(user_rank_text) + if required_rank > user_rank: return "", 403 - return func(token_id) + return func(token_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper - return decorator + return decorator def io_auth_required(level): - ''' + ''' level = "none" | "user" | "moderator" | "admin" | "bot" endpoint should have two parameters: endpoint(data: socket.io.data, user_id: str) # `user_id` can only be `None` when `level == "none"` @@ -139,22 +139,22 @@ def io_auth_required(level): uses the @auth_required decorator, but is only for use with @io.on decorators ''' - def decorator(func): - # data is the original @io.on data - def wrapper(data={}): + def decorator(func): + # data is the original @io.on data + def wrapper(data={}): - token = request.cookies.get("token") or "" - user_id = token_login(token) + token = request.cookies.get("token") or "" + user_id = token_login(token) - if not user_id: - if level == ranks[0]: - return func(data, None) - else: - return + if not user_id: + if level == ranks[0]: + return func(data, None) + else: + return - return func(data, user_id) + return func(data, user_id) - wrapper.__name__ = func.__name__ - return wrapper + wrapper.__name__ = func.__name__ + return wrapper - return decorator + return decorator |