mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-16 15:43:13 +08:00
新增 domain/platforms.go 作为具体平台的单一数据来源:每个平台一条登记, 写明展示名、所走网关(anthropic / openai / gemini / antigravity)、是否国产 单一厂商、定价目录 provider 名,顺序即展示顺序。 以下列表与判断改为查平台清单: - "全部具体平台":用户平台额度白名单、错误透传规则平台列表、组合路由目标 校验、上游计费探测资格、调度快照遍历、组合分组的定价 / 模型映射回退、 组合分组默认模型列表; - "OpenAI 网关族":IsOpenAICompatible、NormalizeOpenAICompatiblePlatform、 Responses 兼容路由判断、count_tokens 分发、组合分组的 OpenAI 文本目标; - 国产厂商判断、渠道定价同步的 provider 映射; - 多协议 API Key 供应商相关的请求头覆盖资格、凭证测试、OpenAI 基址回退改用 IsMultiProtocolAPIKeyProvider; - 分组平台与组合路由目标的请求校验改为自定义校验标签 group_platform / concrete_platform,拒绝规则不变(大小写、首尾空格、别名一律拒绝)。 组合分组的逐平台回退是先命中者生效,CompositePrecedencePlatformIDs 保持 原有顺序 anthropic、gemini、openai,其余按登记顺序追加。依赖具体实现的 能力(OAuth、渠道监控、调度阈值、余额 / 用量窗口、Codex 模型目录等)仍在 各自代码中显式列出。 等价性测试把改动前的每个列表与 switch 原样保留为基准,逐一比较派生结果 (含顺序),谓词覆盖全部平台、composite 与非法值 × 全部账号类型。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
873 B
Go
25 lines
873 B
Go
package admin
|
|
|
|
import (
|
|
"github.com/Wei-Shaw/sub2api/internal/domain"
|
|
"github.com/gin-gonic/gin/binding"
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
// 平台相关的请求绑定校验标签,由平台清单(domain/platforms.go)驱动,替代在
|
|
// binding 标签里手写 oneof 白名单(新增平台时易漏加,导致分组无法创建):
|
|
// - group_platform:已登记的具体平台或 composite;
|
|
// - concrete_platform:已登记的具体平台。
|
|
func init() {
|
|
engine, ok := binding.Validator.Engine().(*validator.Validate)
|
|
if !ok {
|
|
return
|
|
}
|
|
_ = engine.RegisterValidation("group_platform", func(fl validator.FieldLevel) bool {
|
|
return domain.IsGroupPlatform(fl.Field().String())
|
|
})
|
|
_ = engine.RegisterValidation("concrete_platform", func(fl validator.FieldLevel) bool {
|
|
return domain.IsConcretePlatform(fl.Field().String())
|
|
})
|
|
}
|