mirror of https://github.com/status-im/go-s3up.git
first working version using s3Client.PutObject
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
d1ea47090e
commit
7981ff9af5
4
go.mod
4
go.mod
|
@ -1,3 +1,7 @@
|
||||||
module github.com/status-im/go-s3up
|
module github.com/status-im/go-s3up
|
||||||
|
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
|
require github.com/aws/aws-sdk-go v1.42.32
|
||||||
|
|
||||||
|
require github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||||
|
|
|
@ -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=
|
|
@ -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(®ion, "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())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue