Commit Graph

15 Commits

Author SHA1 Message Date
Simon 1255e95a73 docs: v0.7.0 一键部署操作包(分步命令+回滚+预计时间)
给生产运维一站到底的部署指南:
- 步骤 1-6 顺序:备份 → migration → 重启 → 上传 4 端 → nginx → 验证
- 每步带回滚命令(任意一步失败立即回滚)
- 预计时间 15 分钟
- 容器名纠错:wecom_it_nginx(下划线不是横杠)
- RO bind mount 陷阱提醒
- Gitea token 撤销+重签+push+立刻删除流程

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 06:19:05 +08:00
Simon e96fbb2475 docs: v0.7.0 E2E 验收清单(扫码+MFA+P0 回归+回滚预案)
35 项验收项,7 大类:
1. 扫码登录(6 项)
2. MFA 绑定(3 项)
3. MFA 验证(高危守卫,8 项)
4. P0/P1 合规(4 项)
5. 端到端业务流(3 项)
6. 性能稳定性(4 项)
7. 回滚预案

每项给预期结果 + 验证方法 + 失败处理。
部署完 v0.7.0 后逐项打勾,任何一项  立即回滚。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 03:12:33 +08:00
Simon c1ac9b936c docs: 扫码登录+OTP 用户手册 + Phase 1+2 部署手册 (task #21 初稿)
- docs/USER-GUIDE-QRCODE-MFA.md — 员工/坐席/管理员三端用户指南
  - 扫码登录流程
  - OTP 绑定步骤
  - 高危操作 OTP 弹窗
  - 蜂鸟 SMS 备用通道
  - 丢手机兜底(管理员后台重置)
  - 常见问题 FAQ

- docs/DEPLOY-LOGIN-MIGRATION-v0.7.0.md — 运维部署手册
  - 部署前检查(依赖/migration/配置/域名)
  - 部署步骤(后端→前端 4 端→nginx→migration→验收)
  - RO bind mount 陷阱提示
  - 容器名坑(nginx 用 wecom_it_nginx)
  - 回滚方案
  - 已知风险与缓解

后续:task #21 E2E 验收 + 集成测试会在代码合入后补充
2026-06-21 01:14:59 +08:00
Simon c3899594d0 feat(portal): 扫码登录 + 角色自动分发 (Phase 1.3 task #16)
- 新建 frontend-portal/src/api/qrcode.ts — /api/auth_qrcode/* API 适配
- 新建 frontend-portal/src/composables/useQrcodeLogin.ts — 扫码核心逻辑
- 新建 frontend-portal/src/views/QrcodeLogin.vue — Portal 扫码登录 UI
  - 扫码成功后按角色自动跳:
    - 只有 admin    → /itadmin/
    - 只有 agent    → /itagent/
    - admin+agent   → /itportal/select(多角色)
    - 默认 user     → /itdesk/
- 改 frontend-portal/src/router/index.ts — 默认 / → /qrcode-login
  (原 PortalSelect.vue 保留作多角色 fallback)
- 新建 docs/NGINX-DOMAIN-ROUTING.md — 运维域名分发配置模板

build:  frontend-portal vue-tsc + vite build 通过
       QrcodeLogin chunk 4.82 kB
2026-06-21 01:06:47 +08:00
Simon 364e688382 chore(release): v0.5.0-beta 发版准备
主要改动:

backend 业务:
- feat(error-codes): 统一错误码表 E1011/E1012 拆码
  - E1011 AUTH_PASSWORD_WRONG: 本地密码错误
  - E1012 AUTH_FIRST_LOGIN_PASSWORD_REQUIRED: 首次登录请先设置密码
  - E1015 AUTH_OLD_PASSWORD_REQUIRED: 改密需要旧密码
  - E1016 AUTH_OLD_PASSWORD_WRONG: 旧密码错误
- fix(agents): P0 降级放行时,如坐席已注册但未设密码,正确 raise 1012
  (修复前会撞 1011 本地密码错误,与场景不符)
- feat(approval): 审批模块 (T审批/A审批)
- feat(config): approval_template_resource / approval_template_device 配置
- feat(main): /ready, /metrics, /version 端点(K8s 友好)

backend 测试:
- test(agents): 新增 test_agents.py — 3 个 Fix-4 降级登录测试
  - 错误密码拒绝
  - 缺密码拒绝
  - 正确密码通过
  pytest tests/test_agents.py → 3/3 通过
- test(conftest): 模块级 mock + slowapi 限流重置 + UTF-8 patch
  解决 Windows pytest GBK 读 .env 失败 + 降级路径无法测试

仓库治理:
- chore(gitignore): 排除 .workbuddy/memory/(workbuddy 本地记忆)
- chore(docs): 重命名两份 IT 文档(前缀加智能区分版本)

部署与文档:
- docs: RELEASE_NOTES_v0.5.0-beta.md / dashboard.html / 需求-发版预览页面
- docs: 部署、架构、PRD、安全、评审报告等同步 v0.5.0-beta
- deploy-server: 打包脚本、nginx、docker-compose 版本号 bump

前端 (frontend-h5 / frontend-agent / frontend-admin / frontend-portal):
- index.html / package.json 版本号与构建号 bump

自动验收(RELEASE_NOTES L100-104):
- [x] pytest tests/test_agents.py -v → 3 passed
- [x] grep Bs7ucT backend frontend-h5 frontend-agent → 无输出
- [x] grep AppException(101[123]) backend → 仅 1 处(登录场景 1012)
- [ ] npm run build (frontend-h5 / frontend-agent) → 合并后跑

后续: 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta
2026-06-15 14:14:58 +08:00
Simon 93ba41ed79 feat: 审批流程模块 (T审批A审批)
- 新增 backend/app/api/approval.py 审批API
- 前端H5支持发起审批、审批操作
- 添加审批卡片弹窗组件
- 路由注册审批模块
2026-06-15 09:32:41 +08:00
Simon 64d6812ec3 fix: P0遗留修复 + ADR/SOP文档
- requirements.txt: 添加 passlib[bcrypt] 依赖
- deploy-server/nginx.conf: /ws/ 路径添加 access_log off
- docs/ADRs/: 新增 4 个 ADR 决策记录
- docs/SOPs/: 新增 4 个 SOP 操作规程
2026-06-15 00:03:11 +08:00
Simon eb28a0f2ef docs: 添加 Gitea 重建评审报告 2026-06-14 23:59:28 +08:00
Simon 7eb7621d02 docs: 添加 pre-commit 验证报告 2026-06-14 23:59:06 +08:00
Simon cd2055040a chore: sync changes 2026-06-14 23:50:59 +08:00
Simon caa57babf1 P0安全止血: WS token改header + 坐席本地密码 + secret管理文档 2026-06-14 22:19:41 +08:00
Simon 4c65307e0c docs: 推 P1-1~4 给 workbuddy 修消息优化遗留 2026-06-14 21:43:35 +08:00
Simon ddebbe61a5 P0安全修复: WS token改subprotocol + nginx日志关闭 + 类型修复 + 降级验证 + 依赖 2026-06-14 21:21:48 +08:00
Claude 3735dc0367 feat(security): P0 安全止血 - WS token 改 header + 坐席本地密码
【workbuddy 推送 2026-06-14,任务 #10】

修复:
- P0-#4 WS token 泄露:服务端 ws.py 优先从 Authorization: Bearer header 取,
  query param 仅作向后兼容降级路径(h5_websocket_endpoint 同)
- P0-#5 坐席本地密码:Agent 模型加 password_hash 字段(bcrypt),
  坐席登录增加 password 字段(企微验证失败时备用),
  新增 POST /agents/password 端点修改密码,
  alembic 008 迁移脚本

新增/变更:
M  backend/app/api/agents.py              (+67 行,登录 password 验证 + 改密端点)
M  backend/app/api/ws.py                  (~+30 行,header 优先 + query 降级)
M  backend/app/models/agent.py            (+10 行,password_hash 字段)
M  backend/app/schemas/agent.py           (+7 行,password 字段)
M  frontend-agent/.../useWebSocket.ts     (+5 行,Authorization header)
A  backend/alembic/versions/008_add_agent_password.py
A  docs/安全/secret-管理.md               (P0-#1 长期方案规划)

【评审遗留 5 项,详见 docs/评审报告/workbuddy-2026-06-14-P0安全.md】
- [P0-#4-ws.ts] 浏览器 WebSocket API 不支持自定义 header,需改 Sec-WebSocket-Protocol
- [P0-#4-nginx] nginx access_log 没关闭,token 仍可能经 access_log 泄露
- [P0-#5-type] model Mapped[str] 严格模式下为 None 会报错,应改 Optional
- [P0-#5-fall] 企微降级放行路径不强制 password 验证,反削弱 P0-#5
- [P0-#5-dep]  requirements.txt 缺 passlib 依赖,部署会 ImportError

【推 Gitea】
卡 #8: MariaDB 套件未装,Gitea 未启动。本次 commit 暂存本地,
Gitea 起来后一次 git push -u origin main 推送供 workbuddy 二次评审。
2026-06-14 19:32:36 +08:00
Simon 63262292d7 chore: initial baseline with P0-safety .gitignore 2026-06-14 16:51:56 +08:00