wag-managment-api-service-v.../ApiServices/Token/token_handler.py

79 lines
3.0 KiB
Python

from typing import Union
from AllConfigs.Token.config import Auth
from ErrorHandlers import HTTPExceptionApi
from Services.Redis import RedisActions, AccessToken
from fastapi import Request
from ApiValidations.Custom.token_objects import EmployeeTokenObject, OccupantTokenObject
class TokenService:
@classmethod
def raise_error_if_request_has_no_token(cls, request: Request) -> None:
"""Get access token from request headers."""
if not hasattr(request, "headers"):
raise HTTPExceptionApi(
error_code="",
lang="en",
)
if not request.headers.get(Auth.ACCESS_TOKEN_TAG):
raise HTTPExceptionApi(
error_code="",
lang="en",
)
@classmethod
def get_access_token_from_request(cls, request: Request) -> str:
"""Get access token from request headers."""
cls.raise_error_if_request_has_no_token(request=request)
return request.headers.get(Auth.ACCESS_TOKEN_TAG)
@classmethod
def get_object_via_access_key(cls, access_token: str) -> Union[EmployeeTokenObject, OccupantTokenObject]:
"""Get access token from request headers."""
access_token = AccessToken(
accessToken=access_token,
userUUID="",
)
if redis_object := RedisActions.get_json(
list_keys=access_token.to_list()
).first.data:
access_token.userUUID = redis_object.get("user_uu_id")
if redis_object.get("user_type") == 1:
if not redis_object.get("selected_company", None):
redis_object["selected_company"] = None
return EmployeeTokenObject(**redis_object)
elif redis_object.get("user_type") == 2:
if not redis_object.get("selected_occupant", None):
redis_object["selected_occupant"] = None
return OccupantTokenObject(**redis_object)
raise HTTPExceptionApi(
error_code="",
lang="en",
)
@classmethod
def get_object_via_user_uu_id(cls, user_id: str) -> Union[EmployeeTokenObject, OccupantTokenObject]:
"""Get access token from user uuid."""
access_token = AccessToken(
accessToken="",
userUUID=user_id,
)
if redis_object := RedisActions.get_json(
list_keys=access_token.to_list()
).first.data:
access_token.userUUID = redis_object.get("user_uu_id")
if redis_object.get("user_type") == 1:
if not redis_object.get("selected_company", None):
redis_object["selected_company"] = None
return EmployeeTokenObject(**redis_object)
elif redis_object.get("user_type") == 2:
if not redis_object.get("selected_occupant", None):
redis_object["selected_occupant"] = None
return OccupantTokenObject(**redis_object)
raise HTTPExceptionApi(
error_code="",
lang="en",
)