auth-runtime/cli/config.go

112 lines
2.4 KiB
Go
Raw Permalink Normal View History

package main
import (
"bufio"
"os"
"path/filepath"
"strings"
)
// Config holds all auth configuration.
type Config struct {
AuthBase string
ClientKey string
CacheDir string
MinTTLSec int
APIBase string // for business API calls, defaults to AuthBase
}
// loadConfig reads ~/.openclaw/.env and builds Config.
func loadConfig() Config {
loadEnvFile()
authBase := strings.TrimRight(envOrDefault("AUTH_BASE", "https://api-gw-test.yuanwei-lnc.com"), "/")
clientKey := os.Getenv("CLIENT_KEY")
cfg := Config{
AuthBase: authBase,
ClientKey: clientKey,
CacheDir: envOrDefault("AUTH_CACHE_DIR", "/tmp/skill-auth-cache"),
MinTTLSec: envOrDefaultInt("AUTH_MIN_TTL_SEC", 60),
APIBase: strings.TrimRight(envOrDefault("ECOM_BASE", authBase), "/"),
}
return cfg
}
// reloadConfig re-reads .env from disk and rebuilds config.
func reloadConfig(old Config) Config {
loadEnvFile()
return Config{
AuthBase: strings.TrimRight(envOrDefault("AUTH_BASE", "https://api-gw-test.yuanwei-lnc.com"), "/"),
ClientKey: os.Getenv("CLIENT_KEY"),
CacheDir: envOrDefault("AUTH_CACHE_DIR", "/tmp/skill-auth-cache"),
MinTTLSec: envOrDefaultInt("AUTH_MIN_TTL_SEC", 60),
APIBase: old.APIBase, // preserve explicit override
}
}
// loadEnvFile reads ~/.openclaw/.env into os environment.
// File values always override existing env vars (no caching).
func loadEnvFile() {
home, err := os.UserHomeDir()
if err != nil {
return
}
envPath := filepath.Join(home, ".openclaw", ".env")
f, err := os.Open(envPath)
if err != nil {
return
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" || strings.HasPrefix(line, "#") {
continue
}
idx := strings.Index(line, "=")
if idx < 1 {
continue
}
key := strings.TrimSpace(line[:idx])
value := strings.TrimSpace(line[idx+1:])
// strip surrounding quotes
if len(value) >= 2 {
if (value[0] == '"' && value[len(value)-1] == '"') ||
(value[0] == '\'' && value[len(value)-1] == '\'') {
value = value[1 : len(value)-1]
}
}
os.Setenv(key, value)
}
}
func envOrDefault(key, def string) string {
if v := os.Getenv(key); v != "" {
return v
}
return def
}
func envOrDefaultInt(key string, def int) int {
v := os.Getenv(key)
if v == "" {
return def
}
n := 0
for _, c := range v {
if c < '0' || c > '9' {
return def
}
n = n*10 + int(c-'0')
}
return n
}