Files
imgproxy/config.go
2025-09-11 14:10:21 +06:00

87 lines
2.4 KiB
Go

package imgproxy
import (
"github.com/imgproxy/imgproxy/v3/auximageprovider"
"github.com/imgproxy/imgproxy/v3/ensure"
"github.com/imgproxy/imgproxy/v3/fetcher"
processinghandler "github.com/imgproxy/imgproxy/v3/handlers/processing"
streamhandler "github.com/imgproxy/imgproxy/v3/handlers/stream"
"github.com/imgproxy/imgproxy/v3/headerwriter"
"github.com/imgproxy/imgproxy/v3/semaphores"
"github.com/imgproxy/imgproxy/v3/server"
)
// HandlerConfigs holds the configurations for imgproxy handlers
type HandlerConfigs struct {
Processing processinghandler.Config
Stream streamhandler.Config
}
// Config represents an instance configuration
type Config struct {
HeaderWriter headerwriter.Config
Semaphores semaphores.Config
FallbackImage auximageprovider.StaticConfig
WatermarkImage auximageprovider.StaticConfig
Fetcher fetcher.Config
Handlers HandlerConfigs
Server server.Config
}
// NewDefaultConfig creates a new default configuration
func NewDefaultConfig() Config {
return Config{
HeaderWriter: headerwriter.NewDefaultConfig(),
Semaphores: semaphores.NewDefaultConfig(),
FallbackImage: auximageprovider.NewDefaultStaticConfig(),
WatermarkImage: auximageprovider.NewDefaultStaticConfig(),
Fetcher: fetcher.NewDefaultConfig(),
Handlers: HandlerConfigs{
Processing: processinghandler.NewDefaultConfig(),
Stream: streamhandler.NewDefaultConfig(),
},
Server: server.NewDefaultConfig(),
}
}
// LoadConfigFromEnv loads configuration from environment variables
func LoadConfigFromEnv(c *Config) (*Config, error) {
c = ensure.Ensure(c, NewDefaultConfig)
var err error
if _, err = server.LoadConfigFromEnv(&c.Server); err != nil {
return nil, err
}
if _, err = auximageprovider.LoadFallbackStaticConfigFromEnv(&c.FallbackImage); err != nil {
return nil, err
}
if _, err = auximageprovider.LoadWatermarkStaticConfigFromEnv(&c.WatermarkImage); err != nil {
return nil, err
}
if _, err = headerwriter.LoadConfigFromEnv(&c.HeaderWriter); err != nil {
return nil, err
}
if _, err = semaphores.LoadConfigFromEnv(&c.Semaphores); err != nil {
return nil, err
}
if _, err = fetcher.LoadConfigFromEnv(&c.Fetcher); err != nil {
return nil, err
}
if _, err = processinghandler.LoadConfigFromEnv(&c.Handlers.Processing); err != nil {
return nil, err
}
if _, err = streamhandler.LoadConfigFromEnv(&c.Handlers.Stream); err != nil {
return nil, err
}
return c, nil
}