package env import ( "log" "net/url" "os" ) func GuaranteeEnv(key string) string { variable, ok := os.LookupEnv(key) if !ok || variable == "" { log.Fatalln("Missing environment variable:", key) } return variable } type Config struct { DatabaseFile string SessionSecret string HostRootUrl string HostPort string ServePort string InDev bool HostUrl string } var Configuration Config func init() { Configuration.DatabaseFile = GuaranteeEnv("LISHWIST_DATABASE_FILE") Configuration.SessionSecret = GuaranteeEnv("LISHWIST_SESSION_SECRET") Configuration.HostRootUrl = GuaranteeEnv("LISHWIST_HOST_ROOT_URL") Configuration.HostPort = os.Getenv("LISHWIST_HOST_PORT") Configuration.ServePort = GuaranteeEnv("LISHWIST_SERVE_PORT") Configuration.InDev = os.Getenv("LISHWIST_IN_DEV") != "" Configuration.HostUrl = func() string { rawUrl := Configuration.HostRootUrl if Configuration.HostPort != "" { rawUrl += ":" + Configuration.HostPort } u, err := url.Parse(rawUrl) if err != nil { log.Fatalln("Couldn't parse host url:", err) } return u.String() }() }