from fastapi import Depends, HTTPException, Security, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from sqlalchemy.ext.asyncio import AsyncSession from proxy_pool.accounts.models import User from proxy_pool.accounts.service import verify_api_key from proxy_pool.common.dependencies import get_db security = HTTPBearer() async def get_current_user( credentials: HTTPAuthorizationCredentials = Security(security), db: AsyncSession = Depends(get_db), ) -> User: """FastAPI dependency that resolves an API key to a User. Usage in routes: @router.get("/something") async def something(user: User = Depends(get_current_user)): """ user = await verify_api_key(db, credentials.credentials) if user is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or expired API key", headers={"WWW-Authenticate": "Bearer"}, ) return user