presets.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package optionsparser
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/imgproxy/imgproxy/v3/options"
  6. )
  7. // parsePresets parses presets from the config and fills the presets map
  8. func (p *Parser) parsePresets() error {
  9. for _, presetStr := range p.config.Presets {
  10. if err := p.parsePreset(presetStr); err != nil {
  11. return err
  12. }
  13. }
  14. return nil
  15. }
  16. // parsePreset parses a preset string and returns the name and options
  17. func (p *Parser) parsePreset(presetStr string) error {
  18. presetStr = strings.Trim(presetStr, " ")
  19. if len(presetStr) == 0 || strings.HasPrefix(presetStr, "#") {
  20. return nil
  21. }
  22. parts := strings.Split(presetStr, "=")
  23. if len(parts) != 2 {
  24. return fmt.Errorf("invalid preset string: %s", presetStr)
  25. }
  26. name := strings.Trim(parts[0], " ")
  27. if len(name) == 0 {
  28. return fmt.Errorf("empty preset name: %s", presetStr)
  29. }
  30. value := strings.Trim(parts[1], " ")
  31. if len(value) == 0 {
  32. return fmt.Errorf("empty preset value: %s", presetStr)
  33. }
  34. optsStr := strings.Split(value, "/")
  35. opts, rest := p.parseURLOptions(optsStr)
  36. if len(rest) > 0 {
  37. return fmt.Errorf("invalid preset value: %s", presetStr)
  38. }
  39. if p.presets == nil {
  40. p.presets = make(Presets)
  41. }
  42. p.presets[name] = opts
  43. return nil
  44. }
  45. // validatePresets validates all presets by applying them to a new Options instance
  46. func (p *Parser) validatePresets() error {
  47. for name, opts := range p.presets {
  48. o := options.New()
  49. if err := p.applyURLOptions(o, opts, true, name); err != nil {
  50. return fmt.Errorf("Error in preset `%s`: %s", name, err)
  51. }
  52. }
  53. return nil
  54. }