Files
discord-bot/src/applications/web_app/views/auth.py
2025-04-21 13:51:01 +02:00

39 lines
1.3 KiB
Python

from fastapi import APIRouter
from domain.auth import OAuthProvider, OAuthData
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, CallbackResponse
from modules.web_app.auth.authx import auth
from repositories.users import UserRepository
auth_router = APIRouter(prefix="/api/auth", tags=["auth"])
@auth_router.get("/get_authorization_url/{provider}/")
async def get_authorization_url(provider: OAuthProvider) -> GetAuthorizationUrlResponse:
link = await gen_auth_link(provider)
return GetAuthorizationUrlResponse(authorization_url=link)
@auth_router.get("/callback/{provider}/")
async def callback(provider: OAuthProvider, code: str) -> CallbackResponse:
user_data = await process_callback(provider, code)
user = await UserRepository.get_or_create_user(
CreateUser(
oauths={provider: OAuthData(id=user_data[0], email=user_data[1])},
is_admin=False,
)
)
token = auth.create_access_token(
uid=user.id,
is_admin=user.is_admin
)
return CallbackResponse(token=token)