factory.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package options
  2. import (
  3. "github.com/imgproxy/imgproxy/v3/security"
  4. )
  5. // Presets is a map of preset names to their corresponding urlOptions
  6. type Presets = map[string]urlOptions
  7. // Factory creates ProcessingOptions instances
  8. type Factory struct {
  9. config *Config // Factory configuration
  10. security *security.Checker // Security checker for generating security options
  11. presets Presets // Parsed presets
  12. defaultPO *ProcessingOptions // Default processing options
  13. }
  14. // NewFactory creates new Factory instance
  15. func NewFactory(config *Config, security *security.Checker) (*Factory, error) {
  16. if err := config.Validate(); err != nil {
  17. return nil, err
  18. }
  19. f := &Factory{
  20. config: config,
  21. security: security,
  22. presets: make(map[string]urlOptions),
  23. defaultPO: newDefaultProcessingOptions(config, security),
  24. }
  25. if err := f.parsePresets(); err != nil {
  26. return nil, err
  27. }
  28. if err := f.validatePresets(); err != nil {
  29. return nil, err
  30. }
  31. return f, nil
  32. }
  33. // NewProcessingOptions creates new ProcessingOptions instance
  34. func (f *Factory) NewProcessingOptions() *ProcessingOptions {
  35. return f.defaultPO.clone()
  36. }