修复: FR-S1 api_key IPC mask + 编辑不回填(防前端拿明文,P0 安全)

- ai_list_providers: 返回前 mask api_key(首尾各4+••••),IPC 不传明文给前端 realm
- ai_save_provider: api_key 空(编辑不改)→保留原 DB 值
- Settings: 编辑不回填 apiKey(留空=不改) + saveProvider 校验编辑时 apiKey 可空
- 注:DB 仍明文存储(c,keyring 加密存储)留迁移单列;本轮解 IPC 传明文 + 前端 realm 持有明文
来源 fullstack-review §2 P0 安全;cargo/vue-tsc 0 err
This commit is contained in:
2026-06-14 22:18:34 +08:00
parent f58743efbc
commit 49ac0601e1
2 changed files with 35 additions and 3 deletions

View File

@@ -443,7 +443,7 @@ function openProviderForm(p?: AiProviderConfig) {
providerForm.editId = p.id
providerForm.name = p.name
providerForm.baseUrl = p.base_url
providerForm.apiKey = p.api_key
providerForm.apiKey = '' // 编辑不回填 api_key(list 返回 mask,留空=不改,FR-S1)
providerForm.defaultModel = p.default_model
providerForm.providerType = p.provider_type || 'openai_compat'
} else {
@@ -458,7 +458,9 @@ function openProviderForm(p?: AiProviderConfig) {
}
async function saveProvider() {
if (!providerForm.name || !providerForm.baseUrl || !providerForm.apiKey || !providerForm.defaultModel) {
// apiKey:新建必填;编辑可留空(不改,FR-S1 后端保留原 DB 值)
const needKey = !providerForm.editId
if (!providerForm.name || !providerForm.baseUrl || (needKey && !providerForm.apiKey) || !providerForm.defaultModel) {
showToast(t('settings.toastSaveIncomplete'), 'warning')
return
}