This commit is contained in:
2024-11-28 17:17:29 +01:00
parent e7ed8ff371
commit df7285a37b
6 changed files with 66 additions and 4 deletions

View File

@@ -96,12 +96,14 @@ class TwitchService:
assert self.twitch._user_auth_token is not None
logger.info("Check token...")
val_result = await validate_token(
self.twitch._user_auth_token,
auth_base_url=self.twitch.auth_base_url
)
if val_result.get('status', 200) != 200:
await self.twitch.refresh_used_token()
logger.info("Token refreshed")
async def run(self) -> NoReturn:
eventsub = EventSubWebhook(

View File

@@ -3,3 +3,7 @@ from pydantic import BaseModel
class GetAuthorizationUrlResponse(BaseModel):
authorization_url: str
class CallbackResponse(BaseModel):
token: str

View File

@@ -0,0 +1,5 @@
from pydantic import BaseModel
class StreamerSerializer(BaseModel):
pass

View File

@@ -4,7 +4,7 @@ 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
from modules.web_app.serializers.auth import GetAuthorizationUrlResponse, CallbackResponse
from modules.web_app.auth.authx import auth
from repositories.users import UserRepository
@@ -20,7 +20,7 @@ async def get_authorization_url(provider: OAuthProvider) -> GetAuthorizationUrlR
@auth_router.get("/callback/{provider}/")
async def callback(provider: OAuthProvider, code: str):
async def callback(provider: OAuthProvider, code: str) -> CallbackResponse:
user_data = await process_callback(provider, code)
user = await UserRepository.get_or_create_user(
@@ -30,6 +30,9 @@ async def callback(provider: OAuthProvider, code: str):
)
)
token = auth.create_access_token(uid=user.id, data={"is_admin": user.is_admin})
token = auth.create_access_token(
uid=user.id,
is_admin=user.is_admin
)
return {"token": token}
return CallbackResponse(token=token)

View File

@@ -0,0 +1,37 @@
from fastapi import APIRouter, Depends
from authx import RequestToken
from modules.web_app.auth.authx import auth
from modules.web_app.serializers.streamer import StreamerSerializer
from repositories.streamers import StreamerConfigRepository
from repositories.users import UserRepository
from domain.auth import OAuthProvider
streamer_router = APIRouter(prefix="/streamers")
@streamer_router.get("/")
async def get_streamers(
token: RequestToken = Depends(RequestToken)
) -> list[StreamerSerializer]:
payload = auth.verify_token(token)
u_id = payload.sub
is_admin: bool = getattr(payload, "is_admin", False)
if is_admin:
streamers = await StreamerConfigRepository.all()
else:
user = await UserRepository.get(u_id)
twith_oauth = user.oauths.get(OAuthProvider.TWITCH)
if not twith_oauth:
return []
streamers = [await StreamerConfigRepository.get_by_twitch_id(
int(twith_oauth.id)
)]
return [StreamerSerializer(**streamer.model_dump()) for streamer in streamers]