package config import ( "crypto/rand" "encoding/hex" "log/slog" "os" ) type Config struct { Port string DBPath string SessionSecret string FrontendDir string } func Load() Config { c := Config{ Port: envOr("GOFLARE_PORT", ":42069"), DBPath: envOr("GOFLARE_DB_PATH", "goflare.db"), SessionSecret: os.Getenv("GOFLARE_SESSION_SECRET"), FrontendDir: envOr("GOFLARE_FRONTEND_DIR", "frontend/dist"), } if c.SessionSecret == "" { c.SessionSecret = randomHex(32) slog.Warn("GOFLARE_SESSION_SECRET not set, using random value (sessions won't survive restarts)") } return c } func envOr(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback } func randomHex(n int) string { b := make([]byte, n) _, err := rand.Read(b) if err != nil { panic("failed to generate random bytes: " + err.Error()) } return hex.EncodeToString(b) }