加固校园卡会话、接口边界、流水分页与账户隔离 - #63
Conversation
|
Approved! 这个Feature的设计方向我认可。非常感谢你的贡献,请严格按照项目测试流程执行,保证相关测试全部通过,之后可以进行合并。 |
There was a problem hiding this comment.
复查后建议先修复以下问题再合并:
-
[P1] 流水被静默截断
app/CampusCardInterface.py:53固定只请求第 1 页、80 条。默认查询 90 天时很容易超过 80 笔;界面却显示服务端total,会出现“共 100 笔但表格只有 80 条”。请循环分页取完,或实现显式分页/加载更多。 -
[P1] 切换账户后仍显示上一账户的财务数据
app/CampusCardInterface.py:37的_auto_loaded不会因currentAccountChanged重置,页面也没有清空余额和流水。如果查询过程中切换账户,旧任务结果还可能覆盖当前页面。请在账户切换时取消当前任务、清空数据、重置自动加载,并通过账户 UUID 丢弃过期结果。 -
[P2] 流水接口业务失败会显示“查询成功”
card/campus_card.py:87没有像get_card_info()一样检查payload["code"]。例如返回{"code": 500, "message": "查询失败"}时,当前实现会得到(0, []),随后 UI 弹出“查询成功”。请校验业务状态并抛出ServerError。
验证情况:代码编译通过;head 与 base 的现有测试结果相同,118 项中 116 通过,2 项均为既有 schedule/lesson 失败,暂未发现本 PR 引入的现有测试回归。不过本 PR 没有新增测试,Test plan 的 3 项手测均未勾选,GitHub 也没有 check run。建议补充分页、业务错误和账户切换相关测试,并完成手测后重新请求 review。
超过一页的流水不再静默截断;业务失败不再显示查询成功;切账户会清空余额和表格。 Co-authored-by: Cursor <cursoragent@cursor.com>
姓名写入 X-Card-Name 后 urllib 按 latin-1 编码直接崩;流水 401「其他设备」以前也不会触发重登。 Co-authored-by: Cursor <cursoragent@cursor.com>
|
已更正修复 |
Keep campus card in the sidebar and school course in the toolbox. Co-authored-by: Cursor <cursoragent@cursor.com>
# Conflicts: # app/HomeInterface.py # app/main_window.py # auth/constant.py
变更背景
本 PR 加固校园卡功能,处理原实现中已确认的会话状态、接口边界、流水分页和账户切换问题。原 PR 可以在简单场景下显示校园卡信息,但在真实使用中存在以下风险:
X-Card-*伪请求头,中文姓名等内容可能造成请求头编码问题。本次修改直接基于原校园卡实现,优先复用现有会话、请求、账户管理、后台任务和页面保护机制,不引入平行的认证、分页或渲染框架。
主要修改
一、同步上游并保留并发保护
main。二、清理校园卡会话状态和请求头
Synjones-Auth和synAccessSource。X-Card-Access-Token、X-Card-Account、X-Card-Sno、X-Card-Name等内部伪请求头。http_safe_headers()过滤逻辑。401、其他设备登录和未登录提示保留自动重新登录路径。三、加固校园卡接口和流水分页
data对象和列表字段。200与字符串"200",但业务码缺失不再被视为成功。ServerError。card/和应用代码中遗留的X-Card-*回退逻辑。四、加固页面账户隔离和日期校验
CampusPage.start_job()以及上游已有的任务代际和账户 UUID guard。currentAccountChanged信号清空余额摘要和流水表格,并重置自动加载状态。测试与验证
定向和共享回归测试
完整测试域
git diff --check通过。测试合同
test.card.test_campus_card登记到 Qt/UI 测试域。test.app.test_http_headers登记到登录与会话测试域。变更范围
.github下的工作流和 CI 并发配置。docs/development/testing.md的测试清单和实测用例数外,没有修改其他文档。验收状态