86 lines
2.3 KiB
Python
86 lines
2.3 KiB
Python
"""
|
|
OAuth2 相关 Schema
|
|
|
|
定义 OAuth2 认证流程的数据结构。
|
|
"""
|
|
|
|
from typing import Annotated
|
|
|
|
from pydantic import Field
|
|
|
|
from app.schemas.base import BaseSchema
|
|
|
|
|
|
class OAuth2AuthorizeResponse(BaseSchema):
|
|
"""OAuth2 授权 URL 响应"""
|
|
|
|
authorize_url: str = Field(description="OAuth2 授权页面 URL")
|
|
state: str = Field(description="防 CSRF 状态码")
|
|
|
|
|
|
class OAuth2CallbackRequest(BaseSchema):
|
|
"""OAuth2 回调请求"""
|
|
|
|
code: Annotated[
|
|
str,
|
|
Field(
|
|
min_length=1,
|
|
description="授权码",
|
|
),
|
|
]
|
|
state: Annotated[
|
|
str,
|
|
Field(
|
|
min_length=1,
|
|
description="状态码(用于验证请求合法性)",
|
|
),
|
|
]
|
|
|
|
|
|
class OAuth2TokenData(BaseSchema):
|
|
"""OAuth2 令牌数据(从 OAuth 提供商获取)"""
|
|
|
|
access_token: str
|
|
token_type: str = "Bearer"
|
|
expires_in: int | None = None
|
|
refresh_token: str | None = None
|
|
scope: str | None = None
|
|
|
|
|
|
class OAuth2UserInfo(BaseSchema):
|
|
"""
|
|
OAuth2 用户信息(从 Linux.do 获取)
|
|
|
|
示例响应:
|
|
{
|
|
"id": 1,
|
|
"username": "neo",
|
|
"name": "Neo",
|
|
"active": true,
|
|
"trust_level": 4,
|
|
"email": "u1@linux.do",
|
|
"avatar_url": "https://linux.do/xxxx",
|
|
"silenced": false
|
|
}
|
|
"""
|
|
|
|
id: int | str = Field(description="用户 ID")
|
|
username: str = Field(description="用户名")
|
|
name: str | None = Field(default=None, description="显示名称")
|
|
email: str | None = Field(default=None, description="邮箱")
|
|
avatar_url: str | None = Field(default=None, description="头像 URL")
|
|
active: bool = Field(default=True, description="是否激活")
|
|
trust_level: int | None = Field(default=None, description="信任等级")
|
|
silenced: bool = Field(default=False, description="是否被禁言")
|
|
|
|
|
|
class OAuth2LoginResponse(BaseSchema):
|
|
"""OAuth2 登录响应"""
|
|
|
|
access_token: str = Field(description="JWT 访问令牌")
|
|
refresh_token: str = Field(description="JWT 刷新令牌")
|
|
token_type: str = Field(default="Bearer", description="令牌类型")
|
|
expires_in: int = Field(description="访问令牌过期时间(秒)")
|
|
is_new_user: bool = Field(description="是否为新注册用户")
|
|
|