Files
user-system/.workbuddy/memory/2026-04-02.md
long-agent 5b6bd93179 refactor: 整理项目根目录结构
整理内容:
- 删除 60+ 临时测试输出文件 (*.txt)
- 移动二进制文件到 bin/ 目录
- 移动 Shell 脚本到 scripts/ 目录
  - scripts/dev/: check_gitea.sh, check_sub2api.sh, run_tests.sh
  - scripts/deploy/: deploy_*.sh, simple_deploy.sh
  - scripts/ops/: fix_nginx.sh, fix_ssl.sh, install_docker.sh
  - scripts/test/: test_*.sh, test_*.bat
- 移动批处理文件到 scripts/
- 移动 Python 脚本到 tools/
- 清理临时日志文件

保留根目录必要文件:
- go.mod, go.sum, go.work
- Makefile, docker-compose.yml
- .env.example, .gitignore
- README.md, AGENTS.md, DEPLOY_GUIDE.md

验证: go build ./... && go test ./... 通过
2026-04-07 18:10:36 +08:00

3.3 KiB
Raw Blame History

2026-04-02 工作记录

Sprint 13 执行完成

执行时间: 2026-04-02

完成的修复

GAP-01: 角色继承 — 确认已完整实现

  • internal/service/role.go: 循环检测 + 深度限制5层已实现
  • internal/api/middleware/auth.go: 祖先权限汇总已接线
  • 无需修改

GAP-02 + 密码历史: SMS重置时序泄漏修复 + doResetPassword补写历史

  • internal/service/password_reset.go:
    • SMS验证码比较改用 crypto/subtle.ConstantTimeCompare
    • doResetPassword 新增密码历史检查与记录
    • 新增 WithPasswordHistoryRepo() 链式注入方法
  • cmd/server/main.go: 注入 passwordHistoryRepo 到 passwordResetService

GAP-05: AnomalyDetector — 确认已接线

  • main.go 第111-112行已完整初始化
  • 无需修改

GAP-03: 设备信任链路补齐

  • internal/api/handler/auth_handler.go: Login 补齐 device_id/name/browser/os 字段
  • internal/api/handler/sms_handler.go: 从 stub 重写为真实实现,调用 AuthService.LoginByCode支持设备注册
  • internal/service/auth.go: 导出 BestEffortRegisterDevicePublic 供外部调用

验证结果

  • go build ./... 通过
  • go vet ./... 通过
  • go test ./... -count=1 全部通过

遗留项Sprint 14

  • 邮箱验证码登录 handler 仍是 stubauth_handler.go::LoginByEmailCode
  • 前端 device_id 稳定化方案(当前为随机生成)
  • SlidingWindowLimiter 死代码清理R6-02

Sprint 14 执行完成(同日继续)

执行时间: 2026-04-02

修复内容(彻底收口所有遗留问题)

邮箱验证码登录 stub 修复

  • internal/api/handler/auth_handler.go:
    • SendEmailCode:从 stub 改为调用 authService.SendEmailLoginCode
    • LoginByEmailCode:从 stub 改为调用 authService.LoginByEmailCode,支持设备信息注册
    • SupportsEmailCodeLogin():从硬编码 false 改为动态检测 authService.HasEmailCodeService()
    • ActivateEmail:从 stub 改为调用 authService.ActivateEmail
    • ResendActivationEmail:从 stub 改为调用 authService.ResendActivationEmail(防枚举返回)
    • 删除三个永不被路由的 stubForgotPassword/ResetPassword/ValidateResetToken
  • internal/service/auth_email.go: 新增 HasEmailCodeService() 检测方法

R6-01 webhook recordDelivery context.Background 修复

  • internal/service/webhook.go: 用 context.WithTimeout(context.Background(), 5*time.Second) 替换裸 context.Background()

R6-02 SlidingWindowLimiter 死代码清理

  • 删除 internal/security/ratelimit.go(整个文件,全部类型均无外部引用)

前端 device_id 稳定化

  • frontend/admin/src/pages/auth/LoginPage/LoginPage.tsx:
    • buildDeviceFingerprint 改为从 localStorage 读取 ums_device_id
    • 不存在时用 crypto.randomUUID() 生成并持久化
    • 优雅降级localStorage 不可用时退化为一次性 ID

验证结果(最终)

  • go build ./... 通过
  • go vet ./... 通过
  • go test ./... -count=1 全部通过(无 FAIL
  • npm lint 通过exitCode=0
  • npm build 通过657ms

所有遗留问题清零

  • 所有已知 P2 stub handler 已修复
  • 死代码已清除
  • 前端设备信任链路完整闭环