diff --git a/shvatka/api/dependencies/auth.py b/shvatka/api/dependencies/auth.py index be700b3e..9a4879cd 100644 --- a/shvatka/api/dependencies/auth.py +++ b/shvatka/api/dependencies/auth.py @@ -37,7 +37,7 @@ """ logger = logging.getLogger(__name__) -oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/token") +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/token", auto_error=False) def get_current_user() -> dto.User: diff --git a/shvatka/api/main_factory.py b/shvatka/api/main_factory.py index f62bd59a..2cc2d4d4 100644 --- a/shvatka/api/main_factory.py +++ b/shvatka/api/main_factory.py @@ -4,7 +4,7 @@ from redis.asyncio import Redis from sqlalchemy.ext.asyncio import async_sessionmaker, AsyncSession -from shvatka.api import dependencies, routes +from shvatka.api import dependencies, routes, middlewares from shvatka.api.config.models.main import ApiConfig from shvatka.common.config.models.paths import Paths from shvatka.common.config.parser.paths import common_get_paths @@ -16,6 +16,7 @@ def create_app(pool: async_sessionmaker[AsyncSession], redis: Redis, config: Api app = FastAPI() dependencies.setup(app=app, pool=pool, redis=redis, config=config) app.include_router(routes.setup()) + middlewares.setup(app) return app diff --git a/shvatka/api/middlewares/__init__.py b/shvatka/api/middlewares/__init__.py new file mode 100644 index 00000000..85814186 --- /dev/null +++ b/shvatka/api/middlewares/__init__.py @@ -0,0 +1,8 @@ +from fastapi import FastAPI +from starlette.middleware.base import BaseHTTPMiddleware + +from shvatka.api.middlewares.log import LoggingMiddleware + + +def setup(app: FastAPI) -> None: + app.add_middleware(BaseHTTPMiddleware, dispatch=LoggingMiddleware()) diff --git a/shvatka/api/middlewares/log.py b/shvatka/api/middlewares/log.py new file mode 100644 index 00000000..78ebc968 --- /dev/null +++ b/shvatka/api/middlewares/log.py @@ -0,0 +1,13 @@ +import logging + +from fastapi import Request, Response + +logger = logging.getLogger(__name__) + + +class LoggingMiddleware: + async def __call__(self, request: Request, call_next) -> Response: + logger.debug("got request. url: %s, headers: %s", request.url, request.headers) + response = await call_next(request) + logger.debug("response will be: status: %s, headers: %s", response.status_code, response.headers) + return response