Skip to content
Snippets Groups Projects

Staging

Merged eeonaaah requested to merge staging into master
19 files
+ 274
62
Compare changes
  • Side-by-side
  • Inline
Files
19
from flask import session, redirect, Response, url_for
from flask import session, request, Response, url_for, redirect
from typing import List
from functools import wraps
from api.utils.errors import AuthenticationError
import logging
def roles_allowed(roles: List[str]):
@@ -11,17 +12,32 @@ def roles_allowed(roles: List[str]):
def wrapper(*args, **kwargs):
user = session.get('user')
logging.debug("Secured page requested.")
if not user:
logging.debug("Redirecting to login page")
return redirect(url_for('login'))
if user:
logging.warning(f"Unauthorized request from: {request.remote_addr}")
return Response("Not authorized", 401)
if any(role in user['roles'] for role in roles):
# User has a required role, route request back to the original handler
logging.debug(f"Access granted to user: {user['email']}")
return func(*args, **kwargs)
logging.debug("Unauthorized request")
return Response("Not authorized", 403)
else:
logging.warning(f"Forbidden request from: {request.remote_addr}")
return Response("Not authorized", 403)
return wrapper
return decorator
\ No newline at end of file
return decorator
def prompt_login(func):
"""Decorator that redirects the user to a login page if they are not logged in"""
@wraps(func)
def wrapper(*args, **kwargs):
user = session.get('user')
if user:
# User is logged in, route request back to the original handler
return func(*args, **kwargs)
return redirect(url_for('login'))
return wrapper
\ No newline at end of file
Loading