mirror of
https://github.com/kurbezz/discord-bot.git
synced 2025-12-06 15:15:37 +01:00
39 lines
1.3 KiB
Python
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)
|