config.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package processing
  2. import (
  3. "errors"
  4. "net/http"
  5. "github.com/imgproxy/imgproxy/v3/ensure"
  6. "github.com/imgproxy/imgproxy/v3/env"
  7. )
  8. var (
  9. IMGPROXY_REPORT_DOWNLOADING_ERRORS = env.Describe("IMGPROXY_REPORT_DOWNLOADING_ERRORS", "boolean")
  10. IMGPROXY_LAST_MODIFIED_ENABLED = env.Describe("IMGPROXY_LAST_MODIFIED_ENABLED", "boolean")
  11. IMGPROXY_ETAG_ENABLED = env.Describe("IMGPROXY_ETAG_ENABLED", "boolean")
  12. IMGPROXY_REPORT_IO_ERRORS = env.Describe("IMGPROXY_REPORT_IO_ERRORS", "boolean")
  13. IMGPROXY_FALLBACK_IMAGE_HTTP_CODE = env.Describe("IMGPROXY_FALLBACK_IMAGE_HTTP_CODE", "HTTP code")
  14. IMGPROXY_ENABLE_DEBUG_HEADERS = env.Describe("IMGPROXY_ENABLE_DEBUG_HEADERS", "boolean")
  15. )
  16. // Config represents handler config
  17. type Config struct {
  18. ReportDownloadingErrors bool // Whether to report downloading errors
  19. LastModifiedEnabled bool // Whether to enable Last-Modified
  20. ETagEnabled bool // Whether to enable ETag
  21. ReportIOErrors bool // Whether to report IO errors
  22. FallbackImageHTTPCode int // Fallback image HTTP status code
  23. EnableDebugHeaders bool // Whether to enable debug headers
  24. }
  25. // NewDefaultConfig creates a new configuration with defaults
  26. func NewDefaultConfig() Config {
  27. return Config{
  28. ReportDownloadingErrors: true,
  29. LastModifiedEnabled: true,
  30. ETagEnabled: true,
  31. ReportIOErrors: false,
  32. FallbackImageHTTPCode: http.StatusOK,
  33. EnableDebugHeaders: false,
  34. }
  35. }
  36. // LoadConfigFromEnv loads config from environment variables
  37. func LoadConfigFromEnv(c *Config) (*Config, error) {
  38. c = ensure.Ensure(c, NewDefaultConfig)
  39. err := errors.Join(
  40. env.Bool(&c.ReportDownloadingErrors, IMGPROXY_REPORT_DOWNLOADING_ERRORS),
  41. env.Bool(&c.LastModifiedEnabled, IMGPROXY_LAST_MODIFIED_ENABLED),
  42. env.Bool(&c.ETagEnabled, IMGPROXY_ETAG_ENABLED),
  43. env.Bool(&c.ReportIOErrors, IMGPROXY_REPORT_IO_ERRORS),
  44. env.Int(&c.FallbackImageHTTPCode, IMGPROXY_FALLBACK_IMAGE_HTTP_CODE),
  45. env.Bool(&c.EnableDebugHeaders, IMGPROXY_ENABLE_DEBUG_HEADERS),
  46. )
  47. return c, err
  48. }
  49. // Validate checks configuration values
  50. func (c *Config) Validate() error {
  51. if c.FallbackImageHTTPCode != 0 && (c.FallbackImageHTTPCode < 100 || c.FallbackImageHTTPCode > 599) {
  52. return IMGPROXY_FALLBACK_IMAGE_HTTP_CODE.Errorf("invalid")
  53. }
  54. return nil
  55. }