config.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Package config reads the gateway credentials from the environment.
  2. //
  3. // The credentials are never logged, never printed and never written to disk by
  4. // this package.
  5. package config
  6. import (
  7. "fmt"
  8. "os"
  9. "strings"
  10. )
  11. // Environment variable names.
  12. const (
  13. EnvUser = "SCHLUNDTECH_USER"
  14. EnvPassword = "SCHLUNDTECH_PASSWORD"
  15. EnvContext = "SCHLUNDTECH_CONTEXT"
  16. EnvToken = "SCHLUNDTECH_TOKEN"
  17. EnvEndpoint = "SCHLUNDTECH_ENDPOINT"
  18. )
  19. // Credentials are the values needed to talk to the gateway.
  20. type Credentials struct {
  21. User string
  22. Password string
  23. Context string
  24. Token string
  25. Endpoint string
  26. }
  27. // FromEnv reads the credentials. It reports every missing variable at once so
  28. // a first run does not fail one variable at a time.
  29. func FromEnv() (Credentials, error) {
  30. c := Credentials{
  31. User: strings.TrimSpace(os.Getenv(EnvUser)),
  32. Password: os.Getenv(EnvPassword),
  33. Context: strings.TrimSpace(os.Getenv(EnvContext)),
  34. Token: strings.TrimSpace(os.Getenv(EnvToken)),
  35. Endpoint: strings.TrimSpace(os.Getenv(EnvEndpoint)),
  36. }
  37. var missing []string
  38. if c.User == "" {
  39. missing = append(missing, EnvUser)
  40. }
  41. if c.Password == "" {
  42. missing = append(missing, EnvPassword)
  43. }
  44. if c.Context == "" {
  45. missing = append(missing, EnvContext)
  46. }
  47. if len(missing) > 0 {
  48. return c, fmt.Errorf("missing environment variable(s): %s", strings.Join(missing, ", "))
  49. }
  50. return c, nil
  51. }