feat(middleware): /t/<slug>/ 路径前缀解析(与 Host 模式共存)
- TenantHostMiddleware 增路径前缀分支:raw_path 直判 slug 段(未编码 [a-z0-9-],%61uto/大写/点号不匹配落 Host 解析);仅带尾斜杠形态剥离; path 定长切割(保留前缀尾斜杠为剩余路径领头斜杠),raw_path 按解码 path 重编码重算(非长度截断),orig_path 留痕;未知 404/ws 1008、 停用 503/ws 1013 与 Host 模式同语义 - _PREFIX_RE 字符类取自 registry.TENANT_SLUG_RE(掐 ^$ 锚)单一事实源; tenant_routes 的 SLUG_RE 换源同常量别名 import(删本地定义与 import re) - 评审折入:registry 空 sites 分支注释纠正为生产可达(DB 源全站点停用 合法状态),test_registry 用例 docstring 同步;conftest ADMIN_PASSWORD 注释补硬编码登录用例警示 - 新增 TestPathPrefixRouting 13 用例(全链/拒绝族/停用/site 覆盖/豁免 优先/direct-ASGI 改写钉位/WS 双例/路径优先) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -329,9 +329,10 @@ class TestResolveBySlug:
|
||||
await reg.dispose_all()
|
||||
|
||||
async def test_空站点表按未知处理(self, tmp_path):
|
||||
"""防御分支(spec §5):两源加载期均拒零站点,直装 sites=[] 的
|
||||
LoadedTenant 绕过源校验覆盖该分支——正常运行不可达,防将来源
|
||||
语义漂移。"""
|
||||
"""空站点表 → 按未知处理(404)。该分支生产可达而非防御:DB 源
|
||||
全站点停用是合法运营状态(tenant_source 过滤 active 站点后可发出
|
||||
sites=[])。文件源加载期拒零站点——直装 sites=[] 的 LoadedTenant
|
||||
绕过源校验直接覆盖此分支。"""
|
||||
seed = _write_seed(tmp_path, {"jiancai": _tenant("jiancai")})
|
||||
source = FileTenantSource(seed)
|
||||
lt = dataclasses.replace(source.read_tenant("jiancai"), sites=[])
|
||||
|
||||
Reference in New Issue
Block a user