becomer f2d89a6d61
ci/woodpecker/tag/build Pipeline was successful
新增两套独立学工请假系统的 flavor 分流与接口封装
背景:山东农业大学、云南警官学院的辅导猫请假应用均为 HTTP 420「产品已到期」,
两校实际使用各自学校的学工平台请假,与辅导猫无关,需要按学校单独适配。

1. 新增 LeaveFlavorXsgz / LeaveFlavorXsfw 两个 flavor,leave_flavor.go 按
   schoolId 优先分流(静态映射,不参与探测缓存),其他学校仍走原 new/old 流程。

2. leave_xsgz.go —— 三易拓「新学工5」(山东农业大学 xsgz.sdau.edu.cn):
   CAS(含 wisedu 滑块) → ST → RSA 加密 ticket → /api/cas/callback 换 access_token
   → /api/leave/* 查询。关键细节:
   - /api/cas/callback 必须用 application/x-www-form-urlencoded 的 `ticket=xxx`
     表单串(用 JSON 会被服务端返回 500);
   - RSA 是 RSAUtils 自定义格式(非 PKCS#1):encodeURIComponent(DK+ticket) 按
     charCode 小端装 BigInt,chunkSize=模数字节数-2,输出 hex+空格分隔;
   - 公钥盐 DK 每次请求都变,必须与模数同批取用。
   已用真实前端 security.js 生成向量交叉验证算法逐字节一致;
   端到端实测登录/请假列表/类型/表单字段全部通过。

3. leave_xsfw.go —— 金智 xsfw 学工「学生请假」(云南警官学院):
   突破点:辅导猫登录拿到的 MOD_AUTH_CAS(ST-iap 格式)在 xg 学工域无效,
   需用 CASTGC 到 authserver 重新换一次 service 指向学工应用的票据,
   回调后 xg 域会话才建立(应用首页返回完整 HTML,含 WIS_CONFIG/APPID/APPNAME)。
   另修复该校响应的多重 UTF-8 BOM(标准 json.Unmarshal 会直接失败)。
   遗留:modules 业务接口仍 403,待真实抓包确认所需请求头。

4. 单测覆盖 RSA 加密向量、encodeURIComponent 边界、BOM 剥离(含前置空白组合)、
   schoolId 分流映射。go build/vet/test 全绿。
2026-10-17 16:59:13 +08:00
S
Description
No description provided
6.6 MiB
Languages
Go 58.2%
Vue 35.3%
TypeScript 4.1%
CSS 1.5%
JavaScript 0.6%
Other 0.2%