e53e7662e9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
OpenAIAPIKey string
|
|
SessionSecret string
|
|
DataDir string
|
|
Port string
|
|
AdminUsers []AdminUser
|
|
LLMModel string // defaults to gpt-4o-mini
|
|
}
|
|
|
|
type AdminUser struct {
|
|
Name string
|
|
Password string
|
|
}
|
|
|
|
func Load() *Config {
|
|
cfg := &Config{
|
|
OpenAIAPIKey: os.Getenv("OPENAI_API_KEY"),
|
|
SessionSecret: os.Getenv("SESSION_SECRET"),
|
|
DataDir: envOr("DATA_DIR", "./data"),
|
|
Port: envOr("PORT", "8080"),
|
|
LLMModel: envOr("LLM_MODEL", "gpt-4o-mini"),
|
|
}
|
|
cfg.AdminUsers = parseAdminUsers(os.Getenv("ADMIN_USERS"))
|
|
return cfg
|
|
}
|
|
|
|
func envOr(key, def string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
|
|
func parseAdminUsers(raw string) []AdminUser {
|
|
if raw == "" {
|
|
return nil
|
|
}
|
|
var users []AdminUser
|
|
for _, pair := range strings.Split(raw, ",") {
|
|
pair = strings.TrimSpace(pair)
|
|
name, pass, ok := strings.Cut(pair, ":")
|
|
if !ok || name == "" || pass == "" {
|
|
continue
|
|
}
|
|
users = append(users, AdminUser{Name: name, Password: pass})
|
|
}
|
|
return users
|
|
}
|