"""Authentication related API routes.""" from typing import Any, Dict from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import HTTPAuthorizationCredentials from chatfast.services.auth import ( AUTH_SCHEME, LoginRequest, RegisterRequest, UserInfo, create_auth_token, get_current_user, login_user, register_user, resolve_token, revoke_token, ) router = APIRouter(prefix="/api/auth", tags=["auth"]) @router.post("/register") async def api_register(payload: RegisterRequest) -> Dict[str, Any]: user = await register_user(payload.username, payload.password) token_data = await create_auth_token(user["id"]) return {"user": user, "token": token_data["token"], "expires_at": token_data["expires_at"]} @router.post("/login") async def api_login(payload: LoginRequest) -> Dict[str, Any]: user = await login_user(payload.username, payload.password) token_data = await create_auth_token(user["id"]) return {"user": user, "token": token_data["token"], "expires_at": token_data["expires_at"]} @router.post("/logout") async def api_logout( credentials: HTTPAuthorizationCredentials = Depends(AUTH_SCHEME), ) -> Dict[str, str]: if not credentials: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="未登录") user = await resolve_token(credentials.credentials) if not user: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="登录已失效") await revoke_token(credentials.credentials) return {"status": "ok"} @router.get("/me") async def api_me(current_user: UserInfo = Depends(get_current_user)) -> UserInfo: return current_user