// Package config reads the gateway credentials from the environment. // // The credentials are never logged, never printed and never written to disk by // this package. package config import ( "fmt" "os" "strings" ) // Environment variable names. const ( EnvUser = "SCHLUNDTECH_USER" EnvPassword = "SCHLUNDTECH_PASSWORD" EnvContext = "SCHLUNDTECH_CONTEXT" EnvToken = "SCHLUNDTECH_TOKEN" EnvEndpoint = "SCHLUNDTECH_ENDPOINT" ) // Credentials are the values needed to talk to the gateway. type Credentials struct { User string Password string Context string Token string Endpoint string } // FromEnv reads the credentials. It reports every missing variable at once so // a first run does not fail one variable at a time. func FromEnv() (Credentials, error) { c := Credentials{ User: strings.TrimSpace(os.Getenv(EnvUser)), Password: os.Getenv(EnvPassword), Context: strings.TrimSpace(os.Getenv(EnvContext)), Token: strings.TrimSpace(os.Getenv(EnvToken)), Endpoint: strings.TrimSpace(os.Getenv(EnvEndpoint)), } var missing []string if c.User == "" { missing = append(missing, EnvUser) } if c.Password == "" { missing = append(missing, EnvPassword) } if c.Context == "" { missing = append(missing, EnvContext) } if len(missing) > 0 { return c, fmt.Errorf("missing environment variable(s): %s", strings.Join(missing, ", ")) } return c, nil }