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:
@@ -39,25 +39,45 @@
|
||||
- GAP-07(SDK):❌ 推迟 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 19(2026-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 context(auth_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 所有错误一律返回 500(auth_handler.go)
|
||||
- BUG-05: Logout 不使 Token 失效(auth_handler.go)
|
||||
- BUG-06: GetCSRFToken 返回 not_implemented(auth_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
|
||||
|
||||
Reference in New Issue
Block a user