Files
2026-04-01 16:05:57 +08:00

66 lines
2.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PerToolBox Server - 用户路由
Copyright (C) 2024 Sea Network Technology Studio
Author: Canglan <admin@sea-studio.top>
License: AGPL v3
"""
from fastapi import APIRouter, HTTPException, Request
from ...dependencies import CurrentUserDependency, DbDependency
from ...models import User
from ...schemas import UserResponse, UserUpdateRequest
from ...utils.security import hash_password, verify_password
from ...utils.logger import logger
from ...middleware.rate_limit import rate_limit
router = APIRouter(prefix="/api/v1/user", tags=["user"])
@router.get("/profile", response_model=UserResponse)
@rate_limit(requests=50, period=60)
async def get_profile(
request: Request, # 添加 request 参数
current_user: CurrentUserDependency
):
"""获取当前用户信息"""
return current_user
@router.put("/profile", response_model=UserResponse)
@rate_limit(requests=20, period=60)
async def update_profile(
request: Request, # 添加 request 参数
req: UserUpdateRequest,
current_user: CurrentUserDependency,
db: DbDependency
):
"""更新用户信息"""
if req.username:
current_user.username = req.username
if req.avatar:
current_user.avatar = req.avatar
db.commit()
db.refresh(current_user)
logger.info(f"用户信息更新: {current_user.id}")
return current_user
@router.post("/change-password")
@rate_limit(requests=10, period=60)
async def change_password(
request: Request, # 添加 request 参数
old_password: str,
new_password: str,
current_user: CurrentUserDependency,
db: DbDependency
):
"""修改密码"""
if not verify_password(old_password, current_user.password_hash):
raise HTTPException(status_code=400, detail="原密码错误")
current_user.password_hash = hash_password(new_password)
db.commit()
logger.info(f"密码修改: {current_user.id}")
return {"success": True, "message": "密码已修改"}