diff --git a/src/elody/policies/authentication/x_user_headers_policy.py b/src/elody/policies/authentication/x_user_headers_policy.py new file mode 100644 index 0000000..4dbc037 --- /dev/null +++ b/src/elody/policies/authentication/x_user_headers_policy.py @@ -0,0 +1,34 @@ +import os +from flask import Request +from inuits_policy_based_auth.authentication.base_authentication_policy import ( + BaseAuthenticationPolicy, +) +from configuration import get_object_configuration_mapper +from storage.storagemanager import StorageManager + + +class XUserHeadersPolicy(BaseAuthenticationPolicy): + def authenticate(self, user_context, request_context): + request: Request = request_context.http_request + + auth_header = request.headers.get("Authorization", "") + if auth_header.startswith("Bearer "): + token = auth_header[7:] # Remove "Bearer " prefix + static_jwt = os.getenv("STATIC_JWT") + + if static_jwt and token == static_jwt: + user_email = request.headers.get("X-User-Email") + if user_email: + config = get_object_configuration_mapper().get("user") + storage_manager = StorageManager() + user = storage_manager.get_db_engine().get_item_from_collection_by_id( + config.crud()["collection"], user_email + ) + + if user: + user_context.id = user.get("_id", user.get("id")) + user_context.email = user_email + else: + pass + + return user_context