Your Name
f2f5148ca6
fix(awooop): Phase 2 第二批 P0 安全強化 + Redis key 命名空間修正
## P0-05 Callback Nonce 防偽造(ADR-116)
- security_interceptor.py:generate_callback_nonce() 新增 HMAC-SHA256[:16] 附加
- 新 5-part 格式:{action}:{short_id}:{ts}:{rand}:{hmac16}
- CALLBACK_HMAC_SECRET 未設定時降級 warning(向後相容)
- security_interceptor.py:parse_callback_data() 新增 5-part 分支 + HMAC 驗證
- config.py:新增 CALLBACK_HMAC_SECRET: str = Field(default="")
## P0-06 Webhook HMAC Replay 防護(ADR-116)
- security_interceptor.py:新增 check_webhook_nonce()(Service 層,get_redis 在此層合法)
- webhooks.py:verify_webhook_signature() 新增兩個可選 Header
- X-Webhook-Timestamp:±300s 窗口驗證(若提供)
- X-Webhook-Nonce:呼叫 check_webhook_nonce()(Redis NX dedup,fail open)
- 移除直接 get_redis import(leWOOOgo 積木化修正)
## P0-11 ollama:current_primary Redis key 遷移 Phase A(ADR-110)
- ollama_auto_recovery.py:_REDIS_PRIMARY_KEY = "platform:ollama:current_primary"
- 雙寫舊 key "ollama:current_primary"(Phase A 30 天)
- 讀取以新 key 為主,fallback 舊 key
## P0-12 consensus Redis key 加 project namespace Phase A
- consensus_engine.py:新增 _consensus_key() / _consensus_legacy_key() helper
- 新 key:{project_id}:consensus:{consensus_id}
- project_id=None 時 fallback __platform__:consensus:{consensus_id}
- Phase A 雙寫 + fallback 讀取,現有呼叫方零修改
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 13:54:38 +08:00
..
2026-05-04 13:37:11 +08:00
2026-04-14 15:29:12 +08:00
2026-03-23 18:40:36 +08:00
2026-03-29 00:00:08 +08:00
2026-04-25 02:10:06 +08:00
2026-03-26 19:10:12 +08:00
2026-03-26 09:55:58 +08:00
2026-03-26 09:55:58 +08:00
2026-03-29 16:03:41 +08:00
2026-04-30 23:02:17 +08:00
2026-03-30 01:21:23 +08:00
2026-03-31 16:13:44 +08:00
2026-04-14 15:29:12 +08:00
2026-04-14 18:36:59 +08:00
2026-03-29 23:56:34 +08:00
2026-05-04 13:37:11 +08:00
2026-05-02 23:49:59 +08:00
2026-03-23 18:40:36 +08:00
2026-03-29 16:03:41 +08:00
2026-04-30 23:02:17 +08:00
2026-05-02 12:28:33 +08:00
2026-04-14 15:29:12 +08:00
2026-03-29 01:19:26 +08:00
2026-05-02 23:49:59 +08:00
2026-03-23 18:40:36 +08:00
2026-03-23 18:40:36 +08:00
2026-03-26 09:55:47 +08:00
2026-03-31 16:06:51 +08:00
2026-03-26 19:10:12 +08:00
2026-03-29 16:03:41 +08:00
2026-03-23 18:40:36 +08:00
2026-04-17 21:48:50 +08:00
2026-03-29 16:03:41 +08:00
2026-05-04 13:54:38 +08:00
2026-03-29 01:52:08 +08:00
2026-03-29 01:52:08 +08:00
2026-03-26 09:55:47 +08:00
2026-03-26 19:10:12 +08:00
2026-03-26 09:55:58 +08:00
2026-03-29 16:35:47 +08:00
2026-03-23 18:40:36 +08:00