79 lines
3.0 KiB
Python
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",
|
|
)
|