1
0

config.go 4.0 KB

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