From 4e2cee6625c1561b18d64a49a8b5613adddb892d Mon Sep 17 00:00:00 2001 From: IluaAir Date: Sun, 22 Jun 2025 12:31:16 +0300 Subject: [PATCH] add transport and strategy --- .gitignore | 4 +++- src/api/dependancies.py | 24 ++++++++++++++++++++++-- src/settings.py | 8 ++++++-- src/transport/__init__.py | 0 src/transport/transport.py | 3 +++ 5 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 src/transport/__init__.py create mode 100644 src/transport/transport.py diff --git a/.gitignore b/.gitignore index 62a97aa..6548fe1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /.venv/ -/.idea \ No newline at end of file +/.idea +/src/db/*.db +.env \ No newline at end of file diff --git a/src/api/dependancies.py b/src/api/dependancies.py index b3276b6..a11f90b 100644 --- a/src/api/dependancies.py +++ b/src/api/dependancies.py @@ -1,11 +1,14 @@ from typing import Annotated, AsyncGenerator from fastapi import Depends +from fastapi_users.authentication.strategy import AccessTokenDatabase, DatabaseStrategy from fastapi_users_db_sqlalchemy import SQLAlchemyUserDatabase +from fastapi_users_db_sqlalchemy.access_token import SQLAlchemyAccessTokenDatabase from sqlalchemy.ext.asyncio import AsyncSession from src.db.database import async_session_maker -from src.models import UsersORM +from src.models import UsersORM, AccessToken +from src.settings import settings async def get_db() -> AsyncGenerator[AsyncSession, None]: @@ -16,5 +19,22 @@ async def get_db() -> AsyncGenerator[AsyncSession, None]: DBDep = Annotated[AsyncSession, Depends(get_db)] -async def get_user_db(session: DBDep): +async def get_user_db( + session: DBDep +): yield SQLAlchemyUserDatabase(session, UsersORM) + + +async def get_access_token_db( + session: DBDep, +): + yield SQLAlchemyAccessTokenDatabase(session, AccessToken) + + +ATDep = Annotated[AccessTokenDatabase[AccessToken], Depends(get_access_token_db)] + + +def get_database_strategy( + access_token_db: ATDep, +) -> DatabaseStrategy: + return DatabaseStrategy(access_token_db, lifetime_seconds=settings.lifetime) diff --git a/src/settings.py b/src/settings.py index 7233fee..a6b9019 100644 --- a/src/settings.py +++ b/src/settings.py @@ -1,5 +1,9 @@ -from pydantic_settings import BaseSettings +from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): - ... \ No newline at end of file + model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') + lifetime: int + + +settings = Settings() diff --git a/src/transport/__init__.py b/src/transport/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/transport/transport.py b/src/transport/transport.py new file mode 100644 index 0000000..3f7f2f0 --- /dev/null +++ b/src/transport/transport.py @@ -0,0 +1,3 @@ +from fastapi_users.authentication import BearerTransport + +bearer_transport = BearerTransport(tokenUrl="auth/jwt/login")