config.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package imgproxy
  2. import (
  3. "github.com/imgproxy/imgproxy/v3/auximageprovider"
  4. "github.com/imgproxy/imgproxy/v3/ensure"
  5. "github.com/imgproxy/imgproxy/v3/fetcher"
  6. processinghandler "github.com/imgproxy/imgproxy/v3/handlers/processing"
  7. streamhandler "github.com/imgproxy/imgproxy/v3/handlers/stream"
  8. "github.com/imgproxy/imgproxy/v3/options"
  9. "github.com/imgproxy/imgproxy/v3/processing"
  10. "github.com/imgproxy/imgproxy/v3/security"
  11. "github.com/imgproxy/imgproxy/v3/server"
  12. "github.com/imgproxy/imgproxy/v3/workers"
  13. )
  14. // HandlerConfigs holds the configurations for imgproxy handlers
  15. type HandlerConfigs struct {
  16. Processing processinghandler.Config
  17. Stream streamhandler.Config
  18. }
  19. // Config represents an instance configuration
  20. type Config struct {
  21. Workers workers.Config
  22. FallbackImage auximageprovider.StaticConfig
  23. WatermarkImage auximageprovider.StaticConfig
  24. Fetcher fetcher.Config
  25. Handlers HandlerConfigs
  26. Server server.Config
  27. Security security.Config
  28. Processing processing.Config
  29. Options options.Config
  30. }
  31. // NewDefaultConfig creates a new default configuration
  32. func NewDefaultConfig() Config {
  33. return Config{
  34. Workers: workers.NewDefaultConfig(),
  35. FallbackImage: auximageprovider.NewDefaultStaticConfig(),
  36. WatermarkImage: auximageprovider.NewDefaultStaticConfig(),
  37. Fetcher: fetcher.NewDefaultConfig(),
  38. Handlers: HandlerConfigs{
  39. Processing: processinghandler.NewDefaultConfig(),
  40. Stream: streamhandler.NewDefaultConfig(),
  41. },
  42. Server: server.NewDefaultConfig(),
  43. Security: security.NewDefaultConfig(),
  44. Processing: processing.NewDefaultConfig(),
  45. Options: options.NewDefaultConfig(),
  46. }
  47. }
  48. // LoadConfigFromEnv loads configuration from environment variables
  49. func LoadConfigFromEnv(c *Config) (*Config, error) {
  50. c = ensure.Ensure(c, NewDefaultConfig)
  51. var err error
  52. if _, err = server.LoadConfigFromEnv(&c.Server); err != nil {
  53. return nil, err
  54. }
  55. if _, err = auximageprovider.LoadFallbackStaticConfigFromEnv(&c.FallbackImage); err != nil {
  56. return nil, err
  57. }
  58. if _, err = auximageprovider.LoadWatermarkStaticConfigFromEnv(&c.WatermarkImage); err != nil {
  59. return nil, err
  60. }
  61. if _, err = workers.LoadConfigFromEnv(&c.Workers); err != nil {
  62. return nil, err
  63. }
  64. if _, err = fetcher.LoadConfigFromEnv(&c.Fetcher); err != nil {
  65. return nil, err
  66. }
  67. if _, err = processinghandler.LoadConfigFromEnv(&c.Handlers.Processing); err != nil {
  68. return nil, err
  69. }
  70. if _, err = streamhandler.LoadConfigFromEnv(&c.Handlers.Stream); err != nil {
  71. return nil, err
  72. }
  73. if _, err = security.LoadConfigFromEnv(&c.Security); err != nil {
  74. return nil, err
  75. }
  76. if _, err = options.LoadConfigFromEnv(&c.Options); err != nil {
  77. return nil, err
  78. }
  79. if _, err = processing.LoadConfigFromEnv(&c.Processing); err != nil {
  80. return nil, err
  81. }
  82. return c, nil
  83. }