diff --git a/app/api/v2/__init__.py b/app/api/v2/__init__.py index 4cd577f86..418217d7f 100644 --- a/app/api/v2/__init__.py +++ b/app/api/v2/__init__.py @@ -10,7 +10,6 @@ from app.api.v2.common.oauth import OAuth2Scheme from app.repositories import access_tokens as access_tokens_repo - oauth2_scheme = OAuth2Scheme( authorizationUrl="/v2/oauth/authorize", tokenUrl="/v2/oauth/token", @@ -38,9 +37,9 @@ async def get_current_client(token: str = Depends(oauth2_scheme)) -> dict[str, A from . import clans from . import maps +from . import oauth from . import players from . import scores -from . import oauth apiv2_router = APIRouter(tags=["API v2"], prefix="/v2") diff --git a/app/api/v2/common/oauth.py b/app/api/v2/common/oauth.py index cf094f805..7dfa40b0c 100644 --- a/app/api/v2/common/oauth.py +++ b/app/api/v2/common/oauth.py @@ -17,10 +17,10 @@ def __init__( self, authorizationUrl: str, tokenUrl: str, - refreshUrl: Optional[str] = None, - scheme_name: Optional[str] = None, - scopes: Optional[dict[str, str]] = None, - description: Optional[str] = None, + refreshUrl: str | None = None, + scheme_name: str | None = None, + scopes: dict[str, str] | None = None, + description: str | None = None, auto_error: bool = True, ): if not scopes: @@ -45,7 +45,7 @@ def __init__( auto_error=auto_error, ) - async def __call__(self, request: Request) -> Optional[str]: + async def __call__(self, request: Request) -> str | None: authorization = request.headers.get("Authorization") scheme, param = get_authorization_scheme_param(authorization) if not authorization or scheme.lower() != "bearer": @@ -63,7 +63,7 @@ async def __call__(self, request: Request) -> Optional[str]: # https://developer.zendesk.com/api-reference/sales-crm/authentication/requests/#client-authentication def get_credentials_from_basic_auth( request: Request, -) -> Optional[dict[str, Union[str, int]]]: +) -> dict[str, str | int] | None: authorization = request.headers.get("Authorization") scheme, param = get_authorization_scheme_param(authorization) if not authorization or scheme.lower() != "basic": diff --git a/app/api/v2/models/oauth.py b/app/api/v2/models/oauth.py index b97fc08c4..e331b96db 100644 --- a/app/api/v2/models/oauth.py +++ b/app/api/v2/models/oauth.py @@ -6,7 +6,6 @@ from . import BaseModel - # input models @@ -15,7 +14,7 @@ class Token(BaseModel): access_token: str - refresh_token: Optional[str] + refresh_token: str | None token_type: Literal["Bearer"] expires_in: int expires_at: str diff --git a/app/api/v2/oauth.py b/app/api/v2/oauth.py index 02ec04bd4..311daccae 100644 --- a/app/api/v2/oauth.py +++ b/app/api/v2/oauth.py @@ -1,4 +1,5 @@ """ bancho.py's v2 apis for interacting with clans """ + from __future__ import annotations import uuid @@ -66,10 +67,10 @@ async def token( grant_type: str = Form(), client_id: int = Form(default=None), client_secret: str = Form(default=None), - auth_credentials: Optional[dict[str, Any]] = Depends( + auth_credentials: dict[str, Any] | None = Depends( get_credentials_from_basic_auth, ), - code: Optional[str] = Form(default=None), + code: str | None = Form(default=None), scope: str = Form(default="", regex=r"\b\w+\b(?:,\s*\b\w+\b)*"), ) -> Token: """Get an access token for the API.""" diff --git a/app/repositories/access_tokens.py b/app/repositories/access_tokens.py index 618034d3f..8d71755dd 100644 --- a/app/repositories/access_tokens.py +++ b/app/repositories/access_tokens.py @@ -12,18 +12,18 @@ from app.api.v2.common import json -def create_access_token_key(code: Union[UUID, str]) -> str: +def create_access_token_key(code: UUID | str) -> str: return f"bancho:access_tokens:{code}" async def create( - access_token: Union[UUID, str], + access_token: UUID | str, client_id: int, grant_type: str, scope: str, - refresh_token: Optional[Union[UUID, str]] = "", - player_id: Optional[int] = "", - expires_in: Optional[int] = "", + refresh_token: UUID | str | None = "", + player_id: int | None = "", + expires_in: int | None = "", ) -> dict[str, Any]: access_token_key = create_access_token_key(access_token) now = datetime.now() @@ -44,7 +44,7 @@ async def create( return data -async def fetch_one(access_token: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def fetch_one(access_token: UUID | str) -> dict[str, Any] | None: data = await app.state.services.redis.hgetall(create_access_token_key(access_token)) if data is None: @@ -54,10 +54,10 @@ async def fetch_one(access_token: Union[UUID, str]) -> Optional[dict[str, Any]]: async def fetch_all( - client_id: Optional[int] = None, - scope: Optional[str] = None, - grant_type: Optional[str] = None, - player_id: Optional[int] = None, + client_id: int | None = None, + scope: str | None = None, + grant_type: str | None = None, + player_id: int | None = None, page: int = 1, page_size: int = 10, ) -> list[dict[str, Any]]: @@ -101,7 +101,7 @@ async def fetch_all( return access_tokens -async def delete(access_token: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def delete(access_token: UUID | str) -> dict[str, Any] | None: access_token_key = create_access_token_key(access_token) data = await app.state.services.redis.hgetall(access_token_key) diff --git a/app/repositories/authorization_codes.py b/app/repositories/authorization_codes.py index e53522810..b0b7e3ab7 100644 --- a/app/repositories/authorization_codes.py +++ b/app/repositories/authorization_codes.py @@ -10,12 +10,12 @@ from app.api.v2.common import json -def create_authorization_code_key(code: Union[UUID, str]) -> str: +def create_authorization_code_key(code: UUID | str) -> str: return f"bancho:authorization_codes:{code}" async def create( - code: Union[UUID, str], + code: UUID | str, client_id: int, scope: str, player_id: int, @@ -28,7 +28,7 @@ async def create( ) -async def fetch_one(code: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def fetch_one(code: UUID | str) -> dict[str, Any] | None: data = await app.state.services.redis.get(create_authorization_code_key(code)) if data is None: return None @@ -37,8 +37,8 @@ async def fetch_one(code: Union[UUID, str]) -> Optional[dict[str, Any]]: async def fetch_all( - client_id: Optional[int] = None, - scope: Optional[str] = None, + client_id: int | None = None, + scope: str | None = None, page: int = 1, page_size: int = 10, ) -> list[dict[str, Any]]: @@ -76,7 +76,7 @@ async def fetch_all( return authorization_codes -async def delete(code: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def delete(code: UUID | str) -> dict[str, Any] | None: authorization_code_key = create_authorization_code_key(code) data = await app.state.services.redis.get(authorization_code_key) diff --git a/app/repositories/ouath_clients.py b/app/repositories/ouath_clients.py index 113c36c0c..d4626c731 100644 --- a/app/repositories/ouath_clients.py +++ b/app/repositories/ouath_clients.py @@ -26,8 +26,8 @@ async def create( secret: str, owner: int, - name: Optional[str] = None, - redirect_uri: Optional[str] = None, + name: str | None = None, + redirect_uri: str | None = None, ) -> dict[str, Any]: """Create a new client in the database.""" query = """\ @@ -57,11 +57,11 @@ async def create( async def fetch_one( - id: Optional[int] = None, - owner: Optional[int] = None, - secret: Optional[str] = None, - name: Optional[str] = None, -) -> Optional[dict[str, Any]]: + id: int | None = None, + owner: int | None = None, + secret: str | None = None, + name: str | None = None, +) -> dict[str, Any] | None: """Fetch a signle client from the database.""" if id is None and owner is None and secret is None: raise ValueError("Must provide at least one parameter.") @@ -85,12 +85,12 @@ async def fetch_one( async def fetch_many( - id: Optional[int] = None, - owner: Optional[int] = None, - secret: Optional[str] = None, - page: Optional[int] = None, - page_size: Optional[int] = None, -) -> Optional[list[dict[str, Any]]]: + id: int | None = None, + owner: int | None = None, + secret: str | None = None, + page: int | None = None, + page_size: int | None = None, +) -> list[dict[str, Any]] | None: """Fetch all clients from the database.""" query = f"""\ SELECT {READ_PARAMS} @@ -119,11 +119,11 @@ async def fetch_many( async def update( id: int, - secret: Optional[str] = None, - owner: Optional[int] = None, - name: Optional[str] = None, - redirect_uri: Optional[str] = None, -) -> Optional[dict[str, Any]]: + secret: str | None = None, + owner: int | None = None, + name: str | None = None, + redirect_uri: str | None = None, +) -> dict[str, Any] | None: """Update an existing client in the database.""" query = """\ UPDATE oauth_clients diff --git a/app/repositories/refresh_tokens.py b/app/repositories/refresh_tokens.py index 211918be2..794885f2a 100644 --- a/app/repositories/refresh_tokens.py +++ b/app/repositories/refresh_tokens.py @@ -12,13 +12,13 @@ from app.api.v2.common import json -def create_refresh_token_key(code: Union[UUID, str]) -> str: +def create_refresh_token_key(code: UUID | str) -> str: return f"bancho:refresh_tokens:{code}" async def create( - refresh_token: Union[UUID, str], - access_token: Union[UUID, str], + refresh_token: UUID | str, + access_token: UUID | str, client_id: int, scope: str, ) -> dict[str, Any]: @@ -39,7 +39,7 @@ async def create( return data -async def fetch_one(refresh_token: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def fetch_one(refresh_token: UUID | str) -> dict[str, Any] | None: data = await app.state.services.redis.hgetall( create_refresh_token_key(refresh_token), ) @@ -50,8 +50,8 @@ async def fetch_one(refresh_token: Union[UUID, str]) -> Optional[dict[str, Any]] async def fetch_all( - client_id: Optional[int] = None, - scope: Optional[str] = None, + client_id: int | None = None, + scope: str | None = None, page: int = 1, page_size: int = 10, ) -> list[dict[str, Any]]: @@ -89,7 +89,7 @@ async def fetch_all( return refresh_tokens -async def delete(refresh_token: Union[UUID, str]) -> Optional[dict[str, Any]]: +async def delete(refresh_token: UUID | str) -> dict[str, Any] | None: refresh_token_key = create_refresh_token_key(refresh_token) data = await app.state.services.redis.hgetall(refresh_token_key)