Files
athens/pkg/storage/s3/saver.go
Vanes Angelo 900cb4f7c1 Upgrade to AWS SDK v2 (#1938) (#1950)
Upgrades the AWS SDK to v2. AWS S3 bucket urls will now error if they are not prefixed with a schema (example: https://).
2024-04-28 21:38:42 -07:00

48 lines
1.4 KiB
Go

package s3
import (
"bytes"
"context"
"io"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/gomods/athens/pkg/errors"
"github.com/gomods/athens/pkg/observ"
moduploader "github.com/gomods/athens/pkg/storage/module"
)
// Save implements the (github.com/gomods/athens/pkg/storage).Saver interface.
func (s *Storage) Save(ctx context.Context, module, version string, mod []byte, zip io.Reader, info []byte) error {
const op errors.Op = "s3.Save"
ctx, span := observ.StartSpan(ctx, op.String())
defer span.End()
err := moduploader.Upload(ctx, module, version, bytes.NewReader(info), bytes.NewReader(mod), zip, s.upload, s.timeout)
// TODO: take out lease on the /list file and add the version to it
//
// Do that only after module source+metadata is uploaded
if err != nil {
return errors.E(op, err, errors.M(module), errors.V(version))
}
return nil
}
func (s *Storage) upload(ctx context.Context, path, contentType string, stream io.Reader) error {
const op errors.Op = "s3.upload"
ctx, span := observ.StartSpan(ctx, op.String())
defer span.End()
upParams := &s3.PutObjectInput{
Bucket: aws.String(s.bucket),
Key: aws.String(path),
Body: stream,
ContentType: aws.String(contentType),
}
if _, err := s.uploader.Upload(ctx, upParams); err != nil {
return errors.E(op, err)
}
return nil
}