Files
msime-windows/server/tests/src
fanlusky f05507ade8 fix(config): 升级时保住用户已填的 API token 等凭证
用户反映更新后 API token 被清空、需要重填。根因不在安装器(它早已用
onlyifdoesntexist 且清理时保留 config.toml / config.base.toml,从不覆盖用户
配置),而在 Server 启动时的合并路径 SyncConfigWithInstalledTemplate:当
config.toml 存在、非空但解析不过(上次写入被打断留下半截文件,或 token 里混入
破坏 TOML 的字符)时,旧逻辑直接拿出厂模板覆盖,等于把用户全部配置——尤其是
凭证——清零。

配置升级本质上已经是「逐条把用户值重放到新模板」(MergeTomlIntoTemplate),因此
不另建配置操作日志,而是把「逐条重放」精准用在最难重填的凭证上,并堵掉硬重置:

- ReapplyRealCredentials:合并结束时把用户填过真值的凭证逐条重放回去,有键改值、
  无键则在其分节插入。覆盖 token / api_key / apikey / secret_id / secret_key /
  app_id / asr_app_key 及所有 per-provider 槽位(token_* / asr_token[_*] /
  polish_token[_*]),真值判定复用 VoiceInput::IsPlaceholderToken。这样模板漂移
  漏掉某个 token 键也不会静默丢失;占位符不粘住,新默认值照常生效。
- SyncConfigWithInstalledTemplate 的 unparseable 分支:先把坏文件备份成
  config.toml.corrupt-<时间戳> 留证,再逐行抢救可识别赋值重放到新模板;即便整体
  抢救结果仍解析不过,也只回退到「模板 + 重放凭证」,而非纯模板。

新增回归测试:模板漏键时真 token 被写回、未填的占位符跟随新默认、损坏配置能捞回
真 token,以及读安装器真正分发的 config.default.toml 逐分节确认所有凭证键挺过升级。
2026-09-14 03:15:16 +08:00
..
2026-06-20 22:11:00 +08:00