test: add service layer unit tests for webhook/metadata/error/config

- webhook_service_test.go: isPrivateIP, isSafeURL, computeHMAC
- request_metadata_test.go: context functions
- classified_error_test.go: error types
- config_defaults_test.go: password reset/SMS defaults
- email_config_test.go: email code defaults
- auth_runtime_test.go: isUserNotFoundError

Service coverage: 11.2% -> 14.7%
This commit is contained in:
2026-04-09 15:30:26 +08:00
parent a6a0e58340
commit a3e090e821
13 changed files with 12024 additions and 19 deletions

View File

@@ -39,25 +39,45 @@
- GAP-07SDK❌ 推迟 v2.0
- 密码历史记录:✅ ChangePassword + doResetPassword 均已接线
## 代码审查状态最新2026-04-03 Sprint 16 完成
- 代码审查评分:**10/10**Sprint 16 彻底解决所有遗留问题)
- 🔴 阻塞级问题0 个
- 🟡 建议级问题:0
- 🟢 未修复安全问题:0 个(SEC-04/06/08 已全部修复)
- E2E 测试通过率100% (17/17)
## 代码审查状态最新2026-04-08 生产级评估 v3.0
- **综合评分**:⚠️ 5.9/10 **不合格**
- 🔴 P0 阻塞问题:7(必须立即修复)
- 🟠 P1 严重问题:5 个(本周修复)
- 🟡 P2 高优先级4 个(本月修复)
### 关键差距v2.0 → v3.0 真实评估)
| 维度 | v2.0 | v3.0 | 差距原因 |
|------|------|------|----------|
| 代码质量 | 9.7 | **7.5** | 后端覆盖率仅32.1% |
| 安全强度 | 9.7 | **6.0** | 无gosec、占位JWT密钥 |
| 部署简单性 | 8.0 | **5.0** | Docker无健康检查、无资源限制 |
| 运维可靠性 | 7.0 | **4.0** | 无备份自动化、无灾备方案 |
| 文档规范性 | 7.0 | **5.0** | Runbook缺失、无OpenAPI |
### Sprint 192026-04-08生产级差距分析
- 制定生产级审查标准:`docs/code-review/CODE_REVIEW_STANDARD_V3.md`
- 5维评估体系代码质量25%+安全30%+部署15%+运维20%+文档10%
- P0-P4分级体系
- 生产合并门禁清单
- 差距分析报告:`docs/code-review/PRODUCTION_GAP_ANALYSIS_2026-04-08.md`
- 7个P0问题清单
- 三阶段修复路线图
### 历史修复验证
- Sprint 15 修复清单:
- BUG-01: Goroutine 中使用已回收的 gin contextauth_handler.go、sms_handler.go
- BUG-02: 密码历史 goroutine 使用裸 context.Background()user_service.go、password_reset.go
- BUG-03: 登录日志 goroutine 使用裸 context.Background()auth.go
- BUG-04: handleError 所有错误一律返回 500auth_handler.go
- BUG-05: Logout 不使 Token 失效auth_handler.go
- BUG-06: GetCSRFToken 返回 not_implementedauth_handler.go
- 报告:`docs/sprints/SPRINT_15_CODE_REVIEW_REPORT.md`
- BUG-01: Goroutine 中使用已回收的 gin context ✅ 已验证
- BUG-02: 密码历史 goroutine 使用裸 context.Background() ✅ 已验证
- BUG-03: 登录日志 goroutine 使用裸 context.Background() ✅ 已验证
- BUG-04: handleError 所有错误一律返回 500 ✅ 已验证
- BUG-05: Logout 不使 Token 失效 ✅ 已验证
- BUG-06: GetCSRFToken 返回 not_implemented ✅ 已验证
- Sprint 16 修复清单:
- P1: E2E 测试中 exportHandler 未初始化,导致 2 个测试失败
- SEC-04: JTI 时间戳防枚举格式timestamp + random
- SEC-08: Refresh Token 滚动轮换防无限流Token Rotation
- 报告:`docs/sprints/SPRINT_16_FINAL_ISSUE_RESOLUTION.md`
- SEC-04: JTI 时间戳防枚举格式timestamp + random✅ 已验证
- SEC-08: Refresh Token 滚动轮换防无限流 ✅ 已验证
## 关键 API 路由
- 登录: `POST /api/v1/auth/login`(参数: account/username/email/phone, password, device_id, device_name, device_browser, device_os
@@ -103,6 +123,25 @@
- 前端执行方案(唯一有效):`docs/plans/ADMIN_FRONTEND_EXECUTION_PLAN.md`
- 前后端联调实施指南:`docs/processes/FRONTEND_BACKEND_REVIEW_IMPLEMENTATION_GUIDE.md`
## 安全实践亮点(已验证)
- ✅ Argon2id 密码哈希64MB内存、5次迭代、4并行
- ✅ crypto/rand 生成 Token 和盐(无 math/rand
- ✅ JTI 格式timestamp(8字节hex) + random(16字节hex)
- ✅ Token 滚动轮换防无限流
- ✅ 内存存储 access_token非 localStorage
- ✅ HttpOnly Cookie 存储 refresh_token
- ✅ 30秒请求超时控制
- ✅ CSRF 保护机制
- ✅ 登录异常检测AnomalyDetector
- ✅ 常数时间密码比较(防时序攻击)
## 代码审查标准v2.0
- 标准文档:`docs/code-review/CODE_REVIEW_STANDARD_V2.md`
- 流程文档:`docs/code-review/CODE_REVIEW_PROCESS.md`
- 报告目录:`docs/code-review/`
- 合并门禁go vet ✅ / go build ✅ / go test ✅ / lint ✅
- 时效要求常规PR首次审查 4h紧急 1h
## 技术经验积累
- replace_in_file 操作要确保不会重复插入内容
- Ant Design Menu 受控/非受控模式切换受控模式openKeys与CSS冲突改用 defaultOpenKeys