mirror of
https://github.com/kurbezz/discord-bot.git
synced 2025-12-06 15:15:37 +01:00
Update
This commit is contained in:
@@ -96,12 +96,14 @@ class TwitchService:
|
|||||||
|
|
||||||
assert self.twitch._user_auth_token is not None
|
assert self.twitch._user_auth_token is not None
|
||||||
|
|
||||||
|
logger.info("Check token...")
|
||||||
val_result = await validate_token(
|
val_result = await validate_token(
|
||||||
self.twitch._user_auth_token,
|
self.twitch._user_auth_token,
|
||||||
auth_base_url=self.twitch.auth_base_url
|
auth_base_url=self.twitch.auth_base_url
|
||||||
)
|
)
|
||||||
if val_result.get('status', 200) != 200:
|
if val_result.get('status', 200) != 200:
|
||||||
await self.twitch.refresh_used_token()
|
await self.twitch.refresh_used_token()
|
||||||
|
logger.info("Token refreshed")
|
||||||
|
|
||||||
async def run(self) -> NoReturn:
|
async def run(self) -> NoReturn:
|
||||||
eventsub = EventSubWebhook(
|
eventsub = EventSubWebhook(
|
||||||
|
|||||||
@@ -3,3 +3,7 @@ from pydantic import BaseModel
|
|||||||
|
|
||||||
class GetAuthorizationUrlResponse(BaseModel):
|
class GetAuthorizationUrlResponse(BaseModel):
|
||||||
authorization_url: str
|
authorization_url: str
|
||||||
|
|
||||||
|
|
||||||
|
class CallbackResponse(BaseModel):
|
||||||
|
token: str
|
||||||
|
|||||||
5
src/modules/web_app/serializers/streamer.py
Normal file
5
src/modules/web_app/serializers/streamer.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class StreamerSerializer(BaseModel):
|
||||||
|
pass
|
||||||
@@ -4,7 +4,7 @@ from domain.auth import OAuthProvider, OAuthData
|
|||||||
from domain.users import CreateUser
|
from domain.users import CreateUser
|
||||||
from modules.web_app.services.oauth.process_callback import process_callback
|
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.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 modules.web_app.auth.authx import auth
|
||||||
from repositories.users import UserRepository
|
from repositories.users import UserRepository
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ async def get_authorization_url(provider: OAuthProvider) -> GetAuthorizationUrlR
|
|||||||
|
|
||||||
|
|
||||||
@auth_router.get("/callback/{provider}/")
|
@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_data = await process_callback(provider, code)
|
||||||
|
|
||||||
user = await UserRepository.get_or_create_user(
|
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)
|
||||||
|
|||||||
37
src/modules/web_app/views/streamer.py
Normal file
37
src/modules/web_app/views/streamer.py
Normal 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]
|
||||||
@@ -6,6 +6,17 @@ from .base import BaseRepository
|
|||||||
class UserRepository(BaseRepository):
|
class UserRepository(BaseRepository):
|
||||||
COLLECTION_NAME = "users"
|
COLLECTION_NAME = "users"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def get(cls, user_id: str) -> User:
|
||||||
|
async with cls.connect() as collection:
|
||||||
|
user = await collection.find_one({"_id": user_id})
|
||||||
|
|
||||||
|
return User(
|
||||||
|
id=str(user["_id"]),
|
||||||
|
oauths=user["oauths"],
|
||||||
|
is_admin=user["is_admin"],
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def get_or_create_user(cls, newUser: CreateUser) -> User:
|
async def get_or_create_user(cls, newUser: CreateUser) -> User:
|
||||||
filter_data = {}
|
filter_data = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user