feat: auth & admin
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
"""Auth endpoints: login, refresh (rotation), logout, and current-user."""
|
||||
|
||||
from fastapi import APIRouter, status
|
||||
|
||||
from app.api.deps import AuthServiceDep, CurrentUser
|
||||
from app.api.schemas.auth import LoginRequest, RefreshRequest, TokenResponse
|
||||
from app.api.schemas.user import UserResponse
|
||||
from app.domain.tokens import TokenPair
|
||||
|
||||
router = APIRouter(prefix="/auth", tags=["auth"])
|
||||
|
||||
|
||||
def _to_token_response(pair: TokenPair) -> TokenResponse:
|
||||
return TokenResponse(
|
||||
access_token=pair.access.encoded,
|
||||
refresh_token=pair.refresh.encoded,
|
||||
)
|
||||
|
||||
|
||||
@router.post("/login", response_model=TokenResponse)
|
||||
async def login(body: LoginRequest, auth: AuthServiceDep) -> TokenResponse:
|
||||
pair = await auth.login(body.username, body.password)
|
||||
return _to_token_response(pair)
|
||||
|
||||
|
||||
@router.post("/refresh", response_model=TokenResponse)
|
||||
async def refresh(body: RefreshRequest, auth: AuthServiceDep) -> TokenResponse:
|
||||
pair = await auth.refresh(body.refresh_token)
|
||||
return _to_token_response(pair)
|
||||
|
||||
|
||||
@router.post("/logout", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def logout(body: RefreshRequest, auth: AuthServiceDep) -> None:
|
||||
await auth.logout(body.refresh_token)
|
||||
|
||||
|
||||
@router.get("/me", response_model=UserResponse)
|
||||
async def me(user: CurrentUser) -> UserResponse:
|
||||
return UserResponse.from_entity(user)
|
||||
Reference in New Issue
Block a user