Files
vps-manager/app/schemas/account.py
T
gouki d711ad5827 feat(vault): 凭据库(密码+2FA 动态码)与 MASTER_KEY 密钥托管
credentials 表为登录凭据唯一事实源(站点×登录方式,含 oauth/2FA);账号密码读写重定向凭据层并幂等迁移历史数据;TOTP 按 RFC6238 零依赖自实现,绑定需当前动态码校验;Key Escrow 防 MASTER_KEY 遗失;前端新增凭据库视图与账号 2FA 联动。64 pytest + 16 浏览器端到端验证通过。
2026-09-05 15:54:41 +00:00

46 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""平台账号 Schema
凭证语义约定:
- login_password / api_configCreate 时传入即加密存储;Update 时 None 表示不修改。
- login_password 的唯一事实源在 credentials 表(账号通过 credential_id 关联),
本 schema 字段仅为录入入口,服务层重定向写入凭据。
- Read 永不返回凭证明文/密文,只给布尔标记(has_login_password / has_api_config / has_otp)。
"""
from datetime import datetime
from typing import Optional
from sqlmodel import SQLModel
class AccountBase(SQLModel):
name: str
platform: Optional[str] = None
remark: Optional[str] = None
login_user: Optional[str] = None
class AccountCreate(AccountBase):
login_password: Optional[str] = None # 登录密码(明文传入,加密存储)
api_config: Optional[str] = None # API 配置 JSON 字符串(加密存储,供 SDK 同步)
class AccountUpdate(SQLModel):
name: Optional[str] = None
platform: Optional[str] = None
remark: Optional[str] = None
login_user: Optional[str] = None
login_password: Optional[str] = None # None = 不修改
api_config: Optional[str] = None # None = 不修改
class AccountRead(AccountBase):
id: int
created_at: datetime
asset_count: int = 0 # 引用该账号的资产数(列表接口填充)
has_login_password: bool = False
has_api_config: bool = False
credential_id: Optional[int] = None # 关联的登录凭据(密码唯一事实源)
has_otp: bool = False # 关联凭据是否绑定了 2FA
last_synced_at: Optional[datetime] = None