250e85732d
new shop system more config options arena & hype per season stats battle pass better variant system complete vbuck & starter pack store fix bugs related to deleting account update launcher endpoints fixed gift loot not deleting
92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package storage
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/base64"
|
|
"fmt"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"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"
|
|
"github.com/ectrc/snow/aid"
|
|
)
|
|
|
|
type AmazonClient struct {
|
|
client *s3.Client
|
|
ClientSettingsBucket string
|
|
}
|
|
|
|
func NewAmazonClient(bucketURI, accessKeyID, secretAccessKey, clientSettingsBucket string) *AmazonClient {
|
|
s := &AmazonClient{}
|
|
|
|
r2Resolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
|
return aws.Endpoint{
|
|
URL: bucketURI,
|
|
}, nil
|
|
})
|
|
|
|
cfg, err := config.LoadDefaultConfig(context.TODO(),
|
|
config.WithEndpointResolverWithOptions(r2Resolver),
|
|
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accessKeyID, secretAccessKey, "")),
|
|
)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
s.client = s3.NewFromConfig(cfg)
|
|
s.ClientSettingsBucket = clientSettingsBucket
|
|
aid.Print("(amazon) client is ready")
|
|
|
|
return s
|
|
}
|
|
|
|
func (a *AmazonClient) GetAllUserFiles() ([]string, error) {
|
|
listObjectsOutput, err := a.client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
|
|
Bucket: aws.String(a.ClientSettingsBucket),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var files []string
|
|
for _, object := range listObjectsOutput.Contents {
|
|
fmt.Println(*object.Key)
|
|
files = append(files, *object.Key)
|
|
}
|
|
|
|
return files, nil
|
|
}
|
|
|
|
func (a *AmazonClient) CreateUserFile(fileName string, data []byte) error {
|
|
_, err := a.client.PutObject(context.TODO(), &s3.PutObjectInput{
|
|
Bucket: aws.String(a.ClientSettingsBucket),
|
|
Key: aws.String("client/"+fileName),
|
|
Body: bytes.NewReader(data),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *AmazonClient) GetUserFile(fileName string) ([]byte, error) {
|
|
getObjectOutput, err := a.client.GetObject(context.TODO(), &s3.GetObjectInput{
|
|
Bucket: aws.String(a.ClientSettingsBucket),
|
|
Key: aws.String("client/"+fileName),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
buf.ReadFrom(getObjectOutput.Body)
|
|
|
|
bytes := buf.Bytes()
|
|
decoded := make([]byte, base64.StdEncoding.DecodedLen(len(bytes)))
|
|
base64.StdEncoding.Decode(decoded, bytes)
|
|
|
|
return buf.Bytes(), nil
|
|
} |