diff --git a/src/core/config.py b/src/core/config.py index d907ba0..f6a70ac 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -31,6 +31,8 @@ class Config(BaseModel): WEB_APP_HOST: str + SECRET_KEY: str + def get_config() -> Config: settings = Settings() # type: ignore diff --git a/src/modules/web_app/app.py b/src/modules/web_app/app.py index c99201b..699a48e 100644 --- a/src/modules/web_app/app.py +++ b/src/modules/web_app/app.py @@ -4,12 +4,15 @@ from core.mongo import mongo_manager from core.redis import redis_manager from core.broker import broker +from .auth.authx import auth from .views import routes def get_app() -> FastAPI: app = FastAPI() + auth.handle_errors(app) + for route in routes: app.include_router(route) diff --git a/src/modules/web_app/auth/authx.py b/src/modules/web_app/auth/authx.py new file mode 100644 index 0000000..12f5172 --- /dev/null +++ b/src/modules/web_app/auth/authx.py @@ -0,0 +1,12 @@ +from authx import AuthX, AuthXConfig + +from core.config import config + + +config = AuthXConfig( + JWT_ALGORITHM = "HS256", + JWT_SECRET_KEY = config.SECRET_KEY, + JWT_TOKEN_LOCATION = ["headers"], +) + +auth = AuthX(config=config) diff --git a/src/modules/web_app/views/auth.py b/src/modules/web_app/views/auth.py index 7b43520..96e535c 100644 --- a/src/modules/web_app/views/auth.py +++ b/src/modules/web_app/views/auth.py @@ -5,6 +5,7 @@ from domain.users import CreateUser from modules.web_app.services.oauth.process_callback import process_callback from modules.web_app.services.oauth.authorization_url_getter import get_authorization_url as gen_auth_link from modules.web_app.serializers.auth import GetAuthorizationUrlResponse +from modules.web_app.auth.authx import auth from repositories.users import UserRepository @@ -29,4 +30,6 @@ async def callback(provider: OAuthProvider, code: str): ) ) - return {"user": user.model_dump()} + token = auth.create_access_token(uid=user.id, data={"is_admin": user.is_admin}) + + return {"token": token}