~bigbes/core-go

3686f7e2cb0118367fdc74fd20b2e115fb90bb54 — Drew DeVault 1 year, 17 days ago 42a4b67
objects: improve support for our s3 deployment

Not sure how well this generalizes but we can improve it when someone
complains.
1 files changed, 27 insertions(+), 1 deletions(-)

M objects/middleware.go
M objects/middleware.go => objects/middleware.go +27 -1
@@ 9,6 9,7 @@ import (
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/credentials"
	"github.com/aws/aws-sdk-go-v2/service/s3"
	"github.com/aws/smithy-go/endpoints"
	"github.com/vaughan0/go-ini"
)



@@ 42,6 43,27 @@ func ForContext(ctx context.Context) *s3.Client {

var ErrDisabled = errors.New("object storage is not enabled for this server")

type S3Resolver struct {
	conf     ini.File
	resolver s3.EndpointResolverV2
}

func (r *S3Resolver) ResolveEndpoint(
	ctx context.Context,
	params s3.EndpointParameters,
) (transport.Endpoint, error) {
	upstream, _ := r.conf.Get("objects", "s3-upstream")
	endpoint, err := r.resolver.ResolveEndpoint(ctx, params)
	if err != nil {
		return endpoint, err
	}
	endpoint.URI.Host = upstream
	if params.Bucket != nil {
		endpoint.URI.Path = *params.Bucket
	}
	return endpoint, nil
}

func NewClient(conf ini.File) (*s3.Client, error) {
	upstream, _ := conf.Get("objects", "s3-upstream")
	accessKey, _ := conf.Get("objects", "s3-access-key")


@@ 59,7 81,11 @@ func NewClient(conf ini.File) (*s3.Client, error) {
		Region:      region,
		Credentials: creds,
	}, func(opts *s3.Options) {
		opts.BaseEndpoint = aws.String(upstream)
		opts.BaseEndpoint = aws.String("https://" + upstream)
		opts.EndpointResolverV2 = &S3Resolver{
			conf,
			s3.NewDefaultEndpointResolverV2(),
		}
	}), nil
}