@@ -4,22 +4,23 @@ import (
44 "bytes"
55 "flag"
66 "fmt"
7+ "io"
78 "io/ioutil"
89 "time"
910
1011 "github.com/aws/aws-sdk-go/aws"
1112 "github.com/aws/aws-sdk-go/aws/session"
1213 "github.com/aws/aws-sdk-go/service/s3"
13- "golang.org/x/crypto/sha3 "
14+ "golang.org/x/crypto/ripemd160 "
1415)
1516
16- // Manager ...
17+ // Manager contains s3 client functionalities
1718type Manager struct {
1819 bucketName string
1920 region string
2021}
2122
22- // NewManager new s3provider manager
23+ // NewManager initiates a new s3 manager
2324func NewManager (bucket string , region string ) * Manager {
2425 return & Manager {
2526 bucketName : bucket ,
@@ -34,13 +35,20 @@ func (m *Manager) Save(payload []byte) error {
3435 var timeout time.Duration
3536
3637 // generating hash and create object name
37- h := sha3 .Sum224 (payload [:])
38- objName := fmt .Sprintf ("%v-%x" , time .Now ().Unix (), h )
39-
40- flag .StringVar (& bucket , "b" , m .bucketName , "Bucket name." )
41- flag .StringVar (& key , "k" , objName , "Object key name." )
42- flag .DurationVar (& timeout , "d" , 0 , "Upload timeout." )
43- flag .Parse ()
38+ md := ripemd160 .New ()
39+ keyName , err := io .WriteString (md , string (payload [:]))
40+
41+ objName := fmt .Sprintf ("%v-%x" , time .Now ().Unix (), keyName )
42+ b := flag .Lookup ("b" )
43+ k := flag .Lookup ("k" )
44+ d := flag .Lookup ("d" )
45+
46+ if b == nil && k == nil && d == nil {
47+ flag .StringVar (& bucket , "b" , m .bucketName , "Bucket name." )
48+ flag .StringVar (& key , "k" , objName , "Object key name." )
49+ flag .DurationVar (& timeout , "d" , 0 , "Upload timeout." )
50+ flag .Parse ()
51+ }
4452
4553 sess := session .Must (session .NewSession (& aws.Config {Region : aws .String (m .region )}))
4654 svc := s3 .New (sess )
@@ -49,12 +57,11 @@ func (m *Manager) Save(payload []byte) error {
4957
5058 // Uploads the object to S3. The Context will interrupt the request if the
5159 // timeout expires.
52- _ , err : = svc .PutObject (& s3.PutObjectInput {
60+ _ , err = svc .PutObject (& s3.PutObjectInput {
5361 Bucket : aws .String (m .bucketName ),
54- Key : aws .String (key ),
62+ Key : aws .String (objName ),
5563 Body : r ,
5664 })
57-
5865 return err
5966}
6067
@@ -75,7 +82,6 @@ func (m *Manager) GetKeys() ([]string, error) {
7582 return true // continue paging
7683 })
7784 if err != nil {
78- panic (fmt .Sprintf ("failed to list objects for bucket, %s, %v" , m .bucketName , err ))
7985 return nil , err
8086 }
8187
0 commit comments