refactor(routing): 暴露 system_locked_domains + 服务端 follow-up 清理(FK/Validate/dedup/exclude单源/共用Store/Builtin保留)

This commit is contained in:
wangjia
2026-07-29 06:38:52 +08:00
parent 52912268d0
commit 3159dd75c1
11 changed files with 285 additions and 36 deletions
+13 -10
View File
@@ -408,7 +408,18 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
accountAPI := httpapi.NewAccountAPI(sqlDB)
// ── Routing profile (可配置分流) ───────────────────────────────────────────
routingAPI := httpapi.NewRoutingAPI(routing.NewStore(sqlDB))
// 私有服务域名分流(家庭内网穿透,如 nas/git/win.yanmeiai.com):逗号分隔;
// 这些域名用系统 DNS 解析、在外强制走隧道(排在国内分流前)。用户对这些域名的
// 自定义规则会静默失效——同一份 slice 注入 RoutingAPI,GET /v1/me/routing
// 附带 system_locked_domains 供客户端提示,以及 NodeAPI(渲染 sing-box 配置)。
var privateSplitDomains []string
for _, d := range strings.Split(os.Getenv("PANGOLIN_PRIVATE_SPLIT_DOMAINS"), ",") {
if d = strings.TrimSpace(d); d != "" {
privateSplitDomains = append(privateSplitDomains, d)
}
}
routingStore := routing.NewStore(sqlDB)
routingAPI := httpapi.NewRoutingAPI(routingStore, privateSplitDomains)
// ── Nodes + Connect ───────────────────────────────────────────────────────
var nodeAPI *httpapi.NodeAPI
@@ -423,15 +434,7 @@ func mountV1(r chi.Router, sqlDB *sql.DB, rdb *redis.Client, nodeSvc *nodes.Serv
slog.Warn("PANGOLIN_PUBLIC_URL 未设置:国内分流(split_cn)将被静默跳过,客户端全量走隧道。" +
"如需国内直连,设为控制面对外公网基址(如 http://<公网IP>:8080)")
}
// 私有服务域名分流(家庭内网穿透,如 nas/git/win.yanmeiai.com):
// 逗号分隔;这些域名用系统 DNS 解析、在外强制走隧道(排在国内分流前)。
var privateSplitDomains []string
for _, d := range strings.Split(os.Getenv("PANGOLIN_PRIVATE_SPLIT_DOMAINS"), ",") {
if d = strings.TrimSpace(d); d != "" {
privateSplitDomains = append(privateSplitDomains, d)
}
}
nodeAPI = httpapi.NewNodeAPI(nodeStore, nodeSvc.Hub(), nodeSvc.Load(), os.Getenv("NODE_DERIVE_KEY"), publicURL, privateSplitDomains, routing.NewStore(sqlDB))
nodeAPI = httpapi.NewNodeAPI(nodeStore, nodeSvc.Hub(), nodeSvc.Load(), os.Getenv("NODE_DERIVE_KEY"), publicURL, privateSplitDomains, routingStore)
}
// 国内分流(#5)的 rule-set 静态服务:GET /v1/rules/{name}.srs(自托管,