From f6a8d51aa0cfa2da6f7c1b2414a21dc44c2793e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Mon, 19 Oct 2026 20:00:48 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=94=B6=E5=8F=A3=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=BB=88=E5=AE=A1=20Minor=202=20=E6=B3=A8=E9=87=8A=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20+=20=E5=90=84=20Batch=20=E5=AE=8C=E6=88=90=E8=AE=B0?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- app/platform/host_middleware.py | 7 +++---- .../superpowers/plans/2026-10-19-shared-domain-routing.md | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/platform/host_middleware.py b/app/platform/host_middleware.py index 9e9d172..7b5558d 100644 --- a/app/platform/host_middleware.py +++ b/app/platform/host_middleware.py @@ -124,10 +124,9 @@ class TenantHostMiddleware: # 解析,测试 test_prefix_match_precise / test_admin_exempt_from_ # tenant_middleware 钉住)。 # - # 已知观察项(本任务仅注记不改实现):反代部署形态下登录限流键 - # 取 request.client.host 不解析 XFF——所有请求同源(反代 IP), - # 键退化为按用户名(fail-safe:只更严不会更松,单账号爆破面 - # 不变);可信代理头解析归部署批次统一处理。 + # 历史观察项已收口(2026-10-19):登录限流 IP 已在 auth_routes. + # _client_ip 解析 XFF **末段**(反代追加语义,不可伪造;与引擎 + # _server_ip 取首段刻意不对称,详见该函数 docstring)。 path = scope.get("path") or "" if (path == "/health" or path.startswith("/api/platform/") diff --git a/docs/superpowers/plans/2026-10-19-shared-domain-routing.md b/docs/superpowers/plans/2026-10-19-shared-domain-routing.md index 799dc5e..547040d 100644 --- a/docs/superpowers/plans/2026-10-19-shared-domain-routing.md +++ b/docs/superpowers/plans/2026-10-19-shared-domain-routing.md @@ -23,7 +23,7 @@ --- -## Batch A:路由核心(后端) +## Batch A:路由核心(后端)(✅ 2026-10-19 完成——e08a675+6fc43c1/9b97eaf/3862577;全任务过双审;.venv 丢失已重建 + conftest 钉 ADMIN_PASSWORD 封闭本地 .env) ### Task 1: registry.resolve_by_slug(TDD) @@ -258,7 +258,7 @@ class TestPathPrefixRouting: - [ ] **Step 2: 跑绿**(实现已在 Task 2 完成,此为验收钉位;若红按信号修中间件) - [ ] **Step 3: Commit**——`test: 路径模式全链与限流隔离钉位` -## Batch B:静态面前缀自推导 +## Batch B:静态面前缀自推导(✅ 0baa9ab/a1dc1ff;双模式页面逐字节一致验证) ### Task 4: widget.js basePath(先写静态守卫测试) @@ -381,7 +381,7 @@ def test_chatjs_端点全部走_BASE_PATH(): - [ ] **Step 4: GREEN + 手动双模式目检**——`PYTHONUTF8=1 .venv/Scripts/python -m uvicorn app.main:app --port 8018 --workers 1` 后 curl 两种形态(Host 模式需 hosts/Host 头;路径模式 `curl http://127.0.0.1:8018/t/jiancai/` 返回页含引导脚本) - [ ] **Step 5: Commit**——`feat(chat): 页面级 basePath 引导(路径模式静态面)` -## Batch C:上线收口项 +## Batch C:上线收口项(✅ 4f58398/f938118;XFF 末段 RED 判别实证 + 清扫窗沿互补钉位) ### Task 6: 登录限流 XFF 末段(TDD) @@ -508,7 +508,7 @@ class TestLimiterSweep: - [ ] **Step 4: GREEN + 全量回归** → **Step 5: Commit**——`feat(limits): 限流器过期键周期清扫(内存上限铁律)` -## Batch D:管理面与部署工件 +## Batch D:管理面与部署工件(✅ 5813fc9/e1eae00/9315dba + 终审 Merge-ready 0C/0I/3M——M1 空站点引擎懒建次序/M3 data-site 前端校验注记 已记档;M2 陈旧注释已修;走查实测:路径模式 E2E 对话/嵌入双形态切换生成) ### Task 8: 共享域名端点 + 设置键 + 嵌入代码双形态