From 908eab5fdcb26c725e2fef2e3cdc6ac4c6873c8e Mon Sep 17 00:00:00 2001 From: Maxime Alves LIRMM Date: Mon, 22 Nov 2021 20:05:17 +0100 Subject: [PATCH] [lib.user] move JWTUser, Nobody and CheckUser to lib.user --- halfapi/lib/jwt_middleware.py | 75 +-------------------------------- halfapi/lib/responses.py | 2 +- halfapi/lib/user.py | 79 +++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 75 deletions(-) create mode 100644 halfapi/lib/user.py diff --git a/halfapi/lib/jwt_middleware.py b/halfapi/lib/jwt_middleware.py index 9d53f9c..08e416f 100644 --- a/halfapi/lib/jwt_middleware.py +++ b/halfapi/lib/jwt_middleware.py @@ -21,6 +21,7 @@ from starlette.authentication import ( from starlette.requests import HTTPConnection from starlette.exceptions import HTTPException +from .user import CheckUser, JWTUser, Nobody from ..logging import logger SECRET=None @@ -30,80 +31,6 @@ except ImportError as exc: logger.error('Could not import SECRET variable from conf module,'\ ' using HALFAPI_SECRET environment variable') -class Nobody(UnauthenticatedUser): - """ Nobody class - - The default class when no token is passed - """ - @property - def json(self): - return { - 'id' : '', - 'token': '', - 'payload': '' - } - - -class JWTUser(BaseUser): - """ JWTUser class - - Is used to store authentication informations - """ - def __init__(self, user_id: UUID, token: str, payload: dict) -> None: - self.__id = user_id - self.token = token - self.payload = payload - - def __str__(self): - return str(self.json) - - @property - def json(self): - return { - 'id' : str(self.__id), - 'token': self.token, - 'payload': self.payload - } - - @property - def is_authenticated(self) -> bool: - return True - - @property - def display_name(self) -> str: - return ' '.join( - (self.payload.get('name'), self.payload.get('firstname'))) - - @property - def id(self) -> str: - return self.__id - - -class CheckUser(BaseUser): - """ CheckUser class - - Is used to call checks with give user_id, to know if it passes the ACLs for - the given route. - - It should never be able to run a route function. - """ - def __init__(self, user_id: UUID) -> None: - self.__id = user_id - - - @property - def is_authenticated(self) -> bool: - return True - - @property - def display_name(self) -> str: - return 'check_user' - - @property - def id(self) -> str: - return self.__id - - class JWTAuthenticationBackend(AuthenticationBackend): def __init__(self, secret_key: str = SECRET, diff --git a/halfapi/lib/responses.py b/halfapi/lib/responses.py index 60276a6..db7f072 100644 --- a/halfapi/lib/responses.py +++ b/halfapi/lib/responses.py @@ -22,7 +22,7 @@ import orjson # asgi framework from starlette.responses import PlainTextResponse, Response, JSONResponse -from .jwt_middleware import JWTUser, Nobody +from .user import JWTUser, Nobody __all__ = [ diff --git a/halfapi/lib/user.py b/halfapi/lib/user.py new file mode 100644 index 0000000..9834e80 --- /dev/null +++ b/halfapi/lib/user.py @@ -0,0 +1,79 @@ +from uuid import UUID +from starlette.authentication import BaseUser, UnauthenticatedUser + +class Nobody(UnauthenticatedUser): + """ Nobody class + + The default class when no token is passed + """ + @property + def json(self): + return { + 'id' : '', + 'token': '', + 'payload': '' + } + + +class JWTUser(BaseUser): + """ JWTUser class + + Is used to store authentication informations + """ + def __init__(self, user_id: UUID, token: str, payload: dict) -> None: + self.__id = user_id + self.token = token + self.payload = payload + + def __str__(self): + return str(self.json) + + @property + def json(self): + return { + 'id' : str(self.__id), + 'token': self.token, + 'payload': self.payload + } + + @property + def is_authenticated(self) -> bool: + return True + + @property + def display_name(self) -> str: + return ' '.join( + (self.payload.get('name'), self.payload.get('firstname'))) + + @property + def id(self) -> str: + return self.__id + + +class CheckUser(BaseUser): + """ CheckUser class + + Is used to call checks with give user_id, to know if it passes the ACLs for + the given route. + + It should never be able to run a route function. + """ + def __init__(self, user_id: UUID) -> None: + self.__id = user_id + + + @property + def is_authenticated(self) -> bool: + return True + + @property + def display_name(self) -> str: + return 'check_user' + + @property + def id(self) -> str: + return self.__id + + + +