# 密码预设 — 设计规格 > ⚠️ **已归档** — 2026-05-22 > 本文档引用的文件结构已过时:`server/database.py` 已拆分为 `server/domain/models/`;PHP 前端 (`servers.php`/`settings.php`) 已迁移到 Tailwind CSS v4 + Alpine.js (`web/app/servers.html`/`settings.html`)。功能已实现,保留本文档供历史参考。 ## 背景 多台服务器的 SSH 密码通常相同,每次新建服务器时重复输入密码效率低。提供密码预设列表,新建服务器时下拉选择即可。 ## 核心变更 ### 数据模型 **新增 PasswordPreset 表:** ```python class PasswordPreset(Base): __tablename__ = "password_presets" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False, comment="预设名称") encrypted_pw = Column(String(500), nullable=False, comment="加密后的密码") created_at = Column(DateTime, default=datetime.datetime.utcnow) ``` 加密方式与 Server.password 一致(Fernet),复用 `encrypt_value` / `decrypt_value`。 ### API 端点 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/servers/password-presets` | 列表,只返回 id + name(不含密码) | | POST | `/api/servers/password-presets` | 创建 {name, password},加密存储 | | DELETE | `/api/servers/password-presets/{id}` | 删除 | | POST | `/api/servers/password-presets/{id}/reveal` | 解密返回明文(需 API 认证) | ### 前端改动 **servers.php 密码字段区:** ``` 密码预设: [选择预设 ▾] ← 新建 ├─ 生产环境 — 123abc ├─ 测试环境 — test456 └─ 自定义(手动输入) SSH密码: [自动填充 ████████] 👁 ← 选预设后自动填入,也可手动改 ``` **settings.php 新增「密码预设管理」tab/区:** ``` ┌─ 密码预设管理 ────────────────────────────────┐ │ 名称 操作 │ │ 生产环境密码 [👁 查看] [🗑 删除] │ │ 测试环境密码 [👁 查看] [🗑 删除] │ │ [+ 添加] 名称: [____] 密码: [____] [保存] │ └────────────────────────────────────────────────┘ ``` ### 涉及文件 | 文件 | 改动 | |------|------| | `server/database.py` | PasswordPreset 模型 | | `server/api/servers.py` | 4 个预设端点 | | `web/servers.php` | 预设下拉 + JS 联动 | | `web/settings.php` | 预设管理面板 | | `docs/CHANGELOG.md` | 追加记录 | 预估:5 文件,~200 行。 ## 规格自检 - [x] 无占位符/TODO - [x] 加密/解密复用现有 infrastructure(Fernet + encrypt_value/decrypt_value) - [x] 列表 API 不返回密码明文,reveal 端点需单独调用 - [x] 范围聚焦:仅密码预设,不涉及其他