config.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package s3
  2. import (
  3. "errors"
  4. "github.com/imgproxy/imgproxy/v3/ensure"
  5. "github.com/imgproxy/imgproxy/v3/env"
  6. )
  7. var (
  8. IMGPROXY_S3_REGION = env.Describe("IMGPROXY_S3_REGION", "string")
  9. IMGPROXY_S3_ENDPOINT = env.Describe("IMGPROXY_S3_ENDPOINT", "string")
  10. IMGPROXY_S3_ENDPOINT_USE_PATH_STYLE = env.Describe("IMGPROXY_S3_ENDPOINT_USE_PATH_STYLE", "boolean")
  11. IMGPROXY_S3_ASSUME_ROLE_ARN = env.Describe("IMGPROXY_S3_ASSUME_ROLE_ARN", "string")
  12. IMGPROXY_S3_ASSUME_ROLE_EXTERNAL_ID = env.Describe("IMGPROXY_S3_ASSUME_ROLE_EXTERNAL_ID", "string")
  13. IMGPROXY_S3_DECRYPTION_CLIENT_ENABLED = env.Describe("IMGPROXY_S3_DECRYPTION_CLIENT_ENABLED", "boolean")
  14. )
  15. // Config holds the configuration for S3 transport
  16. type Config struct {
  17. Region string // AWS region for S3 (default: "")
  18. Endpoint string // Custom endpoint for S3 (default: "")
  19. EndpointUsePathStyle bool // Use path-style URLs for S3 (default: true)
  20. AssumeRoleArn string // ARN for assuming an AWS role (default: "")
  21. AssumeRoleExternalID string // External ID for assuming an AWS role (default: "")
  22. DecryptionClientEnabled bool // Enables S3 decryption client (default: false)
  23. }
  24. // NewDefaultConfig returns a new default configuration for S3 transport
  25. func NewDefaultConfig() Config {
  26. return Config{
  27. Region: "",
  28. Endpoint: "",
  29. EndpointUsePathStyle: true,
  30. AssumeRoleArn: "",
  31. AssumeRoleExternalID: "",
  32. DecryptionClientEnabled: false,
  33. }
  34. }
  35. // LoadConfigFromEnv loads configuration from the global config package
  36. func LoadConfigFromEnv(c *Config) (*Config, error) {
  37. c = ensure.Ensure(c, NewDefaultConfig)
  38. err := errors.Join(
  39. env.String(&c.Region, IMGPROXY_S3_REGION),
  40. env.String(&c.Endpoint, IMGPROXY_S3_ENDPOINT),
  41. env.Bool(&c.EndpointUsePathStyle, IMGPROXY_S3_ENDPOINT_USE_PATH_STYLE),
  42. env.String(&c.AssumeRoleArn, IMGPROXY_S3_ASSUME_ROLE_ARN),
  43. env.String(&c.AssumeRoleExternalID, IMGPROXY_S3_ASSUME_ROLE_EXTERNAL_ID),
  44. env.Bool(&c.DecryptionClientEnabled, IMGPROXY_S3_DECRYPTION_CLIENT_ENABLED),
  45. )
  46. return c, err
  47. }
  48. // Validate checks the configuration for errors
  49. func (c *Config) Validate() error {
  50. return nil
  51. }