fix(推送): 隔离推送设备账号绑定并支持定向联调,新建22222222222测试账号 #208

Merged
guke merged 1 commits from fix-manufacturePushComfirm into main 2026-07-31 14:34:09 +08:00
Member
No description provided.
zuochenyong added 1 commit 2026-07-31 11:06:08 +08:00
Member

🤖 review-pr 深审结论

🟡 需关注(置信度 0.8)—— 推送隔离核心正确、契约对应 #375,但引入荣耀/华为推送 targetUserType 回归(默认值不安全 + 破坏既有测试)。

推送隔离核心( 正确)

  • device endpoint 契约对应 #375:/unregister(token 授权) + /unregister/deferred(binding_id 授权)。
  • deferred 安全:unregister_push_binding_deferred 要求 device_id + push_binding_id 双匹配才解绑、幂等——binding_id 是 32B 随机 capability token,攻击者无从伪造。
  • 迁移 push_binding_isolation 合并态单 head;merge origin/main(含已合入的 #204/#205) 无冲突

🟡 回归:荣耀/华为 targetUserType

  • vendor_push.py:荣耀 targetUserType 从硬编码 1settings.HONOR_PUSH_TARGET_USER_TYPE;华为同样 → HUAWEI_PUSH_TARGET_USER_TYPE
  • config.py:两者 default=0(测试用户)。base 是硬编码 1(正式)。
  • 后果:生产若未显式配 =1,正式荣耀/华为推送都以 targetUserType=0(测试用户)发送 → 正式用户可能收不到推送(厂商测试推送只投注册的测试设备/限流)。默认值把「安全默认」设成了「测试模式」。
  • 破坏既有测试:base 上 test_device_push.py 9 passed,#208 令 test_honor_auth_and_send_payload 失败(assert 0 == 1)、华为同类同理。经 base 对比确认是本 PR 引入(非 pre-existing);测试未跟随更新。

建议

  1. HONOR/HUAWEI_PUSH_TARGET_USER_TYPE 默认改 1(安全默认=正式),联调环境显式配 0;或至少保证生产 .env=1.env.example 示范 =1
  2. 更新既有测试(期望改为跟随 settings 或测试内 monkeypatch 设 1),别让 CI 常红。
  3. 迁移分叉push_binding_isolation#207 limit_policy_whitelist 同 down_revision(guide_video_ten_circle_v2),谁后合并需 rebase down_revision,否则 alembic 双 head。

风险 🟡(隔离本身可上,但 targetUserType 默认值需先确认/修正)。

🤖 review-pr 自动深审 @zuochenyong

## 🤖 review-pr 深审结论 🟡 **需关注**(置信度 0.8)—— 推送隔离核心正确、契约对应 #375,但**引入荣耀/华为推送 `targetUserType` 回归**(默认值不安全 + 破坏既有测试)。 **推送隔离核心(✅ 正确)** - device endpoint 契约对应 #375:`/unregister`(token 授权) + `/unregister/deferred`(binding_id 授权)。 - deferred 安全:`unregister_push_binding_deferred` 要求 `device_id` + `push_binding_id` **双匹配**才解绑、幂等——binding_id 是 32B 随机 capability token,攻击者无从伪造。 - 迁移 `push_binding_isolation` 合并态**单 head**;merge origin/main(含已合入的 #204/#205) **无冲突**。 **🟡 回归:荣耀/华为 `targetUserType`** - `vendor_push.py`:荣耀 `targetUserType` 从硬编码 `1` → `settings.HONOR_PUSH_TARGET_USER_TYPE`;华为同样 → `HUAWEI_PUSH_TARGET_USER_TYPE`。 - `config.py`:两者 **`default=0`**(测试用户)。base 是硬编码 `1`(正式)。 - **后果**:生产若未显式配 `=1`,正式荣耀/华为推送都以 `targetUserType=0`(测试用户)发送 → **正式用户可能收不到推送**(厂商测试推送只投注册的测试设备/限流)。默认值把「安全默认」设成了「测试模式」。 - **破坏既有测试**:base 上 `test_device_push.py` **9 passed**,#208 令 `test_honor_auth_and_send_payload` 失败(`assert 0 == 1`)、华为同类同理。经 **base 对比确认是本 PR 引入**(非 pre-existing);测试未跟随更新。 **建议** 1. `HONOR/HUAWEI_PUSH_TARGET_USER_TYPE` 默认改 **1**(安全默认=正式),联调环境显式配 `0`;或至少保证生产 `.env` 配 `=1` 且 `.env.example` 示范 `=1`。 2. 更新既有测试(期望改为跟随 `settings` 或测试内 monkeypatch 设 1),别让 CI 常红。 3. **迁移分叉**:`push_binding_isolation` 与 #207 `limit_policy_whitelist` **同 down_revision**(`guide_video_ten_circle_v2`),谁后合并需 rebase `down_revision`,否则 alembic 双 head。 风险 🟡(隔离本身可上,但 targetUserType 默认值需先确认/修正)。 — 🤖 review-pr 自动深审 @zuochenyong
guke merged commit d9177cbb71 into main 2026-07-31 14:34:09 +08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#208