Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
40
pkg/s3/mock/s3_mock.go
Normal file
40
pkg/s3/mock/s3_mock.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package mock
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
|
||||
"fiskerinc.com/modules/utils/envtool"
|
||||
)
|
||||
|
||||
var downloadurl = envtool.GetEnv("OTA_UPDATE_DOWNLOAD_URL", "https://upload-dev.fiskerdps.com")
|
||||
|
||||
// S3Mock S3 mock
|
||||
type S3Mock struct {
|
||||
err error
|
||||
data []byte
|
||||
}
|
||||
|
||||
// PutBucket mock S3.PutBucket method
|
||||
func (s *S3Mock) PutBucket(key string, reader io.Reader, contentType string) (string, error) {
|
||||
if s.err != nil {
|
||||
return "", s.err
|
||||
}
|
||||
var err error
|
||||
s.data, err = ioutil.ReadAll(reader)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return fmt.Sprintf("%s/%s", downloadurl, key), nil
|
||||
}
|
||||
|
||||
// SetError sets error for PutBucket
|
||||
func (s *S3Mock) SetError(err error) {
|
||||
s.err = err
|
||||
}
|
||||
|
||||
// GetData returns data from reader
|
||||
func (s *S3Mock) GetData() []byte {
|
||||
return s.data
|
||||
}
|
||||
63
pkg/s3/s3.go
Normal file
63
pkg/s3/s3.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package s3
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"fiskerinc.com/modules/utils/envtool"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/s3/s3manager"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var instanceS3 Interface
|
||||
var bucket string = envtool.GetEnv("OTA_UPDATE_BUCKET", "fisker-upload-dev")
|
||||
var downloadurl = envtool.GetEnv("OTA_UPDATE_DOWNLOAD_URL", "https://upload-dev.fiskerdps.com")
|
||||
|
||||
// S3 AWS S3 bucket
|
||||
type S3 struct {
|
||||
}
|
||||
|
||||
// Interface interface for S3
|
||||
type Interface interface {
|
||||
PutBucket(key string, reader io.Reader, contentType string) (string, error)
|
||||
}
|
||||
|
||||
// PutBucket put file into S3 bucket
|
||||
func (s *S3) PutBucket(key string, reader io.Reader, contentType string) (string, error) {
|
||||
if len(key) > 255 {
|
||||
return "", errors.New("S3 key too long")
|
||||
}
|
||||
|
||||
sess := session.Must(session.NewSession())
|
||||
uploader := s3manager.NewUploader(sess)
|
||||
_, err := uploader.Upload(&s3manager.UploadInput{
|
||||
Bucket: aws.String(bucket),
|
||||
Key: aws.String(key),
|
||||
Body: reader,
|
||||
ACL: aws.String("public-read"),
|
||||
ContentType: aws.String(contentType),
|
||||
})
|
||||
if err != nil {
|
||||
return "", errors.WithStack(err)
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s/%s", downloadurl, key), nil
|
||||
}
|
||||
|
||||
// GetS3 returns S3 struct
|
||||
func GetS3() Interface {
|
||||
if instanceS3 != nil {
|
||||
return instanceS3
|
||||
}
|
||||
|
||||
return &S3{}
|
||||
}
|
||||
|
||||
// SetS3Instance set S3 instance to return for mocking
|
||||
func SetS3Instance(value Interface) {
|
||||
instanceS3 = value
|
||||
}
|
||||
Reference in New Issue
Block a user