refactor: move s3 client creation to a factory method on storage for re-usability
This commit is contained in:
parent
988a313f93
commit
f47552bf60
|
@ -20,8 +20,6 @@ import (
|
||||||
|
|
||||||
"git.lumeweb.com/LumeWeb/portal/metadata"
|
"git.lumeweb.com/LumeWeb/portal/metadata"
|
||||||
|
|
||||||
awsConfig "github.com/aws/aws-sdk-go-v2/config"
|
|
||||||
"github.com/aws/aws-sdk-go-v2/credentials"
|
|
||||||
"github.com/tus/tusd/v2/pkg/s3store"
|
"github.com/tus/tusd/v2/pkg/s3store"
|
||||||
|
|
||||||
tusd "github.com/tus/tusd/v2/pkg/handler"
|
tusd "github.com/tus/tusd/v2/pkg/handler"
|
||||||
|
@ -125,31 +123,11 @@ func (t *TusHandler) Init() error {
|
||||||
return blankResp, blankChanges, nil
|
return blankResp, blankChanges, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
s3Client, err := t.storage.S3Client(context.Background())
|
||||||
if service == s3.ServiceID {
|
|
||||||
return aws.Endpoint{
|
|
||||||
URL: t.config.Config().Core.Storage.S3.Endpoint,
|
|
||||||
SigningRegion: t.config.Config().Core.Storage.S3.Region,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
|
|
||||||
})
|
|
||||||
|
|
||||||
cfg, err := awsConfig.LoadDefaultConfig(context.TODO(),
|
|
||||||
awsConfig.WithRegion("us-east-1"),
|
|
||||||
awsConfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
|
|
||||||
t.config.Config().Core.Storage.S3.AccessKey,
|
|
||||||
t.config.Config().Core.Storage.S3.SecretKey,
|
|
||||||
"",
|
|
||||||
)),
|
|
||||||
awsConfig.WithEndpointResolverWithOptions(customResolver),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s3Client := s3.NewFromConfig(cfg)
|
|
||||||
|
|
||||||
store := s3store.New(t.config.Config().Core.Storage.S3.BufferBucket, s3Client)
|
store := s3store.New(t.config.Config().Core.Storage.S3.BufferBucket, s3Client)
|
||||||
|
|
||||||
locker := NewMySQLLocker(t.db, t.logger)
|
locker := NewMySQLLocker(t.db, t.logger)
|
||||||
|
|
|
@ -7,6 +7,12 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go-v2/aws"
|
||||||
|
|
||||||
|
awsConfig "github.com/aws/aws-sdk-go-v2/config"
|
||||||
|
"github.com/aws/aws-sdk-go-v2/credentials"
|
||||||
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
|
|
||||||
"git.lumeweb.com/LumeWeb/portal/config"
|
"git.lumeweb.com/LumeWeb/portal/config"
|
||||||
|
|
||||||
"go.uber.org/fx"
|
"go.uber.org/fx"
|
||||||
|
@ -52,6 +58,7 @@ type StorageService interface {
|
||||||
DownloadObjectProof(ctx context.Context, protocol StorageProtocol, objectHash []byte) (io.ReadCloser, error)
|
DownloadObjectProof(ctx context.Context, protocol StorageProtocol, objectHash []byte) (io.ReadCloser, error)
|
||||||
DeleteObject(ctx context.Context, protocol StorageProtocol, objectHash []byte) error
|
DeleteObject(ctx context.Context, protocol StorageProtocol, objectHash []byte) error
|
||||||
DeleteObjectProof(ctx context.Context, protocol StorageProtocol, objectHash []byte) error
|
DeleteObjectProof(ctx context.Context, protocol StorageProtocol, objectHash []byte) error
|
||||||
|
S3Client(ctx context.Context) (*s3.Client, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type StorageServiceDefault struct {
|
type StorageServiceDefault struct {
|
||||||
|
@ -288,6 +295,33 @@ func (s StorageServiceDefault) DeleteObjectProof(ctx context.Context, protocol S
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s StorageServiceDefault) S3Client(ctx context.Context) (*s3.Client, error) {
|
||||||
|
customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
||||||
|
if service == s3.ServiceID {
|
||||||
|
return aws.Endpoint{
|
||||||
|
URL: s.config.Config().Core.Storage.S3.Endpoint,
|
||||||
|
SigningRegion: s.config.Config().Core.Storage.S3.Region,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
return aws.Endpoint{}, &aws.EndpointNotFoundError{}
|
||||||
|
})
|
||||||
|
cfg, err := awsConfig.LoadDefaultConfig(ctx,
|
||||||
|
awsConfig.WithRegion("us-east-1"),
|
||||||
|
awsConfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
|
||||||
|
s.config.Config().Core.Storage.S3.AccessKey,
|
||||||
|
s.config.Config().Core.Storage.S3.SecretKey,
|
||||||
|
"",
|
||||||
|
)),
|
||||||
|
awsConfig.WithEndpointResolverWithOptions(customResolver),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s3.NewFromConfig(cfg), nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s StorageServiceDefault) getProofPath(protocol StorageProtocol, objectHash []byte) string {
|
func (s StorageServiceDefault) getProofPath(protocol StorageProtocol, objectHash []byte) string {
|
||||||
return fmt.Sprintf("%s%s", protocol.EncodeFileName(objectHash), PROOF_EXTENSION)
|
return fmt.Sprintf("%s%s", protocol.EncodeFileName(objectHash), PROOF_EXTENSION)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue