package config import ( "fmt" "os" "strconv" ) type Config struct { Mode string DatabaseUrl string Port int Ip string AuthEnabled bool AuthUsername string AuthPassword string AuthKey string DataRetentionInDays int64 } func LoadConfig() *Config { port, err := strconv.Atoi(os.Getenv("PORT")) if err != nil { panic(fmt.Errorf("PORT must be an integer: %v", err)) } dataRetentionInDaysStr := os.Getenv("DATA_RETENTION_IN_DAYS") dataRetentionInDays := 0 if dataRetentionInDaysStr != "" { dataRetentionInDays, err = strconv.Atoi(dataRetentionInDaysStr) if err != nil { panic(fmt.Errorf("DATA_RETENTION_IN_DAYS must be an integer: %v", err)) } } config := Config{ Mode: os.Getenv("GIN_MODE"), DatabaseUrl: os.Getenv("DATABASE_URL"), Port: port, Ip: os.Getenv("BIND_IP"), AuthEnabled: os.Getenv("AUTH_ENABLED") != "false", AuthUsername: os.Getenv("AUTH_USERNAME"), AuthPassword: os.Getenv("AUTH_PASSWORD"), AuthKey: os.Getenv("AUTH_KEY"), DataRetentionInDays: int64(dataRetentionInDays), } // TODO: Crash when any auth* param is empty return &config }