29 Commits

Author SHA1 Message Date
2ce97243ab fix: 全量代码审计修复 — 30项
Some checks failed
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 审计修复
Some checks failed
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
ba00fcb1c6 fix: 适配新服务器蓝绿部署 — nginx 原生/PostgreSQL Docker 容器名/部署脚本
Some checks failed
Deploy Backend / deploy (push) Has been cancelled
2026-07-13 18:30:38 +08:00
38ee5ccbc6 feat: 所有页面添加ICP备案号 浙ICP备2026052792号
Some checks failed
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
452728be32 feat: deploy.sh增加活动环境检测-禁止直接部署到当前活动端口 2026-06-15 11:19:26 +08:00
00df4135c7 feat: deploy.sh部署后自动调用switch-env.sh切换代理 2026-06-07 16:37:29 +08:00
10576cda1e feat: deploy.sh支持--target blue|green蓝绿部署+分目录隔离 2026-06-02 12:54:50 +08:00
a4a455381c docs: 更新文档和deploy.sh-生产库改为milkydata_dev 2026-05-31 23:05:09 +08:00
4240bb6970 refactor: deploy工具适配systemd service模式-移除.env依赖 2026-05-25 14:46:07 +08:00
f9f1ffeff6 refactor: deploy.sh 拆分为模块化结构
- deploy.sh: 从 1574 行精简至 141 行,仅保留主流程编排
- lib/common.sh: 基础设施(日志/SSH复用/备份/上传/迁移/服务管理)
- lib/test.sh: 6 项部署后测试函数
- 迁移系统改用 _migrations 追踪表替代文件名模式匹配
- 所有 SSH 操作复用 ControlMaster socket
2026-05-18 10:09:40 +08:00
moira
27c8979690 fix: 全量代码审计修复—安全/死代码/错误处理/配置净化
P0 安全修复:
  - 支付宝回调验签 (alipay_notify BTreeMap + rsa2_verify)
  - JWT fallback 'default_secret' 改为 .expect() (panic保底)
  - 安全响应头中间件 (CSP/X-Frame-Options/HSTS)

P1 死代码清理:
  - 移除孤儿文件 src/alipay.rs (284行, 无mod注册)
  - 移除Cargo未使用依赖 (actix-files/error/log/hex/digest)
  - log::info! → tracing::info! (auth.rs)
  - 移除 config.rs server_host + 3个TOML定义

P1 质量修复:
  - 修复 weather.rs unwrap() → unwrap_or
  - 修复 auth.rs+payment.rs 错误吞咽 (add tracing::warn)
  - 修复 main.rs 3x parse().unwrap → unwrap_or

P3 运维:
  - 新增 scripts/backup-db.sh (定时备份用)
  - 新增 README.md (快速入门文档)
  - deploy.sh 集成 backup-db.sh 上传
2026-05-13 17:20:31 +08:00
moira
cb483298d5 feat: 新增deploy.sh --init-env一键初始化.env+完善JWT_SECRET管理文档
新增 --init-env 功能:
  - 自动生成 256 位随机 JWT_SECRET (openssl rand -base64 32)
  - 推送完整.env模板到服务器,设置权限600
  - 文件已存在时先备份再覆盖,有确认提示
  - dry-run 模式下安全预览

JWT_SECRET 管理方案:
  - dev/prod 使用不同密钥
  - 仅在服务器.env中存储(不进入Git/TOML)
  - deploy.sh check_env_file() 部署前自动验证
  - AGENTS.md 新增完整管理文档(生成/存储/验证/轮换)

deploy.sh 帮助文档同步更新 --init-env 说明
2026-05-13 15:31:23 +08:00
moira
0ffe2065e1 feat: 部署脚本添加.env文件健康检查
新增 check_env_file() 函数,在编译前自动检查:
1. .env 文件是否存在
2. 必需变量是否定义(生产环境额外要求SSL_KEY_PATH/SSL_CERT_PATH)
3. 变量值是否为占位符(your_/placeholder/xxx等)
4. 变量行是否被注释(# VAR=)

检查失败时终止部署,防止因缺少密钥导致服务无法启动
2026-05-13 15:21:22 +08:00
0c7d44d795 fix(deploy): 改进备份命名和清理逻辑,防止版本重复
问题:同一版本多次备份时,备份文件仅时间戳不同,内容完全相同,
导致清理后仍保留多个相同版本的备份,失去回滚多样性。

解决方案:
1. 备份文件名加入 Git hash + MD5:{timestamp}.{gitHash}.{md5}
2. 清理逻辑按 MD5 去重:相同版本的多个备份只保留最早一个
3. 手动回滚支持选择特定版本

影响:
- 回滚时可明确知道恢复到哪个版本(Git hash + MD5 可验证)
- 清理不再基于简单时间戳,而是基于版本内容
- 保留了真正的版本多样性
2026-04-19 20:55:47 +08:00
778bf0e9e7 fix(deploy): 修复迁移执行和数据库测试问题
1. 迁移执行:使用 cat + pipe 替代 stdin 重定向,解决远程文件读取问题
2. 数据库表检测:修复 SQL 引号嵌套问题,使用正确的 psql 语法
2026-04-19 17:53:29 +08:00
58e52ce1c1 feat(deploy): 增强部署测试套件
新增 6 大测试模块:
1. test_basic_connectivity - 基础连通性 (health, login, refresh-token, /)
2. test_database_connection - Docker PostgreSQL 连接和查询测试
3. test_token_flow - 完整 Token 流程 (登录 → JWT → 受保护接口)
4. test_weather_details_jwt - weather/details 端点 JWT 验证测试
5. test_invalid_token_401 - 无效 Token 返回 401 测试
6. test_response_content - JSON 响应内容结构验证

测试覆盖:
- 本地端口和 HTTPS 域名双重验证
- 数据库表存在性和查询测试
- JWT 生成、验证、受保护接口访问
- 响应格式完整性验证
2026-04-19 17:45:48 +08:00
45ed78a883 feat(deploy): 增强 deploy.sh 日志和服务管理功能
新增选项:
- --logs [N]     查看后端日志(默认50行)
- --tail [N]     实时跟踪后端日志(Ctrl+C 退出)
- --status       查看服务状态
- --post-logs    部署后自动显示日志

改进:
- 修复 --help 选项无法正确处理的 bug
- 优化参数解析逻辑(先选项后位置参数)
2026-04-19 17:40:23 +08:00
e14c85436b feat(auth): 添加 Refresh Token 双 Token 机制
- 添加 /api/refresh-token 接口支持 Token 续期
- 登录接口返回 access_token 和 refresh_token
- 新增 refresh_tokens 表存储 refresh_token
- 部署脚本添加数据库备份和迁移功能
- deploy.sh 添加 4 项 API 测试
- 更新 AGENTS.md 文档
2026-04-19 16:01:41 +08:00
988828b984 feat(deploy): 添加开发环境 systemd 服务,改进部署文档 2026-04-19 00:31:26 +08:00
44aa62da49 feat(deploy): 优化部署脚本,添加 dry-run、备份、SSH 复用 2026-04-19 00:20:06 +08:00
fd21e641a2 fix: 将 get_weather_details 和 health_check 移出 JWT 保护作用域作为公开接口 2026-04-18 14:04:49 +08:00
61b1174b30 fix: 统一字段命名为 camelCase 并修复详情 API
- models.rs: 将 inspectiontype/assignmentnumber 的 serde rename 改为
  inspectionType/assignmentNumber,与前端 TypeScript 接口保持一致
- models.rs: 为 WeatherDataBrief 添加 isFavorite 字段支持
- models.rs: WeatherData.is_favorite 添加 skip_deserializing 避免 POST
  请求解析失败,同时使用 default 处理数据库 NULL 值
- handlers/weather.rs: get_weather_details 支持 string 和 number 类型的
  id 参数解析
- IMPROVEMENTS.md: 新增第十三章记录本次对话经验(serde 配置、config
  路径解析、TOML 结构等)
2026-04-17 20:47:00 +08:00
da4e6f557e feat: 实现后端多环境配置机制
- 使用 toml crate 替代 config crate 直接读取配置文件
- 创建 config/default.toml、config/development.toml、config/production.toml
- 重写 config.rs 支持多环境配置加载
- 增强 deploy.sh 支持 development/production 环境参数
- 更新 IMPROVEMENTS.md 标记环境区分完成
2026-04-17 11:11:13 +08:00
6d2824589c feat: 添加用户信息存储功能
- 添加 avatar_url 和 nickname 字段到 users 表
- 修改 get_user_by_id 查询包含新字段
- 添加 save_user_profile API
- 优化 deploy.sh 默认使用 release 模式
2026-03-26 14:28:46 +08:00
ef8fac7ec2 添加systemd service文件,更新部署脚本格式
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-25 17:26:44 +08:00
7d7c0b251f 更新了deploy的方法 2025-10-21 10:07:46 +08:00
9e76976a56 修改了端口 2025-10-21 09:28:42 +08:00
03bbd845c7 for deploy 2025-09-26 15:55:05 +08:00