新增获取用户信息 /api/user/me
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Literal, Union, Optional
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from datetime import datetime, timezone
|
||||
from uuid import uuid4
|
||||
|
||||
class ResponseModel(BaseModel):
|
||||
@@ -14,16 +14,35 @@ class TokenModel(BaseModel):
|
||||
access_token: str = Field(default=None, description="访问令牌")
|
||||
refresh_expires: datetime = Field(default=None, description="刷新令牌的过期时间")
|
||||
refresh_token: str = Field(default=None, description="刷新令牌")
|
||||
|
||||
class userModel(ResponseModel):
|
||||
id: str = Field(default=None, description="用户ID")
|
||||
|
||||
class groupModel(BaseModel):
|
||||
id: int = Field(default=None, description="用户组ID")
|
||||
name: str = Field(default=None, description="用户组名称")
|
||||
allowShare: bool = Field(default=False, description="是否允许分享")
|
||||
allowRomoteDownload: bool = Field(default=False, description="是否允许离线下载")
|
||||
allowArchiveDownload: bool = Field(default=False, description="是否允许打包下载")
|
||||
shareFree: bool = Field(default=False, description="是否允许免积分下载分享")
|
||||
shareDownload: bool = Field(default=False, description="是否允许下载分享")
|
||||
compress: bool = Field(default=False)
|
||||
webdav: bool = Field(default=False, description="是否允许WebDAV")
|
||||
allowWebDAVProxy: bool = Field(default=False, description="是否允许WebDAV代理")
|
||||
relocate: bool = Field(default=False, description="是否使用重定向的下载链接")
|
||||
sourceBatch: int = Field(default=0)
|
||||
selectNode: bool = Field(default=False, description="是否允许选择离线下载节点")
|
||||
advanceDelete: bool = Field(default=False, description="是否允许高级删除")
|
||||
|
||||
class userModel(BaseModel):
|
||||
id: int = Field(default=None, description="用户ID")
|
||||
username: str = Field(default=None, description="用户名")
|
||||
email: Optional[str] = Field(default=None, description="用户邮箱")
|
||||
avatar: Optional[str] = Field(default=None, description="用户头像URL")
|
||||
is_active: bool = Field(default=True, description="用户是否激活")
|
||||
is_admin: bool = Field(default=False, description="用户是否为管理员")
|
||||
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="账户创建时间")
|
||||
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="账户更新时间")
|
||||
nickname: str = Field(default=None, description="用户昵称")
|
||||
status: int = Field(default=0, description="用户状态")
|
||||
avatar: Literal['default', 'gravatar', 'file'] = Field(default='default', description="头像类型")
|
||||
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="用户创建时间")
|
||||
preferred_theme: str = Field(default="#607D8B", description="用户首选主题")
|
||||
score: int = Field(default=0, description="用户积分")
|
||||
anonymous: bool = Field(default=False, description="是否为匿名用户")
|
||||
group: groupModel = Field(default_factory=None, description="用户所属用户组")
|
||||
tags: list = Field(default_factory=list, description="用户标签列表")
|
||||
|
||||
class SiteConfigModel(ResponseModel):
|
||||
title: str = Field(default="DiskNext", description="网站标题")
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
from typing import Annotated
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from middleware.auth import SignRequired
|
||||
from models.response import ResponseModel, TokenModel
|
||||
from middleware.auth import AuthRequired, SignRequired
|
||||
import models
|
||||
from models.response import ResponseModel, TokenModel, userModel, groupModel
|
||||
from deprecated import deprecated
|
||||
from pkg.log import log
|
||||
import service.user.login
|
||||
|
||||
user_router = APIRouter(
|
||||
prefix="/user",
|
||||
@@ -24,9 +27,6 @@ user_settings_router = APIRouter(
|
||||
async def router_user_session(
|
||||
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
||||
) -> TokenModel:
|
||||
|
||||
import service.user.login
|
||||
|
||||
username = form_data.username
|
||||
password = form_data.password
|
||||
|
||||
@@ -111,6 +111,10 @@ def router_user_qq() -> ResponseModel:
|
||||
"""
|
||||
pass
|
||||
|
||||
@deprecated(
|
||||
version="0.0.1",
|
||||
reason="邮件中带链接的激活易使得被收件服务器误判为垃圾邮件,新版更换为验证码方式"
|
||||
)
|
||||
@user_router.get(
|
||||
path='/activate/{id}',
|
||||
summary='邮件激活',
|
||||
@@ -205,16 +209,42 @@ def router_user_avatar(id: str, size: int = 128) -> ResponseModel:
|
||||
path='/me',
|
||||
summary='获取用户信息',
|
||||
description='Get user information.',
|
||||
dependencies=[Depends(SignRequired)],
|
||||
dependencies=[Depends(dependency=AuthRequired)],
|
||||
response_model=ResponseModel,
|
||||
)
|
||||
def router_user_me() -> ResponseModel:
|
||||
async def router_user_me(
|
||||
user: Annotated[models.user.User, Depends(AuthRequired)],
|
||||
) -> ResponseModel:
|
||||
"""
|
||||
Get user information.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing user information.
|
||||
"""
|
||||
pass
|
||||
|
||||
group = await models.Group.get(id=user.group_id)
|
||||
|
||||
|
||||
user_group = groupModel(
|
||||
id=group.id,
|
||||
name=group.name,
|
||||
allowShare=group.share_enabled,
|
||||
)
|
||||
|
||||
users = userModel(
|
||||
id=user.id,
|
||||
username=user.email,
|
||||
nickname=user.nick,
|
||||
status=user.status,
|
||||
created_at=user.created_at,
|
||||
score=user.score,
|
||||
group=user_group,
|
||||
).model_dump()
|
||||
|
||||
|
||||
return ResponseModel(
|
||||
data=users
|
||||
)
|
||||
|
||||
@user_router.get(
|
||||
path='/storage',
|
||||
|
||||
Reference in New Issue
Block a user