docs: 归档任务 #94
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# 94 Client:增加认证更新配置与启动自动检查
|
||||
|
||||
- 类型:需求
|
||||
- 父级大工单:#1
|
||||
- 所属 MVP / 版本:MVP 后续 / 在线更新
|
||||
- 状态:已完成
|
||||
- 日期:2026-08-10
|
||||
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/94
|
||||
|
||||
## 背景与目标
|
||||
|
||||
#93 已支持在线更新,但发布服务器需要 Basic Authentication。此任务增加更新配置
|
||||
保存和启动自动检查,同时保证密码不进入源码、Git、SQLite、日志、工单和文档。
|
||||
|
||||
## 最终方案
|
||||
|
||||
- 设置页保留清单 URL、账号、密码三个输入框,增加“保存”按钮。
|
||||
- URL 和账号保存到现有非敏感 SQLite 设置;密码只保存到 Windows 凭据管理器。
|
||||
- 密码框使用隐藏模式,已有密码不回填明文;留空保存表示不修改已有密码,修改账号
|
||||
或服务器后必须重新输入密码。
|
||||
- Windows 凭据按照协议、主机和端口隔离,避免把旧服务器密码误发到新服务器。
|
||||
- 已保存完整配置时,Client 启动后通过 Qt Worker 自动检查一次;最新版或网络失败
|
||||
不弹窗,只有发现新版时请求用户确认下载。
|
||||
- 清单和更新包都在内存中添加 Basic Authentication。固定发布主机临时允许默认端口
|
||||
HTTP,其他 HTTP 地址、URL 凭据、查询参数、片段和跨源重定向仍被拒绝。
|
||||
- 保留 #93 的大小、SHA256、版本、安全解压、下次启动替换和失败回退流程。
|
||||
- Client 版本升级为 `0.2.1`。
|
||||
|
||||
实现过程中增加了按 URL 源隔离系统凭据的保护。这比建单时的单一固定凭据目标更
|
||||
安全,不改变用户确认的界面和使用流程。
|
||||
|
||||
## 改了哪些
|
||||
|
||||
- `client/src/windows_credential_store.py`:Windows Credential API 小型封装。
|
||||
- `client/src/update_service.py`:Basic Authentication、固定 HTTP 主机白名单、
|
||||
Unicode URL 路径编码和跨源重定向保护。
|
||||
- `client/src/update_ui_event.py`:显式保存、系统凭据读取、启动检查和线程生命周期。
|
||||
- `client/src/settings_ui.py`、`settings_ui_event.py`:账号、密码、保存按钮和事件装配。
|
||||
- `client/src/version.py`:版本更新为 `0.2.1`。
|
||||
- `client/test/test_update_service.py`、`test_update_ui_event.py`、
|
||||
`test_windows_credential_store.py`:认证、安全边界、表单和自动检查测试。
|
||||
- `docs/client/`:同步术语、需求、架构、界面与安全基线。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 设置页显示 URL、账号、隐藏密码、保存和检查控件 | 通过 |
|
||||
| URL/账号重启恢复,密码不进入 SQLite 和源码 | 通过 |
|
||||
| 密码使用 Windows 凭据管理器,留空不会覆盖已有密码 | 通过 |
|
||||
| 未保存密码和未保存修改具有明确提示 | 通过 |
|
||||
| 清单与 ZIP 都携带认证且错误信息不泄露密码 | 通过 |
|
||||
| HTTP 只允许固定主机,跨源重定向被拒绝 | 通过 |
|
||||
| 已保存配置在启动后异步检查且不阻塞界面 | 通过 |
|
||||
| 发现新版后复用 #93 的下载和更新流程 | 通过 |
|
||||
| 真实下单开关、Admin 接口和采购流程未改变 | 通过 |
|
||||
| 自动测试、凭据往返和打包验证通过 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行的命令:
|
||||
- 在 `client/` 执行
|
||||
`C:/Python310/python.exe -m pytest test -q --disable-warnings`
|
||||
- 使用虚构测试凭据调用 Windows 凭据管理器写入、读取和删除
|
||||
- 在 `client/` 执行 `.\build_client.bat`
|
||||
- 离屏启动 `client/release/CMAutoBuy-0.2.1/Launcher.exe`
|
||||
- 结果:264 项测试通过;系统凭据往返通过且测试凭据已删除;0.2.1 发布产物生成
|
||||
成功;打包程序启动成功。
|
||||
- **没验证到的部分**:未使用真实发布密码访问线上清单和 ZIP;尚未在全新且未安装
|
||||
Python 的 Windows 机器上验证凭据保存和完整在线更新。
|
||||
|
||||
## 遗留问题
|
||||
|
||||
- 当前固定发布服务器使用 HTTP Basic Authentication,不能抵抗链路监听和中间人
|
||||
攻击;条件允许时应迁移到 HTTPS。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `dc375ff` feat: 增加认证更新配置与自动检查 (#94)
|
||||
Reference in New Issue
Block a user