mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-09-20 00:48:00 +00:00
feat(secrets): encrypt sensitive store fields (AES-GCM, master.key 0600, api_key_env) + fast models-endpoint probing (fix zen backlog + source status) + UI cleanup (drop redundant parens labels, grid models 4/row)
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"llmsproxy/internal/config"
|
||||
@ -259,12 +260,27 @@ func (c *Core) mergedSources() []config.Source {
|
||||
for _, n := range order {
|
||||
if !seen[n] {
|
||||
seen[n] = true
|
||||
out = append(out, byName[n])
|
||||
out = append(out, c.resolveSourceKey(byName[n]))
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// resolveSourceKey applies api_key_env (env var overrides inline api_key) and
|
||||
// decrypts an inline enc:v1: ciphertext (useful for YAML-sourced keys).
|
||||
func (c *Core) resolveSourceKey(s config.Source) config.Source {
|
||||
if s.APIKeyEnv != "" {
|
||||
if v := os.Getenv(s.APIKeyEnv); v != "" {
|
||||
s.APIKey = v
|
||||
}
|
||||
return s
|
||||
}
|
||||
if box := c.store.SecretBox(); box != nil && strings.HasPrefix(s.APIKey, "enc:v1:") {
|
||||
s.APIKey = box.MustDecrypt(s.APIKey)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func (c *Core) rebuildRegistry() error {
|
||||
srcs := c.mergedSources()
|
||||
providers := make([]*provider.Provider, 0, len(srcs))
|
||||
|
||||
Reference in New Issue
Block a user