mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-05-08 02:26:52 +02:00
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// expandEnvVar 展开字符串中的 ${VAR} 和 ${VAR:-default} 环境变量引用。
|
|
// 与官方 MCP 配置格式一致(Claude Desktop / Cursor / VS Code 均支持此语法)。
|
|
func expandEnvVar(s string) string {
|
|
var b strings.Builder
|
|
i := 0
|
|
for i < len(s) {
|
|
// 查找 ${
|
|
idx := strings.Index(s[i:], "${")
|
|
if idx < 0 {
|
|
b.WriteString(s[i:])
|
|
break
|
|
}
|
|
b.WriteString(s[i : i+idx])
|
|
i += idx + 2 // skip ${
|
|
|
|
// 查找对应的 }
|
|
end := strings.IndexByte(s[i:], '}')
|
|
if end < 0 {
|
|
// 没有 },原样保留
|
|
b.WriteString("${")
|
|
continue
|
|
}
|
|
expr := s[i : i+end]
|
|
i += end + 1 // skip }
|
|
|
|
// 解析 VAR:-default
|
|
varName := expr
|
|
defaultVal := ""
|
|
hasDefault := false
|
|
if colonIdx := strings.Index(expr, ":-"); colonIdx >= 0 {
|
|
varName = expr[:colonIdx]
|
|
defaultVal = expr[colonIdx+2:]
|
|
hasDefault = true
|
|
}
|
|
|
|
val := os.Getenv(varName)
|
|
if val == "" && hasDefault {
|
|
val = defaultVal
|
|
}
|
|
b.WriteString(val)
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
// ExpandConfigEnv 展开 ExternalMCPServerConfig 中所有支持环境变量的字段。
|
|
// 展开范围:Command、Args、Env values、URL、Headers values。
|
|
func ExpandConfigEnv(cfg *ExternalMCPServerConfig) {
|
|
cfg.Command = expandEnvVar(cfg.Command)
|
|
for i, arg := range cfg.Args {
|
|
cfg.Args[i] = expandEnvVar(arg)
|
|
}
|
|
for k, v := range cfg.Env {
|
|
cfg.Env[k] = expandEnvVar(v)
|
|
}
|
|
cfg.URL = expandEnvVar(cfg.URL)
|
|
for k, v := range cfg.Headers {
|
|
cfg.Headers[k] = expandEnvVar(v)
|
|
}
|
|
}
|