4a93bd1c44
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, Form, Header
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.response import success_response
|
|
from app.db import get_db_session
|
|
from app.schemas.auth import LoginRequest, RegisterRequest
|
|
from app.services.auth_service import AuthService
|
|
|
|
router = APIRouter(prefix="/auth", tags=["auth"])
|
|
ROUTE_PERMISSION_SCOPE = "auth"
|
|
ROUTE_PERMISSION_ACTIONS = {
|
|
"register": "auth:register",
|
|
"login": "auth:login",
|
|
"me": "auth:me:get",
|
|
"update_me": "auth:me:update",
|
|
"logout": "auth:logout",
|
|
"seed_admin": "auth:seed_admin",
|
|
}
|
|
|
|
|
|
def get_auth_service(db: Session = Depends(get_db_session)) -> AuthService:
|
|
return AuthService(db)
|
|
|
|
|
|
@router.post("/register")
|
|
def register(payload: RegisterRequest, auth_service: AuthService = Depends(get_auth_service)):
|
|
return success_response(auth_service.register(payload.username, payload.password, payload.display_name))
|
|
|
|
|
|
@router.post("/login")
|
|
def login(payload: LoginRequest, auth_service: AuthService = Depends(get_auth_service)):
|
|
return success_response(auth_service.login(payload.account, payload.password))
|
|
|
|
|
|
@router.get("/me")
|
|
def get_current_user(
|
|
authorization: Optional[str] = Header(default=None),
|
|
auth_service: AuthService = Depends(get_auth_service),
|
|
):
|
|
return success_response(auth_service.get_current_user(authorization))
|
|
|
|
|
|
@router.put("/me")
|
|
def update_current_user(
|
|
display_name: str = Form(...),
|
|
password: Optional[str] = Form(default=None),
|
|
authorization: Optional[str] = Header(default=None),
|
|
auth_service: AuthService = Depends(get_auth_service),
|
|
):
|
|
return success_response(auth_service.update_current_user(authorization, display_name, password))
|
|
|
|
|
|
@router.post("/logout")
|
|
def logout():
|
|
return success_response(True)
|
|
|
|
|
|
@router.post("/seed-admin")
|
|
def seed_admin(auth_service: AuthService = Depends(get_auth_service)):
|
|
return success_response(auth_service.seed_default_admin())
|