first working version using s3Client.PutObject

Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
Jakub Sokołowski 2022-01-12 18:26:10 +01:00
parent d1ea47090e
commit 7981ff9af5
No known key found for this signature in database
GPG Key ID: 4EF064D0E6D63020
3 changed files with 118 additions and 0 deletions

4
go.mod
View File

@ -1,3 +1,7 @@
module github.com/status-im/go-s3up
go 1.17
require github.com/aws/aws-sdk-go v1.42.32
require github.com/jmespath/go-jmespath v0.4.0 // indirect

17
go.sum Normal file
View File

@ -0,0 +1,17 @@
github.com/aws/aws-sdk-go v1.42.32 h1:YRe7du5KeSa2jHKEccOSL6/1fNM1Qaj0JqSGTdmtaws=
github.com/aws/aws-sdk-go v1.42.32/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

97
main.go Normal file
View File

@ -0,0 +1,97 @@
package main
import (
"flag"
"fmt"
"log"
"os"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
var l *log.Logger
var (
target string
acl string
bucket string
region string
endpoint string
keyid string
secret string
)
const helpMessage string = `
This is a simple S3-compatible upload CLI tool.
`
func envVar(key string, defaultVal string) string {
if val, ok := os.LookupEnv(key); ok {
return val
}
return defaultVal
}
func flagsInit() {
defaultUsage := flag.Usage
flag.Usage = func() {
fmt.Printf(strings.Trim(helpMessage, "\t "))
defaultUsage()
}
flag.StringVar(&target, "target", "", "Path of file to upload.")
flag.StringVar(&acl, "acl", "private", "Type of permission for file.")
flag.StringVar(&bucket, "bucket", "", "Name of bucket to upload to.")
flag.StringVar(&region, "region", envVar("AWS_DEFAULT_REGION", "ams3"), "Name of region to upload to.")
flag.StringVar(&endpoint, "endpoint", envVar("AWS_DEFAULT_ENDPOINT", "ams3.digitaloceanspaces.com"), "S3 API endpoint.")
flag.StringVar(&keyid, "keyid", envVar("AWS_ACCESS_KEY_ID", ""), "API key ID.")
flag.StringVar(&secret, "secret", envVar("AWS_SECRET_ACCESS_KEY", ""), "API secret key.")
flag.Parse()
}
func main() {
l = log.New(os.Stderr, "", log.Lshortfile)
flagsInit()
if len(keyid) == 0 {
l.Println("Provide -keyid flag or AWS_ACCESS_KEY_ID env var")
os.Exit(1)
}
if len(secret) == 0 {
l.Println("Provide -secret flag or AWS_SECRET_ACCESS_KEY env var")
os.Exit(1)
}
s3Config := &aws.Config{
Credentials: credentials.NewStaticCredentials(keyid, secret, ""),
Endpoint: aws.String(endpoint),
Region: aws.String(region),
}
newSession := session.New(s3Config)
s3Client := s3.New(newSession)
file, err := os.Open(target)
if err != nil {
l.Println("Failed to open file: ", err)
os.Exit(1)
}
object := s3.PutObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(target),
ACL: aws.String(acl),
Body: file,
}
_, err = s3Client.PutObject(&object)
if err != nil {
fmt.Println(err.Error())
}
}