package config import ( "crypto/rand" "encoding/hex" "log" "os" "strings" ) type Config struct { AdminEmail string AdminPassword string SessionSecret string UploadDir string PublicBaseURL string HeleketMerchantID string HeleketPaymentAPIKey string HeleketCurrency string } func Load() Config { cfg := Config{ AdminEmail: os.Getenv("ADMIN_EMAIL"), AdminPassword: os.Getenv("ADMIN_PASSWORD"), SessionSecret: os.Getenv("SESSION_SECRET"), UploadDir: os.Getenv("UPLOAD_DIR"), PublicBaseURL: strings.TrimRight(os.Getenv("PUBLIC_BASE_URL"), "/"), HeleketMerchantID: os.Getenv("HELEKET_MERCHANT_ID"), HeleketPaymentAPIKey: os.Getenv("HELEKET_PAYMENT_API_KEY"), HeleketCurrency: os.Getenv("HELEKET_CURRENCY"), } if cfg.HeleketCurrency == "" { cfg.HeleketCurrency = "RUB" } if cfg.UploadDir == "" { cfg.UploadDir = "/app/data/uploads" } if cfg.SessionSecret == "" { cfg.SessionSecret = randomSecret() log.Println("warning: SESSION_SECRET not set, using random value (sessions reset on restart)") } return cfg } func randomSecret() string { b := make([]byte, 32) if _, err := rand.Read(b); err != nil { panic(err) } return hex.EncodeToString(b) }