diff --git a/app/api/stuff.py b/app/api/stuff.py index 3e572f3..d6dc341 100644 --- a/app/api/stuff.py +++ b/app/api/stuff.py @@ -7,7 +7,7 @@ from app.models.stuff import Stuff from app.schemas.stuff import StuffResponse, StuffSchema from app.utils.logging import AppLogger -logger = AppLogger.__call__().get_logger() +logger = AppLogger().get_logger() router = APIRouter(prefix="/v1/stuff") diff --git a/app/database.py b/app/database.py index 914690e..24d015b 100644 --- a/app/database.py +++ b/app/database.py @@ -6,7 +6,7 @@ from sqlalchemy.ext.asyncio import async_sessionmaker from app.config import settings as global_settings from app.utils.logging import AppLogger -logger = AppLogger.__call__().get_logger() +logger = AppLogger().get_logger() engine = create_async_engine( global_settings.asyncpg_url.unicode_string(), diff --git a/app/main.py b/app/main.py index 7482c8a..c532175 100644 --- a/app/main.py +++ b/app/main.py @@ -11,16 +11,18 @@ from app.api.health import router as health_router from app.redis import get_redis from app.services.auth import AuthBearer -logger = AppLogger.__call__().get_logger() +logger = AppLogger().get_logger() @asynccontextmanager async def lifespan(app: FastAPI): # Load the redis connection app.state.redis = await get_redis() - yield - # close redis connection and release the resources - app.state.redis.close() + try: + yield + finally: + # close redis connection and release the resources + app.state.redis.close() app = FastAPI(title="Stuff And Nonsense API", version="0.6", lifespan=lifespan) diff --git a/app/services/auth.py b/app/services/auth.py index 10d22f4..3db0f36 100644 --- a/app/services/auth.py +++ b/app/services/auth.py @@ -8,9 +8,17 @@ from fastapi import Request, HTTPException from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials +async def get_from_redis(request: Request, key: str): + return await request.app.state.redis.get(key) + + +async def set_to_redis(request: Request, key: str, value: str, ex: int): + return await request.app.state.redis.set(key, value, ex=ex) + + async def verify_jwt(request: Request, token: str) -> bool: - _payload = await request.app.state.redis.get(token) - return bool(_payload) + payload = await get_from_redis(request, token) + return bool(payload) class AuthBearer(HTTPBearer): @@ -29,13 +37,14 @@ class AuthBearer(HTTPBearer): async def create_access_token(user: User, request: Request): - _payload = { + # sourcery skip: avoid-builtin-shadow + payload = { "email": user.email, "expiry": time.time() + global_settings.jwt_expire, "platform": request.headers.get("User-Agent"), } - _token = jwt.encode(_payload, str(user.password), algorithm=global_settings.jwt_algorithm) + token = jwt.encode(payload, str(user.password), algorithm=global_settings.jwt_algorithm) - _bool = await request.app.state.redis.set(_token, str(_payload), ex=global_settings.jwt_expire) + _bool = await set_to_redis(request, token, str(payload), ex=global_settings.jwt_expire) if _bool: - return _token + return token