feat: add client subscription startup policy

This commit is contained in:
QiuSW
2026-07-28 15:14:48 +08:00
parent f0f34156da
commit 1c100c5d7e
15 changed files with 290 additions and 21 deletions
+27 -1
View File
@@ -108,4 +108,30 @@
## 状态
TODO。
DONE。
## 实施结果
- 新增 `config/client_subscription_policy.py`,以单一
`CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY=off|observe|enforce` 解析并发布策略,
固定输出 `policy_version=1` 与两个 JSON 布尔字段;非法模式、非 `off` 缺更新时间、
无时区或非法时间均抛出 `ImproperlyConfigured`。
- `GET /api/v1/client/releases/latest` 的当前发布、无发布和无下载地址路径均返回
顶层 `client_policy`,所有响应设置 `Cache-Control: no-store`;接口仍只查询
`DownloadRelease` 和环境配置。
- `GET /api/v1/cmshopee/subscription/status` 新增
`real_entitlement_allowed`,仅在真实权益为 `active` 或 `grace` 时为 `true`,
保留既有最终访问 `allowed` 兼容字段。
- 未新增模型、迁移、admin 配置或运行时写入,不改通用 / 专属生成、点数账本、
充值支付、软件订单或服务端订阅强制模式。
## 验证结果
- `py -3.12 -m py_compile config\client_subscription_policy.py config\settings.py apps\api\views.py apps\api\tests.py apps\licensing\services.py apps\licensing\tests.py`:通过。
- `py -3.12 manage.py check`:通过,0 issues。
- 隔离 SQLite 目标回归:`ClientLatestReleaseApiTests`、订阅状态核心场景和
`SubscriptionModeUnitTests` 共 27 tests OK,覆盖三种策略、无发布策略、
非法配置、`no-store`、真实权益 active / grace / required / expired 语义。
- `py -3.12 manage.py makemigrations --check --dry-run`:No changes detected;
旧本地 MySQL 地址拒绝连接,仅产生迁移历史检查 warning,本任务无迁移。
- `./init.ps1` 和 `git diff --check`:通过。