load.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package env
  2. import (
  3. "context"
  4. "fmt"
  5. "os"
  6. "github.com/DarthSim/godotenv"
  7. )
  8. var (
  9. IMGPROXY_ENV_LOCAL_FILE_PATH = Describe("IMGPROXY_ENV_LOCAL_FILE_PATH", "path")
  10. )
  11. // Load loads environment variables from various sources
  12. func Load(ctx context.Context) error {
  13. if err := loadAWSSecret(ctx); err != nil {
  14. return err
  15. }
  16. if err := loadAWSSystemManagerParams(ctx); err != nil {
  17. return err
  18. }
  19. if err := loadGCPSecret(ctx); err != nil {
  20. return err
  21. }
  22. if err := loadLocalFile(); err != nil {
  23. return err
  24. }
  25. return nil
  26. }
  27. // loadLocalFile loads environment variables from a local file if IMGPROXY_ENV_LOCAL_FILE_PATH is set
  28. func loadLocalFile() error {
  29. var path string
  30. String(&path, IMGPROXY_ENV_LOCAL_FILE_PATH)
  31. if len(path) == 0 {
  32. return nil
  33. }
  34. // Read the local environment file
  35. data, err := os.ReadFile(path)
  36. if err != nil {
  37. return fmt.Errorf("can't read local environment file: %s", err)
  38. }
  39. // If the file is empty, nothing to load
  40. if len(data) == 0 {
  41. return nil
  42. }
  43. return unmarshalEnv(string(data), "local file")
  44. }
  45. // unmarshalEnv loads environment variables from a string to process environment
  46. func unmarshalEnv(env, source string) error {
  47. // Parse the secret string as env variables and set them
  48. envmap, err := godotenv.Unmarshal(env)
  49. if err != nil {
  50. return fmt.Errorf("can't parse config from %s: %s", source, err)
  51. }
  52. for k, v := range envmap {
  53. if err = os.Setenv(k, v); err != nil {
  54. return fmt.Errorf("can't set %s env variable from %s: %s", k, source, err)
  55. }
  56. }
  57. return nil
  58. }