新增获取用户信息 /api/user/me
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import Literal, Union, Optional
|
from typing import Literal, Union, Optional
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timezone
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
class ResponseModel(BaseModel):
|
class ResponseModel(BaseModel):
|
||||||
@@ -15,15 +15,34 @@ class TokenModel(BaseModel):
|
|||||||
refresh_expires: datetime = Field(default=None, description="刷新令牌的过期时间")
|
refresh_expires: datetime = Field(default=None, description="刷新令牌的过期时间")
|
||||||
refresh_token: str = Field(default=None, description="刷新令牌")
|
refresh_token: str = Field(default=None, description="刷新令牌")
|
||||||
|
|
||||||
class userModel(ResponseModel):
|
class groupModel(BaseModel):
|
||||||
id: str = Field(default=None, description="用户ID")
|
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="用户名")
|
username: str = Field(default=None, description="用户名")
|
||||||
email: Optional[str] = Field(default=None, description="用户邮箱")
|
nickname: str = Field(default=None, description="用户昵称")
|
||||||
avatar: Optional[str] = Field(default=None, description="用户头像URL")
|
status: int = Field(default=0, description="用户状态")
|
||||||
is_active: bool = Field(default=True, description="用户是否激活")
|
avatar: Literal['default', 'gravatar', 'file'] = Field(default='default', description="头像类型")
|
||||||
is_admin: bool = Field(default=False, description="用户是否为管理员")
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="用户创建时间")
|
||||||
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="账户创建时间")
|
preferred_theme: str = Field(default="#607D8B", description="用户首选主题")
|
||||||
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), 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):
|
class SiteConfigModel(ResponseModel):
|
||||||
title: str = Field(default="DiskNext", description="网站标题")
|
title: str = Field(default="DiskNext", description="网站标题")
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
from fastapi.security import OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
from middleware.auth import SignRequired
|
from middleware.auth import AuthRequired, SignRequired
|
||||||
from models.response import ResponseModel, TokenModel
|
import models
|
||||||
|
from models.response import ResponseModel, TokenModel, userModel, groupModel
|
||||||
|
from deprecated import deprecated
|
||||||
from pkg.log import log
|
from pkg.log import log
|
||||||
|
import service.user.login
|
||||||
|
|
||||||
user_router = APIRouter(
|
user_router = APIRouter(
|
||||||
prefix="/user",
|
prefix="/user",
|
||||||
@@ -24,9 +27,6 @@ user_settings_router = APIRouter(
|
|||||||
async def router_user_session(
|
async def router_user_session(
|
||||||
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
||||||
) -> TokenModel:
|
) -> TokenModel:
|
||||||
|
|
||||||
import service.user.login
|
|
||||||
|
|
||||||
username = form_data.username
|
username = form_data.username
|
||||||
password = form_data.password
|
password = form_data.password
|
||||||
|
|
||||||
@@ -111,6 +111,10 @@ def router_user_qq() -> ResponseModel:
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@deprecated(
|
||||||
|
version="0.0.1",
|
||||||
|
reason="邮件中带链接的激活易使得被收件服务器误判为垃圾邮件,新版更换为验证码方式"
|
||||||
|
)
|
||||||
@user_router.get(
|
@user_router.get(
|
||||||
path='/activate/{id}',
|
path='/activate/{id}',
|
||||||
summary='邮件激活',
|
summary='邮件激活',
|
||||||
@@ -205,16 +209,42 @@ def router_user_avatar(id: str, size: int = 128) -> ResponseModel:
|
|||||||
path='/me',
|
path='/me',
|
||||||
summary='获取用户信息',
|
summary='获取用户信息',
|
||||||
description='Get user information.',
|
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.
|
Get user information.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: A dictionary containing user information.
|
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(
|
@user_router.get(
|
||||||
path='/storage',
|
path='/storage',
|
||||||
|
|||||||
Reference in New Issue
Block a user