2.9 KiB
2.9 KiB
密码预设 — 设计规格
⚠️ 已归档 — 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 表:
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 行。
规格自检
- 无占位符/TODO
- 加密/解密复用现有 infrastructure(Fernet + encrypt_value/decrypt_value)
- 列表 API 不返回密码明文,reveal 端点需单独调用
- 范围聚焦:仅密码预设,不涉及其他