feat(auth): 注册页人机验证 + 邮箱验证码;品牌标识去 DeepSeek(附域名迁移线 序㊿ 补提交)

三条线合并入库 —— 均已完成并上线(源码与生产一致,此前只部署未入仓)。
⚠️ 其中域名迁移线为**另一会话**产出,本会话只做入库、**未复验其正确性**(它自报零回归)。

【档案 134 · 注册页人机验证 + 邮箱验证码】
- DB 迁移 v10:users.email(唯一索引 LOWER(email))+ email_codes 事件表(2 索引)
- 新增模块 src/web/{register-guard,mail,turnstile,email-code}.ts
- routes/auth.ts:新增 GET /api/auth/register/config、POST /api/auth/register/email-code;
  注册接口加人机验证与验证码校验;config.ts 新增 12 项配置(默认空 ⇒ 不配 = 老行为)
- 邮件走**可插拔驱动**(brevo/http/log),发件人 [email protected](Brevo 域名已认证 + DKIM + SPF)
- 防爆破:三层配额(邮箱 6/h、8/天;IP 20/h;全局 200/h)+ 递增冷却阶梯
  (60→60→180→300→900→1800s)+ 试错 5 次作废 + 码只存哈希 + 单次使用 + 与用户名绑定
- Turnstile 服务端校 **success + action + hostname 三项**:sitekey 是公开的,
  只校 success 时"拿我们的 sitekey 在自己站点替真人取合法 token 再打我们接口"这条路是通的
- 新增 test/register-guard.test.mjs(19 用例)

【档案 137 · 品牌标识改造 — 去 DeepSeek 图形】
- login/register/admin 页头:删 DeepSeek 鲸鱼图标 + 「DeepSeek」文字图形
  → 平台标识(中文「能力枢纽」/英语及其他语言「CapabilityNet」,走 i18n 词条 brand.name)
- portal 顶栏换图标(页面名「管理门户」保留)
- 新建 web/favicon.svg(平台自有 hub 图标,避开 DeepSeek 蓝)+ 四页 favicon 指向它
- 新增 test/i18n-brand.test.mjs(node:vm 跑真实 i18n.js,六条语言路径断言渲染结果)
- scripts/verify-static.mjs 新增 SVG 段:XML 注释不得含 ASCII 双连字符(否则整份 SVG
  解析失败、图标静默不显示 —— 实际踩到过)
- 🔴 会话页面(实例内官方 dsh 界面)的标识**按用户要求未动**(也受 R2 约束)

【档案 135/136 · 域名迁移线(另一会话产出)】
- 域名收敛为 ai1net.com;旧域 alotbuy.com 降级为 301 过渡装置
- src/net/relay/{addr-override,directory,rendezvous,switcher}.ts 种子与候选链更新;
  src/web/server.ts、src/worker/relay-tunnel.ts、scripts/verify-cluster-domain.mjs
- 档案 136 = 控制面按两台中继取并集(**已立项、未落地**)

验证(本会话两条线):新增单测 21 条全通过|全量 221 pass / 0 fail / 1 skipped|
verify-static 全合格|其余 10 个 verify 脚本全 OK|线上实测:Turnstile 假 token 403、
发码 delivered、四页 deepseek 命中 0、favicon 200。
This commit is contained in:
admin committed 2026-09-19 09:11:24 +08:00
1 parent d2ef362a98
commit 971ccc3703
56 files changed
+3498 -193

No files matched your search

+101 -26
View File
@@ -1,31 +1,31 @@
{
"generatedFrom": "scripts/docs-manifest.py",
"counts": {
"files": 189,
"chars": 1982749
"files": 194,
"chars": 2050190
},
"tiers": {
"hot": 6,
"cur": 25,
"warm": 61,
"cold": 38,
"doc": 59
"cold": 42,
"doc": 60
},
"domains": {
"platform": 74,
"platform": 75,
"method": 47,
"ui": 15,
"ui": 17,
"plugin": 27,
"ops": 14,
"ops": 16,
"?": 8,
"external": 4
},
"layers": {
"L0": 1,
"L5": 145,
"L5": 149,
"L4": 22,
"L2": 3,
"?": 3,
"?": 4,
"L1": 2,
"L3": 13
},
@@ -51,7 +51,7 @@
"title": "六、单实例迁移执行步骤(从当前 data/ 形态 → users/main 形态)",
"status": "?",
"date": "",
"chars": 14585,
"chars": 14656,
"lines": 338,
"refs": 0,
"refsCurrent": 0,
@@ -548,7 +548,7 @@
"date": "04-12",
"chars": 4117,
"lines": 77,
"refs": 4,
"refs": 6,
"refsCurrent": 0,
"tier": "warm",
"layer": "L5",
@@ -713,7 +713,7 @@
"date": "04-13",
"chars": 2444,
"lines": 58,
"refs": 5,
"refs": 9,
"refsCurrent": 0,
"tier": "warm",
"layer": "L5",
@@ -735,6 +735,66 @@
"domain": "method",
"tldr": ""
},
{
"path": "04-调整方案/134-注册页人机验证与邮箱验证码.md",
"num": "134",
"title": "134-注册页人机验证与邮箱验证码(2026-09-19 落地)",
"status": "✅",
"date": "09-19",
"chars": 13148,
"lines": 240,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "ui",
"tldr": ""
},
{
"path": "04-调整方案/135-旧域alotbuy.com从项目移除.md",
"num": "135",
"title": "135-旧域 alotbuy.com 从项目移除(2026-09-19 落地)",
"status": "✅",
"date": "09-19",
"chars": 7758,
"lines": 130,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "ops",
"tldr": ""
},
{
"path": "04-调整方案/136-控制面按两台中继取并集-立项交接单.md",
"num": "136",
"title": "136 · 控制面(平台 web 层)按两台中继取并集 —— 立项交接单",
"status": "🔄 待执行(已立项,未开工",
"date": "09-19",
"chars": 7839,
"lines": 146,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "platform",
"tldr": ""
},
{
"path": "04-调整方案/137-品牌标识改造-去DeepSeek图形.md",
"num": "137",
"title": "137-品牌标识改造(去 DeepSeek 图形 → 平台自有标识)",
"status": "✅",
"date": "09-19",
"chars": 6287,
"lines": 119,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "ui",
"tldr": ""
},
{
"path": "04-调整方案/14-实例会话敏感信息暴露面审计与加固.md",
"num": "14",
@@ -2076,7 +2136,7 @@
"title": "BRIEF — 现状卡(**AI / 人 首读这一份**)",
"status": "?",
"date": "",
"chars": 5965,
"chars": 6424,
"lines": 80,
"refs": 0,
"refsCurrent": 0,
@@ -2103,10 +2163,10 @@
{
"path": "DEPLOY-本部署.md",
"num": null,
"title": "DEPLOY — 本部署说明(alotbuy.com / 47.77.182.89)",
"title": "DEPLOY — 本部署说明(ai1net.com / 47.77.182.89)",
"status": "?",
"date": "",
"chars": 4415,
"chars": 4659,
"lines": 102,
"refs": 0,
"refsCurrent": 0,
@@ -2121,8 +2181,8 @@
"title": "dsh 平台文档导航(INDEX)",
"status": "?",
"date": "",
"chars": 22828,
"lines": 264,
"chars": 24468,
"lines": 268,
"refs": 0,
"refsCurrent": 0,
"tier": "doc",
@@ -2136,7 +2196,7 @@
"title": "dsh 多租户平台 — 改造方案文档库",
"status": "?",
"date": "",
"chars": 10835,
"chars": 10935,
"lines": 103,
"refs": 0,
"refsCurrent": 0,
@@ -2340,6 +2400,21 @@
"domain": "plugin",
"tldr": ""
},
{
"path": "ops/域名迁移_ai1net_20260919/RUNBOOK-cutover.md",
"num": null,
"title": "域名迁移 runbook —— `alotbuy.com` → `ai1net.com`(47 · 2026-09-19 建立)",
"status": "?",
"date": "",
"chars": 5785,
"lines": 99,
"refs": 0,
"refsCurrent": 0,
"tier": "doc",
"layer": "?",
"domain": "ops",
"tldr": ""
},
{
"path": "ops/接续入口_覆盖网络线_20260916.md",
"num": null,
@@ -2391,7 +2466,7 @@
"title": "dsh-change-workflow — dsh 平台改造工作流",
"status": "?",
"date": "",
"chars": 70412,
"chars": 70439,
"lines": 1039,
"refs": 0,
"refsCurrent": 0,
@@ -2406,7 +2481,7 @@
"title": "dsh-decision-method — 平台改造的思考与决策方法",
"status": "?",
"date": "",
"chars": 15995,
"chars": 15994,
"lines": 360,
"refs": 0,
"refsCurrent": 0,
@@ -2496,7 +2571,7 @@
"title": "dsh-feature-first — 功能优先协作协议",
"status": "?",
"date": "",
"chars": 14920,
"chars": 14919,
"lines": 361,
"refs": 0,
"refsCurrent": 0,
@@ -2511,7 +2586,7 @@
"title": "dsh-instance-diagnose — DSH 实例故障诊断",
"status": "?",
"date": "",
"chars": 12545,
"chars": 12542,
"lines": 252,
"refs": 0,
"refsCurrent": 0,
@@ -2541,7 +2616,7 @@
"title": "dsh-opensource-release — 开源导出与版本迭代",
"status": "?",
"date": "",
"chars": 48137,
"chars": 48133,
"lines": 595,
"refs": 0,
"refsCurrent": 0,
@@ -2556,7 +2631,7 @@
"title": "DSH 业务插件故障诊断",
"status": "?",
"date": "",
"chars": 5919,
"chars": 5917,
"lines": 121,
"refs": 0,
"refsCurrent": 0,
@@ -2856,8 +2931,8 @@
"title": "交接单 · 低熵块治理(**测熵先行** + C 域分离 + D 非确定性)",
"status": "待执行",
"date": "",
"chars": 19215,
"lines": 313,
"chars": 43309,
"lines": 620,
"refs": 0,
"refsCurrent": 0,
"tier": "doc",