1
0

config.go 3.8 KB

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