Fix auth dependency

This commit is contained in:
2025-05-11 11:18:51 +02:00
parent 388200fd52
commit 3dfd03688b
4 changed files with 23 additions and 8 deletions

View File

@ -21,7 +21,7 @@ LOG = logging.getLogger(__name__)
def create_router(dependencies: AdminDependencies) -> APIRouter: def create_router(dependencies: AdminDependencies) -> APIRouter:
"""Create clients router.""" """Create clients router."""
app = APIRouter() app = APIRouter(dependencies=[Depends(dependencies.get_current_active_user)])
@app.get("/clients/") @app.get("/clients/")
async def get_clients( async def get_clients(

View File

@ -19,7 +19,7 @@ LOG = logging.getLogger(__name__)
def create_router(dependencies: AdminDependencies) -> APIRouter: def create_router(dependencies: AdminDependencies) -> APIRouter:
"""Create secrets router.""" """Create secrets router."""
app = APIRouter() app = APIRouter(dependencies=[Depends(dependencies.get_current_active_user)])
@app.get("/secrets/") @app.get("/secrets/")
async def get_secret_names( async def get_secret_names(

View File

@ -55,7 +55,9 @@ def create_router(dependencies: BaseDependencies) -> APIRouter:
raise HTTPException(status_code=400, detail="Inactive or disabled user") raise HTTPException(status_code=400, detail="Inactive or disabled user")
return current_user return current_user
async def get_admin_backend(session: Annotated[Session, Depends(dependencies.get_db_session)]): async def get_admin_backend(
session: Annotated[Session, Depends(dependencies.get_db_session)]
):
"""Get admin backend API.""" """Get admin backend API."""
password_db = session.exec(select(PasswordDB).where(PasswordDB.id == 1)).first() password_db = session.exec(select(PasswordDB).where(PasswordDB.id == 1)).first()
if not password_db: if not password_db:
@ -65,11 +67,13 @@ def create_router(dependencies: BaseDependencies) -> APIRouter:
admin = AdminBackend(dependencies.settings, password_db.encrypted_password) admin = AdminBackend(dependencies.settings, password_db.encrypted_password)
yield admin yield admin
app = APIRouter( app = APIRouter(prefix=f"/api/{API_VERSION}")
prefix=f"/api/{API_VERSION}", dependencies=[Depends(get_current_active_user)]
endpoint_deps = AdminDependencies.create(
dependencies, get_admin_backend, get_current_active_user
) )
endpoint_deps = AdminDependencies.create(dependencies, get_admin_backend) LOG.debug("Registering sub-routers")
app.include_router(auth.create_router(endpoint_deps)) app.include_router(auth.create_router(endpoint_deps))
app.include_router(clients.create_router(endpoint_deps)) app.include_router(clients.create_router(endpoint_deps))

View File

@ -2,9 +2,10 @@
from collections.abc import AsyncGenerator, Callable, Generator from collections.abc import AsyncGenerator, Callable, Generator
from dataclasses import dataclass from dataclasses import dataclass
from typing import Self from typing import Awaitable, Self
from sqlmodel import Session from sqlmodel import Session
from sshecret_admin.auth import User
from sshecret_admin.services import AdminBackend from sshecret_admin.services import AdminBackend
from sshecret_admin.core.settings import AdminServerSettings from sshecret_admin.core.settings import AdminServerSettings
@ -13,6 +14,8 @@ DBSessionDep = Callable[[], Generator[Session, None, None]]
AdminDep = Callable[[Session], AsyncGenerator[AdminBackend, None]] AdminDep = Callable[[Session], AsyncGenerator[AdminBackend, None]]
GetUserDep = Callable[[User], Awaitable[User]]
@dataclass @dataclass
class BaseDependencies: class BaseDependencies:
@ -21,17 +24,25 @@ class BaseDependencies:
settings: AdminServerSettings settings: AdminServerSettings
get_db_session: DBSessionDep get_db_session: DBSessionDep
@dataclass @dataclass
class AdminDependencies(BaseDependencies): class AdminDependencies(BaseDependencies):
"""Dependency class with admin.""" """Dependency class with admin."""
get_admin_backend: AdminDep get_admin_backend: AdminDep
get_current_active_user: GetUserDep
@classmethod @classmethod
def create(cls, deps: BaseDependencies, get_admin_backend: AdminDep) -> Self: def create(
cls,
deps: BaseDependencies,
get_admin_backend: AdminDep,
get_current_active_user: GetUserDep,
) -> Self:
"""Create from base dependencies.""" """Create from base dependencies."""
return cls( return cls(
settings=deps.settings, settings=deps.settings,
get_db_session=deps.get_db_session, get_db_session=deps.get_db_session,
get_admin_backend=get_admin_backend, get_admin_backend=get_admin_backend,
get_current_active_user=get_current_active_user,
) )