1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2026-06-11 22:04:13 +02:00
Files
2026-05-13 18:48:55 +03:00

98 lines
3.2 KiB
Go

package optionsparser
import (
"errors"
"github.com/imgproxy/imgproxy/v4/ensure"
"github.com/imgproxy/imgproxy/v4/env"
)
type URLReplacement = env.URLReplacement
var (
IMGPROXY_PRESETS_SEPARATOR = env.String("IMGPROXY_PRESETS_SEPARATOR")
IMGPROXY_PRESETS = env.StringSliceSep("IMGPROXY_PRESETS", IMGPROXY_PRESETS_SEPARATOR)
IMGPROXY_PRESETS_PATH = env.StringSliceFile("IMGPROXY_PRESETS_PATH")
IMGPROXY_ONLY_PRESETS = env.Bool("IMGPROXY_ONLY_PRESETS")
IMGPROXY_ALLOWED_PROCESSING_OPTIONS = env.StringSlice("IMGPROXY_ALLOWED_PROCESSING_OPTIONS")
IMGPROXY_ALLOW_SECURITY_OPTIONS = env.Bool("IMGPROXY_ALLOW_SECURITY_OPTIONS")
IMGPROXY_ARGUMENTS_SEPARATOR = env.String("IMGPROXY_ARGUMENTS_SEPARATOR")
IMGPROXY_BASE_URL = env.String("IMGPROXY_BASE_URL")
IMGPROXY_URL_REPLACEMENTS = env.URLReplacements("IMGPROXY_URL_REPLACEMENTS")
IMGPROXY_BASE64_URL_INCLUDES_FILENAME = env.Bool("IMGPROXY_BASE64_URL_INCLUDES_FILENAME")
)
// Config represents the configuration for options processing
type Config struct {
// Presets configuration
Presets []string // Available presets
OnlyPresets bool // Whether to allow only presets
// Security and validation
AllowedProcessingOptions []string // List of allowed processing options
AllowSecurityOptions bool // Whether to allow security options in URLs
// URL processing
ArgumentsSeparator string // Separator for URL arguments
BaseURL string // Base URL for relative URLs
URLReplacements []URLReplacement // URL replacement rules
Base64URLIncludesFilename bool // Whether base64 URLs include filename
}
// NewDefaultConfig creates a new default configuration for options processing
func NewDefaultConfig() Config {
return Config{
// Presets configuration
OnlyPresets: false,
// Security and validation
AllowSecurityOptions: false,
// URL processing (copied from global config defaults)
ArgumentsSeparator: ":",
BaseURL: "",
Base64URLIncludesFilename: false,
}
}
// LoadConfigFromEnv loads configuration from global config variables
func LoadConfigFromEnv(c *Config) (*Config, error) {
c = ensure.Ensure(c, NewDefaultConfig)
c.Presets = make([]string, 0)
c.URLReplacements = make([]URLReplacement, 0)
var presetsFromFile []string
err := errors.Join(
IMGPROXY_ONLY_PRESETS.Parse(&c.OnlyPresets),
IMGPROXY_PRESETS.Parse(&c.Presets),
IMGPROXY_PRESETS_PATH.Parse(&presetsFromFile),
// Security and validation
IMGPROXY_ALLOWED_PROCESSING_OPTIONS.Parse(&c.AllowedProcessingOptions),
IMGPROXY_ALLOW_SECURITY_OPTIONS.Parse(&c.AllowSecurityOptions),
// URL processing
IMGPROXY_ARGUMENTS_SEPARATOR.Parse(&c.ArgumentsSeparator),
IMGPROXY_BASE_URL.Parse(&c.BaseURL),
IMGPROXY_BASE64_URL_INCLUDES_FILENAME.Parse(&c.Base64URLIncludesFilename),
IMGPROXY_URL_REPLACEMENTS.Parse(&c.URLReplacements),
)
c.Presets = append(c.Presets, presetsFromFile...)
return c, err
}
// Validate validates the configuration values
func (c *Config) Validate() error {
// Arguments separator validation
if c.ArgumentsSeparator == "" {
return IMGPROXY_ARGUMENTS_SEPARATOR.ErrorEmpty()
}
return nil
}