|
|
05b6520140
|
fix: 支付宝表单添加 HTML 转义,防止 JSON 双引号破坏属性
|
2026-05-07 16:27:27 +08:00 |
|
|
|
a588478ab0
|
fix: 修复付费会员累加逻辑和迁移误判问题
- 修复 confirm_payment_order 累加逻辑:GREATEST(COALESCE(paid_expires_at, NOW()), NOW()) + days
- 永久会员改为 2099-12-31 而非 NULL,避免与未付费用户的 NULL 混淆
- 禁用 003_set_all_users_paid.sql 迁移(将所有已有用户设为永久付费)
- 后端部署后已回滚 Dev 数据库中 73 个被误设为付费的用户
|
2026-05-07 15:55:37 +08:00 |
|
|
|
d884914338
|
fix: 支付宝表单使用原始值,浏览器自动处理URL编码
修复 double-encoding 问题:表单 hidden input 不应预先 URL 编码,
浏览器提交时会自动编码,预编码会导致二次编码(如空格变 %2520)
|
2026-05-07 15:37:51 +08:00 |
|
|
|
7a194251be
|
fix: 支付宝签名使用原始值,改用表单自动提交方式
- 修复签名源:使用原始参数值(不进行 URL 编码)
- 改用 HTML 表单自动提交方式代替服务器端 API 调用
- 避免 nginx 代理大响应体的问题
|
2026-05-07 15:19:34 +08:00 |
|
|
|
4aece40a58
|
docs: 修复 AGENTS.md 文档过时问题
- 项目结构图添加 rate_limiter.rs 文件
- 修复 systemd 说明:实际使用 EnvironmentFile= 而非 Environment=
|
2026-05-06 09:37:37 +08:00 |
|
|
|
2046638721
|
feat: 实现 Mock 支付功能,修复支付激活会员问题
- 当未配置 ALIPAY_* 环境变量时,自动启用 Mock 支付模式
- Mock 支付页面点击按钮后调用 /api/payment/mock-confirm 激活会员
- 更新 AGENTS.md 文档说明 Mock 支付配置和使用方法
|
2026-04-28 10:17:26 +08:00 |
|
|
|
ef246db31c
|
fix: 修复支付宝 RSA2 签名问题
- 支持 base64 编码的 PEM 格式私钥(systemd 环境变量)
- 使用 Digest + Pkcs1v15Sign::new() 进行签名(自动哈希)
- 修复 rsa2_sign 和 rsa2_verify 函数实现
|
2026-04-27 14:27:14 +08:00 |
|
|
|
00fea53a4c
|
fix: 修复支付宝 RSA 签名失败问题
- 支持 base64 编码的 PEM 格式私钥(用于 systemd 环境变量)
- RSA 签名/验证前需先用 Sha256::digest() 哈希输入
- 添加 Digest trait 导入
|
2026-04-27 13:53:18 +08:00 |
|
|
|
580e68b58c
|
feat(payment): 支持 URL 参数直接传递 JWT 登录
|
2026-04-27 13:13:32 +08:00 |
|
|
|
48ed2ca9ea
|
fix(main): 修正 create_server_config 函数结构
|
2026-04-27 09:26:51 +08:00 |
|
|
|
bb20d82d49
|
fix(auth): 修复 web::scope("") 路由顺序导致 web-login 被 JWT 拦截的问题
|
2026-04-27 09:25:14 +08:00 |
|
|
|
aa84bbc4e6
|
feat(auth): 修复网页端登录流程,移除 web_generate_login_code 的 JWT 依赖
|
2026-04-27 09:08:25 +08:00 |
|
|
|
e6048ea010
|
feat(auth): 实现登录限流和性能优化
性能优化:
- 添加数据库索引优化查询性能 (006)
- weather_data: user_id, date, is_favorite 索引
- users: openid 索引
- payment_orders: status 索引
- 新增 refresh_tokens 表支持双 Token 机制 (004)
- 新增 web_login_codes 表支持网页端扫码登录 (005)
安全增强:
- 实现基于 IP 的登录限流 (rate_limiter.rs)
- 滑动窗口算法: 5次/分钟/IP
- 自动清理过期记录
- 429 TooManyRequests 响应
新模块:
- src/rate_limiter.rs: 限流模块
- src/alipay.rs: 支付宝签名模块 (RSA2)
- src/error.rs: 统一错误类型 (含 TooManyRequests)
- src/handlers/meta.rs: 元数据处理器
代码清理:
- 修复 .gitignore 规则,正确跟踪 src/ 和 migrations/
|
2026-04-24 16:13:49 +08:00 |
|
|
|
b3dc966576
|
docs: 更新登录码和支付宝接入文档
|
2026-04-24 14:52:55 +08:00 |
|
|
|
693075a30c
|
fix(auth): 将 web_login_confirm 移出 JWT scope,无需认证
登录码本身就是认证凭证,小程序确认时可能无有效 JWT。
改为无需 JWT,登录码 + openid 验证即可。
|
2026-04-24 14:48:30 +08:00 |
|
|
|
3bcfd9a4e6
|
fix(auth): web_login_confirm 加日志排查 + 精确匹配code
|
2026-04-24 14:27:26 +08:00 |
|
|
|
92fb4e3687
|
fix(auth): web_login_confirm 查询改为精确匹配 code,修复 unwrap_or(None) 问题
|
2026-04-24 11:01:16 +08:00 |
|
|
|
c66d1303ef
|
fix(auth): 统一登录码参数名为 code(与前端保持一致)
|
2026-04-24 10:56:33 +08:00 |
|
|
|
034aa66ed8
|
feat(payment): 实现网页端登录码流程(无需微信登录)
- 新增 GET /payment/generate-code:网页端生成 ASD-XXXXXX 登录码
- 新增 GET /payment/login-status:网页轮询查询登录码确认状态
- web_generate_login_code 和 web_login_confirm 增加 JWT 保护
- payment_index JS 改为真实调用 generate-code 并轮询
- 添加 rand crate 依赖
|
2026-04-24 10:51:06 +08:00 |
|
|
|
31bafee0ab
|
feat(payment): 重构网页端支付登录流程——小程序生成临时码、网页端扫码确认
- 后端新增 /api/web-login/code (生成临时登录码) 和 /api/web-login/confirm (确认登录)
- 后端新增 /payment/login-status (GET, 轮询登录状态)
- payment_index 页面完全重写:未登录时显示微信扫码登录入口;登录后显示套餐或会员信息
- 沙箱环境下 /payment 通过 mock-login 跳过真实微信认证,方便测试
|
2026-04-24 09:43:18 +08:00 |
|
|
|
375f0affcf
|
docs: 更新支付系统和支付宝集成文档,修复Rust edition版本号
|
2026-04-24 09:19:48 +08:00 |
|
|
|
ea705f0917
|
feat(auth): 添加沙箱测试用 mock_login 接口 (GET /api/mock-login)
|
2026-04-23 13:11:10 +08:00 |
|
|
|
502ae8babb
|
fix(payment): payment_page支持URL参数传递JWT,payment_index页面跳转时携带JWT
|
2026-04-23 12:34:39 +08:00 |
|
|
|
e8286310ea
|
feat(payment): 接入支付宝沙箱环境 (alipay.trade.page.pay)
|
2026-04-23 12:23:53 +08:00 |
|
|
|
8c9552fbfc
|
feat: 新增支付页面接口,为接入支付宝做准备
- GET /payment: 套餐选择页(无需认证,外部浏览器打开)
- GET /payment/page: 支付引导页(需 JWT,创建订单)
- GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT)
- AppState 新增支付宝配置字段(可选)
- afterbody.js: PDF下载增加状态提示和重试按钮
|
2026-04-23 10:48:31 +08:00 |
|
|
|
fe0e831210
|
docs: 更新后端 API 文档
- 补充 handlers 目录:添加 meta.rs、favorites.rs
- 新增服务状态页说明(/、/health)
- 完善 API 接口列表:
- 公开接口:添加 /health、/refresh-token
- 受保护接口:添加 /api/favorites 系列、/api/user/quota
- 支付接口:添加 /api/payment/create-order、/api/payment/mock-confirm
|
2026-04-19 21:10:17 +08:00 |
|
|
|
fb791a2a7c
|
docs: 更新备份策略文档,反映版本去重和选择性回滚
- 备份文件名格式:{project}.backup.{timestamp}.{gitHash}.{md5前8位}
- 清理策略:保留 5 个不同版本,相同版本只保留最早的
- 手动回滚:支持选择特定版本
|
2026-04-19 20:56:32 +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 |
|
|
|
9974bfbf58
|
fix(config): 移除代码中的 app_version 引用,完成版本管理统一
- config.rs: 移除 AppConfig.app_version 字段和日志输出
- main.rs: 移除 APP_VERSION 环境变量设置
- models.rs: 移除 AppState.app_version 字段
版本号现统一使用 Cargo.toml 中的 env!("CARGO_PKG_VERSION")
|
2026-04-19 20:50:56 +08:00 |
|
|
|
a91948a18c
|
refactor(config): 统一版本管理,移除冗余的 app_version 字段
- 移除 config/*.toml 中的 app_version 字段(代码中未使用)
- 版本号统一由 Cargo.toml 管理
- Cargo.lock 自动同步更新
- 更新 AGENTS.md 添加版本管理说明
|
2026-04-19 20:35:12 +08:00 |
|
|
|
db7fa8e460
|
chore: 升级版本至 0.3.0
|
2026-04-19 20:30:02 +08:00 |
|
|
|
9868db0abc
|
style(pdf): 优化 PDF 报表布局样式
- 改用 two-column/field 布局替代 data-grid
- 经纬度分开显示
- 移除冗余的'是否有抽测风速'字段
|
2026-04-19 20:20:12 +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 |
|
|
|
14c2ef25de
|
fix(auth): /weather/details 端点自己验证 JWT(修复静默刷新后仍 401 问题)
问题:/weather/details 不在 jwt_middleware 保护范围内,导致即使前端发送 Authorization header,后端也不会验证 JWT。
修复:使用 HttpRequest 直接从 Authorization header 提取并验证 JWT,而非依赖 middleware 注入的 Claims。
验证:curl 测试确认 /weather/details?id=2 返回正确数据
|
2026-04-19 17:34:35 +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 |
|
|
|
52991dcfd5
|
fix(api): 优化 /health 端点错误提示
|
2026-04-19 00:38:13 +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 |
|
|
|
9d452c4e75
|
feat: 统一前后端日志和错误处理
|
2026-04-19 00:14:22 +08:00 |
|
|
|
fd21e641a2
|
fix: 将 get_weather_details 和 health_check 移出 JWT 保护作用域作为公开接口
|
2026-04-18 14:04:49 +08:00 |
|
|
|
d756694534
|
docs: 更新 API 文档,澄清 get_weather_details 支持双认证方式
- 说明 get_weather_details 同时支持 JWT 和 temp_token
- 更新路由注册注释
|
2026-04-18 13:24:07 +08:00 |
|
|
|
7eb8d1b5c2
|
refactor: 重构报表生成逻辑,改进代码结构
- 重构 afterbody.js 为模块化结构 (WeatherReport IIFE)
- 优化 HTML 构建和 PDF 生成流程
- 添加更健壮的数据处理函数
- 改进错误处理和调试日志
|
2026-04-18 13:23:42 +08:00 |
|
|
|
4a9e85667c
|
docs: 添加服务器资源评估文档
- 新增服务器资源评估章节
- 记录当前服务器配置和资源占用
- 分析业务数据规模
- 评估小/中/大规模资源需求
- 说明 Rust 后端性能特性
- 分析瓶颈和优化建议
- 给出分阶段升级方案
|
2026-04-17 23:16:11 +08:00 |
|
|
|
15237d4250
|
docs: 新增公告系统实现计划
- 新增十四、公告系统章节
- 数据库设计(announcements, user_announcement_reads)
- 用户接口(列表、详情、未读数量)
- 管理员接口(发布、编辑、删除)
- Rust 结构体示例
- 实施优先级
|
2026-04-17 23:12:21 +08:00 |
|
|
|
2aeef3e9bf
|
docs: 添加生产环境数据库迁移步骤
- 新增二、生产环境数据库迁移章节
- 记录测试/生产环境数据量对比
- 添加备份和迁移操作步骤
- 添加 memberships/invitation_codes 建表语句
- 添加回滚方案
|
2026-04-17 23:03:27 +08:00 |
|
|
|
b6c022d472
|
docs: 添加命名规范章节并更新付费系统接口
- 新增命名规范章节
- 前后端 JSON 通信统一使用 camelCase
- Rust 结构体和数据库使用 snake_case
- 添加 serde rename 示例
- 更新 12.4 接口设计为 camelCase
- 更新 12.3 累积计算逻辑代码示例
- 更新 13.1 标记为已完成
|
2026-04-17 22:53:06 +08:00 |
|
|
|
e02644d6d7
|
docs: 重构付费系统设计文档
AGENTS.md:
- 支付系统章节新增三种支付模式(微信/邀请码/管理员)
- 添加累积计算逻辑说明
- 说明永久会员使用 2099-12-31 而非 NULL
IMPROVEMENTS.md:
- 重构 12.1-12.7 章节为新的付费系统设计
- 添加 memberships 表设计(冗余表提高查询性能)
- 添加 invitation_codes 表设计
- 详细说明累积计算逻辑和代码示例
- 更新邀请码接口设计(增加 paid_days 字段)
- 更新后端/前端实现要点
- 邀请码生成规则改为 Y/M/P 类型标识
|
2026-04-17 21:44:27 +08:00 |
|
|
|
75cdb1d222
|
docs: 新增邀请码开通会员方案
- IMPROVEMENTS.md 添加方案二:邀请码开通会员
- 数据库设计(invitation_codes 表)
- 接口设计(使用邀请码、生成邀请码)
- 后端/前端实现要点
- 邀请码生成规则建议
|
2026-04-17 21:34:03 +08:00 |
|