Admin:AI 服务商 Base URL 兼容 HTTP #223

Open
opened 2026-08-14 11:11:34 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#199 / AI规格批量匹配
  • 阶段:1. 管理员模型配置与外部接口兼容

要解决什么

当前 AI 服务商 Base URL 只接受 HTTPS,管理员无法接入仅提供 HTTP 的 OpenAI 兼容接口。用户已明确要求同时兼容 HTTP 和 HTTPS,并且不增加新的配置项。

做什么 / 不做什么

  • 做:
    • AI Base URL 语法校验同时接受 http:// 和 https://。
    • HTTP 与 HTTPS 共用现有 URL 凭据、查询参数、片段、DNS、实际拨号、重定向和 SSRF 校验。
    • 更新 AI 配置页面提示及 Admin 架构、数据模型文档。
    • 增加 HTTP/HTTPS、危险地址和真实本机 HTTP 测试服务回归测试。
  • 不做:
    • 不新增 HTTP 开关、允许列表字段、环境变量或网页配置。
    • 不放宽现有私网、回环、链路本地、元数据地址限制;私网地址仍只受现有 allowed_hosts 控制。
    • 不修改数据库结构、API Key 存储方式、AI 匹配逻辑或 Client 接口。

怎么���

  • 修改 admin/service/ai_config.go,把协议校验从仅 HTTPS 改为明确允许 HTTP/HTTPS,其他校验顺序和规则保持不变。
  • 修改 admin/service/ai_config_test.go,覆盖公网 HTTP/HTTPS、非法协议、两种协议下的危险地址,以及经现有 allowed_hosts 放行的本机 HTTP 测试服务调用。
  • 修改 admin/templates/ai/list.html 的 Base URL 输入提示。
  • 同步 docs/admin/02-architecture.md、docs/admin/03-data-model.md 中的协议口径。

验收标准

  • 管理员可以新增、保存、测试并启用合法的 HTTP AI 服务商地址。
  • 现有 HTTPS 服务商行为保持不变。
  • HTTP/HTTPS 地址都拒绝 URL 内凭据、查询参数和片段。
  • HTTP 不绕过现有私网、回环、链路本地、元数据、DNS、实际拨号和重定向校验。
  • 不增加任何新配置项,不修改数据库 schema 和 API Key 存储方案。
  • 固定 Go 1.23.0 的 build、test、vet 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go test ./service -count=1
go build ./...
go test ./... -count=1
go vet ./...
Remove-Item Env:GOTOOLCHAIN

测试使用本机临时 HTTP 服务并通过现有测试级 allowed_hosts 放行,不连接真实模型、不使用真实 API Key。

风险和回退

  • 风险:HTTP 会以明文传输 Authorization 和业务请求,链路被监听时可能泄露 API Key 和匹配内容;本工单按用户明确要求兼容,不把 HTTP 安全性伪装成 HTTPS。现有 SSRF 防护继续生效,但不能提供传输加密。
  • 回退:回退本工单代码和文档提交即可恢复仅 HTTPS;无数据库迁移和数据清理。

实施记录(2026-08-14)

  • 状态:已完成,待用户验收。
  • 实现提交:1e0b7ad。
  • 归档提交:557c996。
  • 归档文档:docs/task/223-Admin-AI服务商BaseURL兼容HTTP.md。
  • 验证:固定 Go 1.23.0 的定向测试、全量 build、test、vet 和模板相关测试通过。
  • 未验证:真实 HTTP AI 服务商、真实 API Key、生产部署及 1366×768 浏览器人工检查。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#199 / AI规格批量匹配 - 阶段:1. 管理员模型配置与外部接口兼容 ## 要解决什么 当前 AI 服务商 Base URL 只接受 HTTPS,管理员无法接入仅提供 HTTP 的 OpenAI 兼容接口。用户已明确要求同时兼容 HTTP 和 HTTPS,并且不增加新的配置项。 ## 做什么 / 不做什么 - 做: - AI Base URL 语法校验同时接受 `http://` 和 `https://`。 - HTTP 与 HTTPS 共用现有 URL 凭据、查询参数、片段、DNS、实际拨号、重定向和 SSRF 校验。 - 更新 AI 配置页面提示及 Admin 架构、数据模型文档。 - 增加 HTTP/HTTPS、危险地址和真实本机 HTTP 测试服务回归测试。 - 不做: - 不新增 HTTP 开关、允许列表字段、环境变量或网页配置。 - 不放宽现有私网、回环、链路本地、元数据地址限制;私网地址仍只受现有 `allowed_hosts` 控制。 - 不修改数据库结构、API Key 存储方式、AI 匹配逻辑或 Client 接口。 ## 怎么��� - 修改 `admin/service/ai_config.go`,把协议校验从仅 HTTPS 改为明确允许 HTTP/HTTPS,其他校验顺序和规则保持不变。 - 修改 `admin/service/ai_config_test.go`,覆盖公网 HTTP/HTTPS、非法协议、两种协议下的危险地址,以及经现有 `allowed_hosts` 放行的本机 HTTP 测试服务调用。 - 修改 `admin/templates/ai/list.html` 的 Base URL 输入提示。 - 同步 `docs/admin/02-architecture.md`、`docs/admin/03-data-model.md` 中的协议口径。 ## 验收标准 - [x] 管理员可以新增、保存、测试并启用合法的 HTTP AI 服务商地址。 - [x] 现有 HTTPS 服务商行为保持不变。 - [x] HTTP/HTTPS 地址都拒绝 URL 内凭据、查询参数和片段。 - [x] HTTP 不绕过现有私网、回环、链路本地、元数据、DNS、实际拨号和重定向校验。 - [x] 不增加任何新配置项,不修改数据库 schema 和 API Key 存储方案。 - [x] 固定 Go 1.23.0 的 build、test、vet 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./service -count=1 go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 测试使用本机临时 HTTP 服务并通过现有测试级 `allowed_hosts` 放行,不连接真实模型、不使用真实 API Key。 ## 风险和回退 - 风险:HTTP 会以明文传输 Authorization 和业务请求,链路被监听时可能泄露 API Key 和匹配内容;本工单按用户明确要求兼容,不把 HTTP 安全性伪装成 HTTPS。现有 SSRF 防护继续生效,但不能提供传输加密。 - 回退:回退本工单代码和文档提交即可恢复仅 HTTPS;无数据库迁移和数据清理。 ## 实施记录(2026-08-14) - 状态:已完成,待用户验收。 - 实现提交:`1e0b7ad`。 - 归档提交:`557c996`。 - 归档文档:`docs/task/223-Admin-AI服务商BaseURL兼容HTTP.md`。 - 验证:固定 Go 1.23.0 的定向测试、全量 build、test、vet 和模板相关测试通过。 - 未验证:真实 HTTP AI 服务商、真实 API Key、生产部署及 1366×768 浏览器人工检查。
Author
Owner

状态:进行中

已完成实现与自动化验证:

  • AIEndpointPolicy.ValidateSyntax 改为明确接受 HTTP/HTTPS,拒绝其他协议;两种协议继续共用 URL 凭据、查询参数、片段、私网/回环/元数据限制。
  • 现有 allowed_hosts 同时适用于私有 HTTP/HTTPS,没有新增配置项。
  • 增加真实本机临时 HTTP OpenAI 兼容端点测试,验证安全客户端可以完成连接测试。
  • AI 配置页增加 HTTP 示例和明文传输说明;同步 Admin 架构、数据模型、质量安全与示例配置口径。

验证通过:

$env:GOTOOLCHAIN="go1.23.0"
go test ./service -run 'TestAIEndpointPolicy|TestSafeAIHTTPClient|TestCallAIHealthCheck' -count=1
go build ./...
go test ./... -count=1
go vet ./...
go test ./handler/web ./service -count=1

未连接真实 HTTP 模型服务,未使用真实 API Key,未进行浏览器 1366×768 人工视觉验收。

状态:进行中 已完成实现与自动化验证: - `AIEndpointPolicy.ValidateSyntax` 改为明确接受 HTTP/HTTPS,拒绝其他协议;两种协议继续共用 URL 凭据、查询参数、片段、私网/回环/元数据限制。 - 现有 `allowed_hosts` 同时适用于私有 HTTP/HTTPS,没有新增配置项。 - 增加真实本机临时 HTTP OpenAI 兼容端点测试,验证安全客户端可以完成连接测试。 - AI 配置页增加 HTTP 示例和明文传输说明;同步 Admin 架构、数据模型、质量安全与示例配置口径。 验证通过: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./service -run 'TestAIEndpointPolicy|TestSafeAIHTTPClient|TestCallAIHealthCheck' -count=1 go build ./... go test ./... -count=1 go vet ./... go test ./handler/web ./service -count=1 ``` 未连接真实 HTTP 模型服务,未使用真实 API Key,未进行浏览器 1366×768 人工视觉验收。
Author
Owner

实现完成,等待用户验收。

  • 实现提交:1e0b7ad feat: AI 服务商接口兼容 HTTP (#223)
  • 归档提交:557c996 docs: 归档任务 #223
  • 归档:docs/task/223-Admin-AI服务商BaseURL兼容HTTP.md
  • 自动化:固定 Go 1.23.0 的 build、test、vet 全部通过;本机临时 HTTP OpenAI 兼容端点调用通过。
  • 范围:没有新增配置项、数据库迁移或 Client 接口改动。
  • 未验证:真实 HTTP 模型服务、真实 API Key、生产部署和浏览器人工验收。

工单保持打开,待用户明确验收后再关闭并同步 #199、#200、#14。

实现完成,等待用户验收。 - 实现提交:`1e0b7ad` feat: AI 服务商接口兼容 HTTP (#223) - 归档提交:`557c996` docs: 归档任务 #223 - 归档:`docs/task/223-Admin-AI服务商BaseURL兼容HTTP.md` - 自动化:固定 Go 1.23.0 的 build、test、vet 全部通过;本机临时 HTTP OpenAI 兼容端点调用通过。 - 范围:没有新增配置项、数据库迁移或 Client 接口改动。 - 未验证:真实 HTTP 模型服务、真实 API Key、生产部署和浏览器人工验收。 工单保持打开,待用户明确验收后再关闭并同步 #199、#200、#14。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#223