Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

40
pkg/s3/mock/s3_mock.go Normal file
View 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
View 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
}