feat: 实现管理鉴权、API 令牌与操作日志
This commit is contained in:
+37
-1
@@ -349,7 +349,43 @@
|
||||
|
||||
## 后台接口 A
|
||||
|
||||
暂无。
|
||||
### A1 2026-09-30
|
||||
|
||||
1. **A1 仅交付可挂载 Handler,未改 `cmd/nixmsg`**
|
||||
- 原条款:管理接口由服务进程提供;TASKS 要求路由可挂载。
|
||||
- 实际做法:`admin.New(Deps) *Handler` 实现 `http.Handler`,路径为完整 `/api/admin/...`;总控/后续接线在 mux 上 `Handle("/api/admin/", h)` 即可。本任务按隔离要求不改 `cmd/`、`listener`、`protocol`。
|
||||
- 原因:与并行线隔离;A1 验收用 httptest。
|
||||
- 备选方案:本分支同时改 `serve.go` 挂载(易与 N/P 冲突)。
|
||||
- 影响:合入后需在 `serve`/`wire` 挂载并注入真实 DB/Hash/Locks。
|
||||
|
||||
2. **P3 未合入时的假哈希与本地锁定/令牌生成**
|
||||
- 原条款:密码与令牌哈希用 `internal/auth`;锁定与 argon2 池由 P3 实现。
|
||||
- 实际做法:依赖 `auth.HashPool` / `auth.APITokens` / `auth.LoginLocks` 接口;测试注入 `auth.StubHashPool`。提供 `admin.MemoryLoginLocks`(5 分钟 10 次锁 5 分钟)与 `admin.RandomAPITokens`(`nxm_`+32 字节 base64url,SHA-256)供本线与测试使用,不实现 argon2。
|
||||
- 原因:第 1 波允许用假实现;P3 合入后替换注入即可。
|
||||
- 备选方案:阻塞等待 P3。
|
||||
- 影响:生产接线应改用 P3 实现;`MemoryLoginLocks`/`RandomAPITokens` 可保留作测试替身。
|
||||
|
||||
3. **API 令牌 `id` 为字符串**
|
||||
- 原条款:`docs/api/admin-api.md` 示例 `"id": 1`(数字)。
|
||||
- 实际做法:遵循库表 `api_tokens.id TEXT`,响应 `id` 为 16 字节随机十六进制字符串。
|
||||
- 原因:不改已发布迁移;与 schema 一致。
|
||||
- 备选方案:另加 INTEGER 列或把数字存成文本并在 JSON 里发数字。
|
||||
- 影响:W 线类型应按 `string` 解析令牌 id。
|
||||
|
||||
4. **尚未实现的管理路由(鉴权中间件已生效,业务返回 501)**
|
||||
- 原条款:DEVELOPMENT 第 8 节完整路由表。
|
||||
- 实际做法:已实现 `login`/`logout`/`me`/`password` 与 `/api/admin/tokens` 全套。以下路由经鉴权后返回 `501 not_implemented`(属 A2/A3):
|
||||
`GET /overview`;`endpoints` 列表/开通/import/batch/详情/改/删/kick/reset-login-password/talk-password/unlock;`registration` GET/PUT;`groups` 全部(含 `GET /groups/{id}`);`messages` 列表与详情;`GET /settings`。
|
||||
- 原因:A1 范围仅鉴权、令牌、操作日志。
|
||||
- 备选方案:无。
|
||||
- 影响:W/集成测试在 A2/A3 前勿依赖这些业务响应。
|
||||
|
||||
5. **操作日志用 `slog` 结构化字段**
|
||||
- 原条款:写结构化日志(操作者、动作、对象、结果、来源 IP)。
|
||||
- 实际做法:`Logger.Info("admin_audit", "actor", ..., "action", ..., "object", ..., "result", ..., "ip", ...)`;改状态请求写日志;不写密码/令牌/正文。
|
||||
- 原因:文档未规定日志后端。
|
||||
- 备选方案:独立 audit 表。
|
||||
- 影响:日志采集需按 msg=`admin_audit` 过滤。
|
||||
|
||||
## 后台网页 W
|
||||
|
||||
|
||||
Reference in New Issue
Block a user