88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
from typing import Optional
|
|
from pydantic import BaseModel, Field
|
|
|
|
# 小米登录请求
|
|
class XiaomiLoginRequest(BaseModel):
|
|
system_user_id: int = Field(..., description="系统用户ID")
|
|
username: str = Field(..., description="小米账号(手机号/邮箱)")
|
|
password: str = Field(..., description="密码")
|
|
server: str = Field(default="cn", description="服务器区域")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"system_user_id": 1000000001,
|
|
"username": "13800138000",
|
|
"password": "your_password",
|
|
"server": "cn"
|
|
}
|
|
}
|
|
|
|
# 验证码提交请求
|
|
class CaptchaSubmitRequest(BaseModel):
|
|
session_id: str = Field(..., description="会话ID")
|
|
captcha_code: str = Field(..., description="验证码")
|
|
|
|
# 双因素认证请求
|
|
class TwoFactorAuthRequest(BaseModel):
|
|
session_id: str = Field(..., description="会话ID")
|
|
ticket: str = Field(..., description="2FA验证码")
|
|
|
|
# 手动输入凭证请求
|
|
class ManualCredentialsRequest(BaseModel):
|
|
system_user_id: int = Field(..., description="系统用户ID")
|
|
xiaomi_username: str = Field(..., description="小米账号")
|
|
ssecurity: str = Field(..., description="_ssecurity参数")
|
|
userId: str = Field(..., description="userId参数")
|
|
cUserId: str = Field(..., description="_cUserId参数")
|
|
serviceToken: str = Field(..., description="serviceToken参数")
|
|
server: str = Field(default="cn", description="服务器区域")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"system_user_id": 1000000001,
|
|
"xiaomi_username": "13800138000",
|
|
"ssecurity": "R9egnuetTRF9sMP2jy9yJQ==",
|
|
"userId": "3128533266",
|
|
"cUserId": "5suobuxuMCJG7d6Wtp3I28D30l0",
|
|
"serviceToken": "2ib8u26oDE7OoCSawL3M5rvrIR7koVw...",
|
|
"server": "cn"
|
|
}
|
|
}
|
|
|
|
# 登录步骤响应
|
|
class LoginStepResponse(BaseModel):
|
|
session_id: str = Field(..., description="会话ID")
|
|
status: str = Field(..., description="状态: success, need_captcha, need_2fa, error")
|
|
message: str = Field(..., description="提示消息")
|
|
data: Optional[dict] = Field(None, description="额外数据")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"session_id": "sess_abc123",
|
|
"status": "need_captcha",
|
|
"message": "需要验证码",
|
|
"data": {
|
|
"captcha_url": "/api/v1/xiaomi/captcha/sess_abc123"
|
|
}
|
|
}
|
|
}
|
|
|
|
# 绑定状态响应
|
|
class BindingStatusResponse(BaseModel):
|
|
is_bound: bool = Field(..., description="是否已绑定")
|
|
username: Optional[str] = Field(None, description="绑定的小米账号")
|
|
bound_at: Optional[str] = Field(None, description="绑定时间")
|
|
|
|
# 小米设备信息
|
|
class XiaomiDeviceInfo(BaseModel):
|
|
name: str
|
|
did: str
|
|
token: Optional[str] = None
|
|
model: Optional[str] = None
|
|
mac: Optional[str] = None
|
|
localip: Optional[str] = None
|
|
|