mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-14 12:02:27 +08:00
fix(security-audit): 解密失败不再吞掉整份配置,修复升级后配置消失且无法保存的死锁 (#4887)
根因:prompt audit 是共享 TOTP_ENCRYPTION_KEY 加密器的功能中唯一不校验 EncryptionKeyConfigured 的落点。未配置固定密钥的部署每次重启自动生成新 密钥,v162 保存的节点 Token 密文在升级重启后永久无法解密,Reload 中 ActiveFromStorage 整体失败导致快照永远装不上:管理端 GET 回退默认 v1 (v166 起为 503),而保存路径直读数据库做 CAS 版本对比,必然冲突—— 配置既看不见也改不掉。PR #4893 仅改变了报错形态,未修复根因。 修复: - ActiveFromStorage 对单节点解密失败降级容忍:该节点运行时禁用并标记 TokenInvalid,配置整体照常激活;管理端恢复显示真实版本号,重新输入 Token 即可自愈(密文保留,密钥恢复后自动复原) - blocking 意图下零可用节点时 evaluator 仍返回 unavailable,请求照旧 被拒,fail-closed 语义不回归;async 意图下 enqueue 直接 drop 并告警 - Save 在未配置固定加密密钥时拒绝保存新 Token(与 TOTP/Ollama/备份 一致的门控),错误码 prompt_audit_encryption_key_required - token_status 新增 invalid 状态,前端凭据列与编辑框提示重新输入 - 新增 config_token_invalid 告警日志(集合变化时记录一次,不随 5s 刷新刷屏)
This commit is contained in:
@@ -255,7 +255,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
||||
contentModerationHashCache := repository.NewContentModerationHashCache(redisClient)
|
||||
contentModerationService := service.NewContentModerationService(settingRepository, contentModerationRepository, contentModerationHashCache, groupRepository, userRepository, apiKeyAuthCacheInvalidator, emailService)
|
||||
contentModerationHandler := admin.NewContentModerationHandler(contentModerationService)
|
||||
configManager := securityaudit.NewConfigManager(db, settingRepository, redisClient, secretEncryptor)
|
||||
configManager := securityaudit.NewConfigManager(db, settingRepository, redisClient, secretEncryptor, configConfig)
|
||||
postgreSQLRepository := securityaudit.NewPostgreSQLRepository(db)
|
||||
redisPayloadStore := securityaudit.NewRedisPayloadStore(redisClient)
|
||||
openAICompatibleScanner := securityaudit.NewOpenAICompatibleScanner()
|
||||
|
||||
Reference in New Issue
Block a user