43 lines
940 B
Go
43 lines
940 B
Go
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
|
|
}
|