|
|
366d62f262
|
feat: 部署时自动校验支付宝签名一致性 + 验签失败升级为 error + 密钥核对脚本
|
2026-08-10 16:06:02 +08:00 |
|
|
|
49d740e27c
|
fix: 移除订单自动确认,仅依赖支付宝回调验签;rsa2_verify 支持裸 base64 DER 公钥;.env 取消 git 跟踪
|
2026-08-10 15:49:27 +08:00 |
|
|
|
2ce97243ab
|
fix: 全量代码审计修复 — 30项
Deploy Backend / deploy (push) Has been cancelled
P0 - Panic 风险修复:
- payment.rs: unwrap() → let-else safe handling
- payment.rs: get_jwt_secret() expect → Result/AppError
- auth.rs: openid 切片添加 len >= 8 守卫
- main.rs: 启动时 expect → unwrap_or_else 描述性 panic
- main.rs: Directive::from_str 添加 fallback
P1 - 逻辑/安全修复:
- payment.rs: urlencoding() + 解码 bug 修复 (移除 had_escape)
- payment.rs: Mock 支付添加 check_mock_payment_allowed 检查
- db.rs: 永久会员 NULL → 2099-12-31 一致化
- user.rs: 维护模式添加安全说明注释
- 自动清理 unused_variables 警告 (_is_mobile)
P2 - 错误吞没修复:
- main.rs: 3 处定时任务 let _ = → if let Err = tracing::error!
- db.rs + admin.rs: 7 处通知/审计日志 let _ = → tracing::warn!
- auth.rs: refresh token 保存 add warn 日志
P3 - 死代码清理:
- models.rs: 移除 TokenResponse (dead)
- models.rs: 移除 AppState 中 5 个未使用字段 (env var 直接读取)
- error.rs: 移除 3 个 dead ErrorResponse 方法
- rate_limiter.rs: extract_client_ip_from_header → #[cfg(test)]
- models.rs: 注释 typo fix (user_ytpe → user_type)
- db.rs: RefreshToken 添加 deserialization 注释
Shell 脚本修复:
- deploy.sh: run_migrations 移到 restart_service 之前
- test.sh: 移除 EXIT trap 覆盖; heredoc 引号修复; 维护模式添加 restart
- common.sh: mock_key 添加 sed 转义 (防 / & 注入)
验证: cargo check 0 warnings, 8 tests passed
|
2026-07-23 12:40:47 +08:00 |
|
|
|
217e7f8a55
|
fix: deploy.sh/test.sh 审计修复
Deploy Backend / deploy (push) Has been cancelled
deploy.sh:
- 修复重复的 header 注释行
lib/common.sh:
- view_logs/tail_logs/status: 从日志文件切换为 journalctl(上次改
日志输出到 stdout 后,日志文件已不存在)
- init_env 模板: User=root → User=rust-backend(匹配最小权限原则)
lib/test.sh:
- test_notify_url_domain: 添加自定义 Host 头(TEST_DOMAIN),模拟
真实外部请求场景。之前测试走 127.0.0.1 直连,Host 头为 localhost
导致 notify_url 校验永远通过但实际配置可能是错误的
|
2026-07-23 12:25:55 +08:00 |
|
|
|
0b0757939b
|
fix: 使用请求 Host 头动态构建 notify_url + 迁移文档/测试
Deploy Backend / deploy (push) Has been cancelled
根因:base_url 默认硬编码为 dev.xmclassmate.top,导致支付宝通知回调
(notify_url)指向开发服务器,RSA2 签名验证失败,订单延迟 12 分钟。
修复:
- 新增 get_base_url():优先用 APP_BASE_URL 环境变量,否则从请求
Host 头获取当前域名,确保 notify_url 始终指向正确的服务器
- 生产 .env 已设置 APP_BASE_URL=https://xmclassmate.top
- .env.example 新增 APP_BASE_URL 文档
迁移文档:
- SERVER-MIGRATION-PLAN.md 新增阶段 3 关键配置章节
- 12 项迁移检查清单 + 历史问题复盘
部署测试:
- test.sh 新增 test_notify_url_domain:校验支付表单 notify_url
域名与 BASE_URL 一致,迁移后自动捕获配置错误
|
2026-07-23 12:09:52 +08:00 |
|
|
|
65157475cb
|
fix: 统一使用 alipay.trade.page.pay + 支付全链路测试
Deploy Backend / deploy (push) Has been cancelled
- 因支付宝产品仅开通电脑网站支付,移除 mobile/desktop 切换
- 统一使用 alipay.trade.page.pay + FAST_INSTANT_TRADE_PAY
- 该接口在手机浏览器中也能跳转支付宝或显示移动端页面
- 新增 tests/payment_e2e_test.sh — 全链路支付测试脚本
|
2026-07-22 20:39:57 +08:00 |
|
|
|
3135f790bb
|
fix: 移除 deploy 模板中的 PAYMENT_MAINTENANCE_MODE
Deploy Backend / deploy (push) Has been cancelled
生产环境已配置支付宝正式密钥,关闭支付维护模式。
- 从 blue/green service 模板移除 Environment=PAYMENT_MAINTENANCE_MODE=true
- 服务器 .env 已更新为生产密钥
- 生产网关: openapi.alipay.com
|
2026-07-22 20:06:11 +08:00 |
|
|
|
6b0871f77d
|
feat: 根据 User-Agent 自动切换手机/电脑网站支付
Deploy Backend / deploy (push) Has been cancelled
- 新增 is_mobile_ua() 检测手机浏览器(mobile/android/iphone/ipad/harmonyos)
- build_alipay_form_html 新增 is_mobile 参数
- 手机端: alipay.trade.wap.pay + QUICK_WAP_PAY
- 桌面端: alipay.trade.page.pay + FAST_INSTANT_TRADE_PAY
- 同时应用于 payment_page 和 alipay_pay_page 两个入口
|
2026-07-20 15:22:42 +08:00 |
|
|
|
a7ffd387d9
|
feat: 添加访客登录 API (POST /api/guest-login) 支持网站独立支付
Deploy Backend / deploy (push) Has been cancelled
- 新增 web_guest_login handler: 创建访客用户(免微信 code),返回 JWT
- 路由注册在公共区(无需 JWT 认证)
- /payment 页面新增「访客登录」按钮,直接选择套餐支付
- 保留微信小程序登录作为备选
- 已部署到 dev.xmclassmate.top 验证通过
|
2026-07-20 15:08:30 +08:00 |
|
|
|
2c86219c82
|
feat: Alipay 安全加固 + 切换手机网站支付 (wap.pay)
Deploy Backend / deploy (push) Has been cancelled
- Phase 1: 移除 Git 中 ALIPAY 密钥,改用 EnvironmentFile
所有 4 个 deploy 模板删除 ALIPAY_* 内联 Environment,改为指向 .env
check_service_file() 不再要求 ALIPAY_APP_ID 在 Environment 中
init_env() 生成模板添加 EnvironmentFile 行
- Phase 2: 切换到手机网站支付 (alipay.trade.wap.pay)
payment.rs: product_code QUICK_WAP_PAY, method alipay.trade.wap.pay
用户从手机浏览器访问时自动唤起支付宝 APP
- Phase 3: 服务器 .env 文件创建
所有环境 .env 文件已通过 SSH 创建(600 权限)
dev 使用沙箱网关 (openapi-sandbox.dl.alipaydev.com)
prod 使用正式网关 (openapi.alipay.com)
- 生产部署完成(blue→green 双环境同步)
密钥安全: 不再存在于任何 Git 跟踪文件中
|
2026-07-20 14:52:39 +08:00 |
|
|
|
4c5c879583
|
fix: static_files 添加 txt 的 Content-Type 映射
|
2026-07-20 09:36:00 +08:00 |
|
|
|
70bb63be8d
|
feat: 添加 robots.txt(屏蔽爬虫索引 API/支付)
|
2026-07-20 09:33:36 +08:00 |
|
|
|
9fc5c2429e
|
feat: daily-report.sh 每日健康报告邮件 + logwatch 替换
|
2026-07-20 09:28:49 +08:00 |
|
|
|
1a359f8d84
|
fix: 日志输出从文件改为 stdout(journald 可见),紧凑格式,去掉 tracing-appender
|
2026-07-20 09:24:12 +08:00 |
|
|
|
d9c9d1dca0
|
fix: test_nginx_proxy_temp 改用 remote() 执行
|
2026-07-19 09:58:57 +08:00 |
|
|
|
941a8e5350
|
fix: insert_weather_data 配额查询使用已重命名的 membership_expires_at 列
|
2026-07-19 09:52:35 +08:00 |
|
|
|
51752f2d4d
|
fix: nginx AppArmor 缺少 proxy temp 路径;test: 新增 POST body 代理测试(避免权限遗漏上线)
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-18 21:58:23 +08:00 |
|
|
|
797a1438ea
|
fix: nginx AppArmor 缺少 proxy temp 路径,导致保存功能无法使用
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-18 21:57:28 +08:00 |
|
|
|
79a07a882a
|
fix: 🔴 Refresh token 泄露 JWT_SECRET — 改用随机 UUID 替代 base64(secret)
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-17 20:23:35 +08:00 |
|
|
|
5a5953f21f
|
chore: 网页端名称统一改为小明计算助手
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-17 13:33:20 +08:00 |
|
|
|
2908d8c86c
|
sec: 实施最小权限 — 创建 rust-backend 系统用户运行后端,限制 deploy sudo 仅允许部署/运维命令
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 11:17:24 +08:00 |
|
|
|
36d384f8fa
|
chore: 删除已废弃的 scripts/backup-db.sh(被 daily-backup.sh 替代)
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 11:07:37 +08:00 |
|
|
|
917d69c171
|
feat: Graceful shutdown (10s);backup 格式兼容 .dump.gz;容器连接监控
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 11:05:11 +08:00 |
|
|
|
ae64614342
|
fix: DB 备份保留从 1 增至 7;添加每日 cron 自动备份(生产+开发库)
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 11:01:22 +08:00 |
|
|
|
a47502f07e
|
perf: 合并 insert_weather_data N+1 查询为单次;添加 Docker 内存限制和磁盘告警
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 10:52:24 +08:00 |
|
|
|
fff3877f03
|
fix: 修复 service 模板 — 添加 PAYMENT_MAINTENANCE_MODE=true, APP_VERSION=0.3.0
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-13 18:46:02 +08:00 |
|
|
|
0fa9c9c71c
|
fix: nginx proxy 配置路径从 /www/sites/.../proxy/root.conf 改为 /etc/nginx/sites-enabled/
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-13 18:36:00 +08:00 |
|
|
|
ba00fcb1c6
|
fix: 适配新服务器蓝绿部署 — nginx 原生/PostgreSQL Docker 容器名/部署脚本
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-13 18:30:38 +08:00 |
|
|
|
38ee5ccbc6
|
feat: 所有页面添加ICP备案号 浙ICP备2026052792号
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-13 17:30:06 +08:00 |
|
|
|
178008496e
|
优化: Keep-Alive/rate-limiter/dead-code清理 + deploy.sh蓝绿自动检测 + 压测文档
|
2026-07-03 19:45:57 +08:00 |
|
|
|
6d066c8e82
|
fix: 取消订单错误提示区分已支付/已取消状态+支付确认提示优化
|
2026-06-17 13:32:01 +08:00 |
|
|
|
fb224c829f
|
fix: 成功页sync-order轮询传JWT-实时确认支付状态
|
2026-06-17 10:39:33 +08:00 |
|
|
|
b220368544
|
fix: 退款回调同步使用手动表单解析避免GBK编码问题
|
2026-06-15 13:24:38 +08:00 |
|
|
|
452728be32
|
feat: deploy.sh增加活动环境检测-禁止直接部署到当前活动端口
|
2026-06-15 11:19:26 +08:00 |
|
|
|
ac49ccb552
|
fix: Alipay回调手动解析表单支持GBK/GB2312编码回退
|
2026-06-15 11:17:43 +08:00 |
|
|
|
776d318330
|
fix: deploy.sh设置400秒超时+支付代码全面审计
|
2026-06-15 11:00:16 +08:00 |
|
|
|
43c349919d
|
fix: 防止用户误取消已付款订单-回调重新激活+2分钟内禁止取消+成功页30s超时提示
|
2026-06-15 10:37:28 +08:00 |
|
|
|
e672f00b66
|
fix: 支付确认TOCTOU竞态(AND status=pending)+定时器补充过期订单清理
|
2026-06-10 14:11:47 +08:00 |
|
|
|
c00e391c9b
|
fix: deploy测试-用远程heredoc替代stdin管道避免SSH复用bug-去重测试不阻断部署
|
2026-06-10 14:05:13 +08:00 |
|
|
|
9cef5a2730
|
fix: 测试SQL工具heredoc变量展开+移除重复函数
|
2026-06-10 13:31:34 +08:00 |
|
|
|
d7b7e0c0a3
|
fix: 部署测试SQL工具bug-硬编码user_id=1/无清理trap/迁移文件未引号
|
2026-06-10 13:16:19 +08:00 |
|
|
|
23b6b2a11b
|
test: 补全支付链测试缺口(去重/维护模式/退款/验证检测/前端状态)
|
2026-06-10 09:33:39 +08:00 |
|
|
|
ca320c6db0
|
fix: 部署测试BASE_URL变量提升为全局避免其他测试函数未定义
|
2026-06-10 09:27:19 +08:00 |
|
|
|
184948d24b
|
fix: 部署测试test.sh使用HTTPS协议(4433/4434端口)+跳过mock支付测试生产环境
|
2026-06-10 09:21:31 +08:00 |
|
|
|
2681003bbd
|
test: 支付链路自动化测试(SQL间隔一致性+部署后支付流程测试)
|
2026-06-10 09:17:52 +08:00 |
|
|
|
55e0bb1e6e
|
fix: deploy模板缺少支付宝密钥导致每次部署后回退到模拟支付
|
2026-06-10 09:09:35 +08:00 |
|
|
|
ebb68b0fc6
|
fix: set-paid-user.sh添加DB_NAME默认值+兼容管道输入
|
2026-06-10 09:03:17 +08:00 |
|
|
|
2aea682098
|
fix: reqwest Client添加10s超时防止登录请求挂起阻塞worker
|
2026-06-09 15:44:48 +08:00 |
|
|
|
b54a9d8131
|
chore: 更新service文件APP_VERSION为0.2.7
|
2026-06-08 10:22:28 +08:00 |
|
|
|
f330d3a5b3
|
docs: 更新BLUE-GREEN-DEPLOY.md-限制&注意事项+数据库名称+实施状态
|
2026-06-07 16:49:22 +08:00 |
|