fix auth lifetime
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
from fastapi import FastAPI
|
||||
from sqlalchemy.ext.asyncio import (AsyncEngine, AsyncSession,
|
||||
async_sessionmaker)
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
|
||||
|
||||
from api.application.abstractions.uow import UnitOfWork
|
||||
from api.application.protocols.date_time import DateTimeProvider
|
||||
@@ -9,21 +8,33 @@ from api.application.protocols.password_hasher import PasswordHasher
|
||||
from api.application.usecase.auth.auth_user import LoginUser
|
||||
from api.application.usecase.auth.create_user import CreateUser
|
||||
from api.domain.user.repository import UserRepository
|
||||
from api.infrastructure.dependencies.adapters import (create_engine,
|
||||
create_session_maker,
|
||||
new_session,
|
||||
new_unit_of_work)
|
||||
from api.infrastructure.dependencies.configs import app_settings
|
||||
from api.infrastructure.dependencies.protocols import (get_date_time_provider,
|
||||
get_jwt_token_processor,
|
||||
get_password_hasher,
|
||||
get_user_login)
|
||||
from api.infrastructure.auth.jwt_settings import JwtSettings
|
||||
from api.infrastructure.dependencies.adapters import (
|
||||
create_engine,
|
||||
create_session_maker,
|
||||
new_session,
|
||||
new_unit_of_work,
|
||||
)
|
||||
from api.infrastructure.dependencies.configs import (
|
||||
app_settings,
|
||||
get_db_settings,
|
||||
get_jwt_settings,
|
||||
)
|
||||
from api.infrastructure.dependencies.protocols import (
|
||||
get_date_time_provider,
|
||||
get_jwt_token_processor,
|
||||
get_password_hasher,
|
||||
get_user_login,
|
||||
)
|
||||
from api.infrastructure.dependencies.repositories import get_user_repository
|
||||
from api.infrastructure.dependencies.usecases import provide_create_user
|
||||
from api.infrastructure.persistence.db_setings import DBSettings
|
||||
from api.infrastructure.settings import Settings
|
||||
|
||||
|
||||
def init_dependencies(app: FastAPI) -> None:
|
||||
app.dependency_overrides[DBSettings] = get_db_settings
|
||||
app.dependency_overrides[JwtSettings] = get_jwt_settings
|
||||
app.dependency_overrides[Settings] = app_settings
|
||||
|
||||
app.dependency_overrides[AsyncEngine] = create_engine
|
||||
|
51
api/app_builder/error_handlers.py
Normal file
51
api/app_builder/error_handlers.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from api.domain.error import DomainValidationError
|
||||
from api.domain.user.error import (UserAlreadyExistsError,
|
||||
UserInvalidCredentialsError,
|
||||
UserIsNotAuthorizedError)
|
||||
|
||||
|
||||
async def validation_error_exc_handler(
|
||||
request: Request, exc: DomainValidationError
|
||||
) -> JSONResponse:
|
||||
return JSONResponse(status_code=400, content={"detail": exc.message})
|
||||
|
||||
|
||||
async def user_authentication_error_exc_handler(
|
||||
request: Request, exc: UserIsNotAuthorizedError
|
||||
) -> JSONResponse:
|
||||
return JSONResponse(
|
||||
status_code=401,
|
||||
content={"detail": exc.message},
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
|
||||
|
||||
async def user_already_exist_error_exc_handler(
|
||||
request: Request, exc: UserAlreadyExistsError
|
||||
) -> JSONResponse:
|
||||
return JSONResponse(status_code=409, content={"detail": exc.message})
|
||||
|
||||
|
||||
async def user_invalid_credentials_error_exc_handler(
|
||||
request: Request, exc: UserInvalidCredentialsError
|
||||
) -> JSONResponse:
|
||||
return JSONResponse(status_code=401, content={"detail": exc.message})
|
||||
|
||||
|
||||
def init_exc_handlers(app: FastAPI) -> None:
|
||||
app.add_exception_handler(
|
||||
DomainValidationError,
|
||||
validation_error_exc_handler,
|
||||
)
|
||||
app.add_exception_handler(
|
||||
UserIsNotAuthorizedError, user_authentication_error_exc_handler
|
||||
)
|
||||
app.add_exception_handler(
|
||||
UserAlreadyExistsError, user_already_exist_error_exc_handler
|
||||
)
|
||||
app.add_exception_handler(
|
||||
UserInvalidCredentialsError, user_invalid_credentials_error_exc_handler
|
||||
)
|
@@ -5,8 +5,15 @@ from fastapi import FastAPI
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine
|
||||
|
||||
from api.app_builder.dependencies import init_dependencies
|
||||
from api.app_builder.error_handlers import init_exc_handlers
|
||||
from api.infrastructure.auth.jwt_settings import JwtSettings
|
||||
from api.infrastructure.dependencies.adapters import create_engine
|
||||
from api.infrastructure.dependencies.configs import app_settings
|
||||
from api.infrastructure.dependencies.configs import (
|
||||
app_settings,
|
||||
get_db_settings,
|
||||
get_jwt_settings,
|
||||
)
|
||||
from api.infrastructure.persistence.db_setings import DBSettings
|
||||
from api.infrastructure.persistence.models import Base
|
||||
from api.infrastructure.settings import Settings
|
||||
|
||||
@@ -16,9 +23,16 @@ from .routers import init_routers
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI) -> AsyncGenerator:
|
||||
print("init lifespan")
|
||||
app.dependency_overrides[DBSettings] = get_db_settings
|
||||
app.dependency_overrides[JwtSettings] = get_jwt_settings
|
||||
app.dependency_overrides[Settings] = app_settings
|
||||
app.dependency_overrides[AsyncEngine] = create_engine
|
||||
engine = app.dependency_overrides[AsyncEngine](app.dependency_overrides[Settings]())
|
||||
engine = app.dependency_overrides[AsyncEngine](
|
||||
app.dependency_overrides[Settings](
|
||||
app.dependency_overrides[DBSettings](),
|
||||
app.dependency_overrides[JwtSettings](),
|
||||
),
|
||||
)
|
||||
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.drop_all)
|
||||
@@ -32,5 +46,6 @@ def app_factory() -> FastAPI:
|
||||
)
|
||||
init_dependencies(app)
|
||||
init_routers(app)
|
||||
init_exc_handlers(app)
|
||||
|
||||
return app
|
||||
|
Reference in New Issue
Block a user