package depot import ( "strconv" "time" ) type Config struct { CDNBase string StorageHost string StorageZone string ReadKey string WriteKey string ProbeJobs int Jobs int ConnectTimeout time.Duration ProbeMaxTime time.Duration ConfirmRetries int ConfirmMax int } func LoadConfig(getenv func(string) string) Config { cfg := Config{ CDNBase: "https://cdn-a7f3k9.westgate.pw", StorageZone: "sow-assets-depot", ProbeJobs: 16, Jobs: 16, ConnectTimeout: 10 * time.Second, ProbeMaxTime: 30 * time.Second, ConfirmRetries: 3, ConfirmMax: 200, } // DEPOT_CDN_BASE || BUNNY_CDN_BASE if v := getenv("DEPOT_CDN_BASE"); v != "" { cfg.CDNBase = v } else if v := getenv("BUNNY_CDN_BASE"); v != "" { cfg.CDNBase = v } // BUNNY_STORAGE_HOST (no default) cfg.StorageHost = getenv("BUNNY_STORAGE_HOST") // BUNNY_STORAGE_ZONE (default "sow-assets-depot") if v := getenv("BUNNY_STORAGE_ZONE"); v != "" { cfg.StorageZone = v } // BUNNY_STORAGE_PASSWORD cfg.WriteKey = getenv("BUNNY_STORAGE_PASSWORD") // BUNNY_STORAGE_READ_PASSWORD || BUNNY_STORAGE_PASSWORD if v := getenv("BUNNY_STORAGE_READ_PASSWORD"); v != "" { cfg.ReadKey = v } else { cfg.ReadKey = cfg.WriteKey } // DEPOT_PROBE_JOBS (default 16) if v := getenv("DEPOT_PROBE_JOBS"); v != "" { if i, err := strconv.Atoi(v); err == nil { cfg.ProbeJobs = i } } // DEPOT_JOBS (default 16) if v := getenv("DEPOT_JOBS"); v != "" { if i, err := strconv.Atoi(v); err == nil { cfg.Jobs = i } } // DEPOT_CONNECT_TIMEOUT (default 10s) if v := getenv("DEPOT_CONNECT_TIMEOUT"); v != "" { if d, err := time.ParseDuration(v + "s"); err == nil { cfg.ConnectTimeout = d } } // DEPOT_PROBE_MAX_TIME (default 30s) if v := getenv("DEPOT_PROBE_MAX_TIME"); v != "" { if d, err := time.ParseDuration(v + "s"); err == nil { cfg.ProbeMaxTime = d } } // DEPOT_CONFIRM_RETRIES (default 3) if v := getenv("DEPOT_CONFIRM_RETRIES"); v != "" { if i, err := strconv.Atoi(v); err == nil { cfg.ConfirmRetries = i } } // DEPOT_CONFIRM_MAX (default 200, 0 = unlimited) if v := getenv("DEPOT_CONFIRM_MAX"); v != "" { if i, err := strconv.Atoi(v); err == nil { cfg.ConfirmMax = i } } return cfg }