Files
Volcano-Engine-TTS-UI/controller
sun 59c0027122 fix(cors): SettingsCORSRequest.Origins 改 *string,支持显式清空
Bug 2 报告: controller/settings.go:330-332 的死代码
  if body.AllowAll == nil && trimAll(body.Origins) == "" && body.Origins != "" {
      // 空 body 不算错误
  }
该条件永远 false (trim 空 != "" 矛盾), 整个 if 块只注释不执行。

更严重的是: 用户无法清空 origins —
原代码 body.Origins == "" 就 400, 但用户可能就是想传空串清空。
struct 字段是 string, 区分不出"未传"和"传空串"。

修法:
- struct.SettingsCORSRequest.Origins: string → *string
  - nil = 未传 (不动)
  - *""  = 传空串 (清空)
  - *"url1\nurl2" = 覆盖
- 删掉 line 330-332 死代码
- 改校验逻辑:
  - 2 个字段都 nil → 400 no_fields
  - 至少一个非 nil → 200
- 空串不校验 origin 格式 (无 origin 可校), 直接存

行为变更:
  - {"origins": "https://a.com"} → 写, 同以前
  - {"origins": ""} → 清空 (新功能, 以前返 400)
  - {"origins": null} → 视为未传, 不动
  - {"allow_all": true} → 写, 同以前
  - {"allow_all": false} → 设为 false, 同以前
  - {} → 400 no_fields
  - {"origins": "not-a-url"} → 400 origin_invalid (同以前)

测试: test/integration/settings_test.go (gitignored) 5 个 case
  - EmptyOrigins_ClearsOrigins
  - OriginsNotInBody_NotTouched
  - EmptyBody_400
  - NullOrigins_TreatedAsMissing
  - InvalidOrigin_400

e2e: 4 场景全过 (设/清空/空 body 400/null 不动)。

不向后兼容: SettingsCORSRequest 内部 DTO, 仅 admin webui 调,
不暴露给外部 OpenAI 客户端。

未 push (待用户)
2026-09-05 11:42:48 +08:00
..