package s3 import ( "fmt" "strings" "gitea.maximumdirect.net/eric/distributor/internal/storage" ) const BackendName = "s3" const DefaultRegion = "us-east-1" type Options struct { Endpoint string Bucket string Prefix string Region string ForcePathStyle bool AccessKeyID string SecretAccessKey string } func (o Options) normalized() (Options, error) { if o.Endpoint == "" { return Options{}, fmt.Errorf("endpoint is required") } if o.Bucket == "" { return Options{}, fmt.Errorf("bucket is required") } if o.Region == "" { o.Region = DefaultRegion } o.Prefix = strings.Trim(o.Prefix, "/") if err := storage.ValidatePrefix(o.Prefix); err != nil { return Options{}, fmt.Errorf("prefix: %w", err) } if (o.AccessKeyID == "") != (o.SecretAccessKey == "") { return Options{}, fmt.Errorf("access key id and secret access key must be configured together") } return o, nil }