| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // config.go is just a shortcut for common.Config which helps to
- // avoid importing of the `common` package directly.
- package transport
- import (
- "errors"
- "os"
- "github.com/imgproxy/imgproxy/v3/ensure"
- "github.com/imgproxy/imgproxy/v3/env"
- "github.com/imgproxy/imgproxy/v3/fetcher/transport/generichttp"
- azure "github.com/imgproxy/imgproxy/v3/storage/abs"
- "github.com/imgproxy/imgproxy/v3/storage/fs"
- "github.com/imgproxy/imgproxy/v3/storage/gcs"
- "github.com/imgproxy/imgproxy/v3/storage/s3"
- "github.com/imgproxy/imgproxy/v3/storage/swift"
- )
- var (
- IMGPROXY_USE_ABS = env.Describe("IMGPROXY_USE_ABS", "boolean")
- IMGPROXY_USE_GCS = env.Describe("IMGPROXY_USE_GCS", "boolean")
- IMGPROXY_USE_S3 = env.Describe("IMGPROXY_USE_S3", "boolean")
- IMGPROXY_USE_SWIFT = env.Describe("IMGPROXY_USE_SWIFT", "boolean")
- IMGPROXY_SOURCE_URL_QUERY_SEPARATOR = env.Describe("IMGPROXY_SOURCE_URL_QUERY_SEPARATOR", "string")
- fsDesc = fs.ConfigDesc{
- Root: env.Describe("IMGPROXY_LOCAL_FILESYSTEM_ROOT", "path"),
- }
- absConfigDesc = azure.ConfigDesc{
- Name: env.Describe("IMGPROXY_ABS_NAME", "string"),
- Endpoint: env.Describe("IMGPROXY_ABS_ENDPOINT", "string"),
- Key: env.Describe("IMGPROXY_ABS_KEY", "string"),
- AllowedBuckets: env.Describe("IMGPROXY_ABS_ALLOWED_BUCKETS", "comma-separated list"),
- DeniedBuckets: env.Describe("IMGPROXY_ABS_DENIED_BUCKETS", "comma-separated list"),
- }
- gcsConfigDesc = gcs.ConfigDesc{
- Key: env.Describe("IMGPROXY_GCS_KEY", "string"),
- Endpoint: env.Describe("IMGPROXY_GCS_ENDPOINT", "string"),
- AllowedBuckets: env.Describe("IMGPROXY_GCS_ALLOWED_BUCKETS", "comma-separated list"),
- DeniedBuckets: env.Describe("IMGPROXY_GCS_DENIED_BUCKETS", "comma-separated list"),
- }
- s3ConfigDesc = s3.ConfigDesc{
- Region: env.Describe("IMGPROXY_S3_REGION", "string"),
- Endpoint: env.Describe("IMGPROXY_S3_ENDPOINT", "string"),
- EndpointUsePathStyle: env.Describe("IMGPROXY_S3_ENDPOINT_USE_PATH_STYLE", "boolean"),
- AssumeRoleArn: env.Describe("IMGPROXY_S3_ASSUME_ROLE_ARN", "string"),
- AssumeRoleExternalID: env.Describe("IMGPROXY_S3_ASSUME_ROLE_EXTERNAL_ID", "string"),
- DecryptionClientEnabled: env.Describe("IMGPROXY_S3_DECRYPTION_CLIENT_ENABLED", "boolean"),
- AllowedBuckets: env.Describe("IMGPROXY_S3_ALLOWED_BUCKETS", "comma-separated list"),
- DeniedBuckets: env.Describe("IMGPROXY_S3_DENIED_BUCKETS", "comma-separated list"),
- }
- swiftConfigDesc = swift.ConfigDesc{
- Username: env.Describe("IMGPROXY_SWIFT_USERNAME", "string"),
- APIKey: env.Describe("IMGPROXY_SWIFT_API_KEY", "string"),
- AuthURL: env.Describe("IMGPROXY_SWIFT_AUTH_URL", "string"),
- Domain: env.Describe("IMGPROXY_SWIFT_DOMAIN", "string"),
- Tenant: env.Describe("IMGPROXY_SWIFT_TENANT", "string"),
- AuthVersion: env.Describe("IMGPROXY_SWIFT_AUTH_VERSION", "number"),
- ConnectTimeout: env.Describe("IMGPROXY_SWIFT_CONNECT_TIMEOUT_SECONDS", "number"),
- Timeout: env.Describe("IMGPROXY_SWIFT_TIMEOUT_SECONDS", "number"),
- AllowedBuckets: env.Describe("IMGPROXY_SWIFT_ALLOWED_BUCKETS", "comma-separated list"),
- DeniedBuckets: env.Describe("IMGPROXY_SWIFT_DENIED_BUCKETS", "comma-separated list"),
- }
- )
- // Config represents configuration of the transport package
- type Config struct {
- HTTP generichttp.Config
- Local fs.Config
- ABSEnabled bool
- ABS azure.Config
- GCSEnabled bool
- GCS gcs.Config
- S3Enabled bool
- S3 s3.Config
- SwiftEnabled bool
- Swift swift.Config
- // query string separator (see docs). Unfortunately, we'll have to pass this
- // to each transport which needs it as the consturctor parameter. Otherwise,
- // we would have to add it to each transport config struct.
- SourceURLQuerySeparator string
- }
- // NewDefaultConfig returns a new default transport configuration
- func NewDefaultConfig() Config {
- return Config{
- HTTP: generichttp.NewDefaultConfig(),
- Local: fs.NewDefaultConfig(),
- ABSEnabled: false,
- ABS: azure.NewDefaultConfig(),
- GCSEnabled: false,
- GCS: gcs.NewDefaultConfig(),
- S3Enabled: false,
- S3: s3.NewDefaultConfig(),
- SwiftEnabled: false,
- Swift: swift.NewDefaultConfig(),
- SourceURLQuerySeparator: "?", // default is ?, but can be overriden with empty
- }
- }
- // LoadConfigFromEnv loads transport configuration from environment variables
- func LoadConfigFromEnv(c *Config) (*Config, error) {
- c = ensure.Ensure(c, NewDefaultConfig)
- _, genericErr := generichttp.LoadConfigFromEnv(&c.HTTP)
- _, localErr := fs.LoadConfigFromEnv(fsDesc, &c.Local)
- _, absErr := azure.LoadConfigFromEnv(absConfigDesc, &c.ABS)
- _, gcsErr := gcs.LoadConfigFromEnv(gcsConfigDesc, &c.GCS)
- _, s3Err := s3.LoadConfigFromEnv(s3ConfigDesc, &c.S3)
- _, swiftErr := swift.LoadConfigFromEnv(swiftConfigDesc, &c.Swift)
- err := errors.Join(
- env.Bool(&c.ABSEnabled, IMGPROXY_USE_ABS),
- env.Bool(&c.GCSEnabled, IMGPROXY_USE_GCS),
- env.Bool(&c.S3Enabled, IMGPROXY_USE_S3),
- env.Bool(&c.SwiftEnabled, IMGPROXY_USE_SWIFT),
- genericErr,
- localErr,
- absErr,
- gcsErr,
- s3Err,
- swiftErr,
- )
- // empty value is a valid value for this separator, we can't rely on env.String,
- // which skips empty values
- if s, ok := os.LookupEnv(IMGPROXY_SOURCE_URL_QUERY_SEPARATOR.Name); ok {
- c.SourceURLQuerySeparator = s
- }
- return c, err
- }
- func (c *Config) Validate() error {
- return nil
- }
|