config.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package imgproxy
  2. import (
  3. "github.com/imgproxy/imgproxy/v3/auximageprovider"
  4. "github.com/imgproxy/imgproxy/v3/cookies"
  5. "github.com/imgproxy/imgproxy/v3/ensure"
  6. "github.com/imgproxy/imgproxy/v3/fetcher"
  7. processinghandler "github.com/imgproxy/imgproxy/v3/handlers/processing"
  8. streamhandler "github.com/imgproxy/imgproxy/v3/handlers/stream"
  9. "github.com/imgproxy/imgproxy/v3/monitoring"
  10. "github.com/imgproxy/imgproxy/v3/monitoring/prometheus"
  11. optionsparser "github.com/imgproxy/imgproxy/v3/options/parser"
  12. "github.com/imgproxy/imgproxy/v3/processing"
  13. "github.com/imgproxy/imgproxy/v3/security"
  14. "github.com/imgproxy/imgproxy/v3/server"
  15. "github.com/imgproxy/imgproxy/v3/workers"
  16. )
  17. // HandlerConfigs holds the configurations for imgproxy handlers
  18. type HandlerConfigs struct {
  19. Processing processinghandler.Config
  20. Stream streamhandler.Config
  21. }
  22. // Config represents an instance configuration
  23. type Config struct {
  24. Workers workers.Config
  25. FallbackImage auximageprovider.StaticConfig
  26. WatermarkImage auximageprovider.StaticConfig
  27. Fetcher fetcher.Config
  28. Handlers HandlerConfigs
  29. Server server.Config
  30. Security security.Config
  31. Processing processing.Config
  32. OptionsParser optionsparser.Config
  33. Cookies cookies.Config
  34. Monitoring monitoring.Config
  35. }
  36. // NewDefaultConfig creates a new default configuration
  37. func NewDefaultConfig() Config {
  38. return Config{
  39. Workers: workers.NewDefaultConfig(),
  40. FallbackImage: auximageprovider.NewDefaultStaticConfig(),
  41. WatermarkImage: auximageprovider.NewDefaultStaticConfig(),
  42. Fetcher: fetcher.NewDefaultConfig(),
  43. Handlers: HandlerConfigs{
  44. Processing: processinghandler.NewDefaultConfig(),
  45. Stream: streamhandler.NewDefaultConfig(),
  46. },
  47. Server: server.NewDefaultConfig(),
  48. Security: security.NewDefaultConfig(),
  49. Processing: processing.NewDefaultConfig(),
  50. OptionsParser: optionsparser.NewDefaultConfig(),
  51. Cookies: cookies.NewDefaultConfig(),
  52. Monitoring: monitoring.NewDefaultConfig(),
  53. }
  54. }
  55. // LoadConfigFromEnv loads configuration from environment variables
  56. func LoadConfigFromEnv(c *Config) (*Config, error) {
  57. c = ensure.Ensure(c, NewDefaultConfig)
  58. var err error
  59. if _, err = server.LoadConfigFromEnv(&c.Server); err != nil {
  60. return nil, err
  61. }
  62. if _, err = auximageprovider.LoadFallbackStaticConfigFromEnv(&c.FallbackImage); err != nil {
  63. return nil, err
  64. }
  65. if _, err = auximageprovider.LoadWatermarkStaticConfigFromEnv(&c.WatermarkImage); err != nil {
  66. return nil, err
  67. }
  68. if _, err = workers.LoadConfigFromEnv(&c.Workers); err != nil {
  69. return nil, err
  70. }
  71. if _, err = fetcher.LoadConfigFromEnv(&c.Fetcher); err != nil {
  72. return nil, err
  73. }
  74. if _, err = processinghandler.LoadConfigFromEnv(&c.Handlers.Processing); err != nil {
  75. return nil, err
  76. }
  77. if _, err = streamhandler.LoadConfigFromEnv(&c.Handlers.Stream); err != nil {
  78. return nil, err
  79. }
  80. if _, err = security.LoadConfigFromEnv(&c.Security); err != nil {
  81. return nil, err
  82. }
  83. if _, err = optionsparser.LoadConfigFromEnv(&c.OptionsParser); err != nil {
  84. return nil, err
  85. }
  86. if _, err = processing.LoadConfigFromEnv(&c.Processing); err != nil {
  87. return nil, err
  88. }
  89. if _, err = cookies.LoadConfigFromEnv(&c.Cookies); err != nil {
  90. return nil, err
  91. }
  92. if _, err = monitoring.LoadConfigFromEnv(&c.Monitoring); err != nil {
  93. return nil, err
  94. }
  95. return c, nil
  96. }
  97. func (c *Config) Validate() error {
  98. if c.Monitoring.Prometheus.Enabled() && c.Monitoring.Prometheus.Bind == c.Server.Bind {
  99. return prometheus.IMGPROXY_PROMETHEUS_BIND.Errorf("should be different than IMGPROXY_BIND: %s", c.Server.Bind)
  100. }
  101. return nil
  102. }