Updates goamz dependency from crowdmob->AdRoll
Also includes goamz PR #331 for s3 v4 auth + IAM role support
This commit is contained in:
parent
c41141fbd3
commit
fb71af75c8
32 changed files with 123 additions and 45 deletions
24
Godeps/Godeps.json
generated
24
Godeps/Godeps.json
generated
|
@ -10,6 +10,18 @@
|
||||||
"Comment": "null-12",
|
"Comment": "null-12",
|
||||||
"Rev": "7dda39b2e7d5e265014674c5af696ba4186679e9"
|
"Rev": "7dda39b2e7d5e265014674c5af696ba4186679e9"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/AdRoll/goamz/aws",
|
||||||
|
"Rev": "d3664b76d90508cdda5a6c92042f26eab5db3103"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/AdRoll/goamz/cloudfront",
|
||||||
|
"Rev": "d3664b76d90508cdda5a6c92042f26eab5db3103"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/AdRoll/goamz/s3",
|
||||||
|
"Rev": "d3664b76d90508cdda5a6c92042f26eab5db3103"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Sirupsen/logrus",
|
"ImportPath": "github.com/Sirupsen/logrus",
|
||||||
"Comment": "v0.6.1-8-gcc09837",
|
"Comment": "v0.6.1-8-gcc09837",
|
||||||
|
@ -28,18 +40,6 @@
|
||||||
"ImportPath": "github.com/bugsnag/panicwrap",
|
"ImportPath": "github.com/bugsnag/panicwrap",
|
||||||
"Rev": "e5f9854865b9778a45169fc249e99e338d4d6f27"
|
"Rev": "e5f9854865b9778a45169fc249e99e338d4d6f27"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ImportPath": "github.com/crowdmob/goamz/aws",
|
|
||||||
"Rev": "962cedbbde5e1af59fb0b4ab681c848e61676941"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ImportPath": "github.com/crowdmob/goamz/cloudfront",
|
|
||||||
"Rev": "962cedbbde5e1af59fb0b4ab681c848e61676941"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ImportPath": "github.com/crowdmob/goamz/s3",
|
|
||||||
"Rev": "962cedbbde5e1af59fb0b4ab681c848e61676941"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/docker/docker/pkg/tarsum",
|
"ImportPath": "github.com/docker/docker/pkg/tarsum",
|
||||||
"Comment": "v1.4.1-330-g3fbf723",
|
"Comment": "v1.4.1-330-g3fbf723",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package aws_test
|
package aws_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
|
@ -1,7 +1,7 @@
|
||||||
package aws_test
|
package aws_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
|
@ -63,7 +63,7 @@ var USWest = Region{
|
||||||
ServiceInfo{"https://monitoring.us-west-1.amazonaws.com", V2Signature},
|
ServiceInfo{"https://monitoring.us-west-1.amazonaws.com", V2Signature},
|
||||||
"https://autoscaling.us-west-1.amazonaws.com",
|
"https://autoscaling.us-west-1.amazonaws.com",
|
||||||
ServiceInfo{"https://rds.us-west-1.amazonaws.com", V2Signature},
|
ServiceInfo{"https://rds.us-west-1.amazonaws.com", V2Signature},
|
||||||
"",
|
"https://kinesis.us-west-1.amazonaws.com",
|
||||||
"https://sts.amazonaws.com",
|
"https://sts.amazonaws.com",
|
||||||
"https://cloudformation.us-west-1.amazonaws.com",
|
"https://cloudformation.us-west-1.amazonaws.com",
|
||||||
"https://elasticache.us-west-1.amazonaws.com",
|
"https://elasticache.us-west-1.amazonaws.com",
|
|
@ -2,7 +2,7 @@ package aws_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
|
@ -1,7 +1,7 @@
|
||||||
package s3
|
package s3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
)
|
)
|
||||||
|
|
||||||
var originalStrategy = attempts
|
var originalStrategy = attempts
|
|
@ -2,7 +2,7 @@ package s3_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
|
@ -2,7 +2,7 @@ package s3_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -21,7 +21,7 @@ func (s *S) TestInitMulti(c *check.C) {
|
||||||
Meta: metadata,
|
Meta: metadata,
|
||||||
ContentEncoding: "text/utf8",
|
ContentEncoding: "text/utf8",
|
||||||
CacheControl: "no-cache",
|
CacheControl: "no-cache",
|
||||||
RedirectLocation: "http://github.com/crowdmob/goamz",
|
RedirectLocation: "http://github.com/AdRoll/goamz",
|
||||||
ContentMD5: "0000000000000000",
|
ContentMD5: "0000000000000000",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ func (s *S) TestInitMulti(c *check.C) {
|
||||||
c.Assert(req.Header["Content-Encoding"], check.DeepEquals, []string{"text/utf8"})
|
c.Assert(req.Header["Content-Encoding"], check.DeepEquals, []string{"text/utf8"})
|
||||||
c.Assert(req.Header["Cache-Control"], check.DeepEquals, []string{"no-cache"})
|
c.Assert(req.Header["Cache-Control"], check.DeepEquals, []string{"no-cache"})
|
||||||
c.Assert(req.Header["Content-Md5"], check.DeepEquals, []string{"0000000000000000"})
|
c.Assert(req.Header["Content-Md5"], check.DeepEquals, []string{"0000000000000000"})
|
||||||
c.Assert(req.Header["X-Amz-Website-Redirect-Location"], check.DeepEquals, []string{"http://github.com/crowdmob/goamz"})
|
c.Assert(req.Header["X-Amz-Website-Redirect-Location"], check.DeepEquals, []string{"http://github.com/AdRoll/goamz"})
|
||||||
c.Assert(req.Header["X-Amz-Meta-Key1"], check.DeepEquals, []string{"value1"})
|
c.Assert(req.Header["X-Amz-Meta-Key1"], check.DeepEquals, []string{"value1"})
|
||||||
c.Assert(req.Header["X-Amz-Meta-Key2"], check.DeepEquals, []string{"value2"})
|
c.Assert(req.Header["X-Amz-Meta-Key2"], check.DeepEquals, []string{"value2"})
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
)
|
)
|
||||||
|
|
||||||
const debug = false
|
const debug = false
|
||||||
|
@ -806,7 +806,7 @@ func (b *Bucket) SignedURLWithMethod(method, path string, expires time.Time, par
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if b.S3.Auth.Token() != "" {
|
if b.S3.Auth.Token() != "" && b.S3.Signature == aws.V2Signature {
|
||||||
return u.String() + "&x-amz-security-token=" + url.QueryEscape(req.headers["X-Amz-Security-Token"][0])
|
return u.String() + "&x-amz-security-token=" + url.QueryEscape(req.headers["X-Amz-Security-Token"][0])
|
||||||
} else {
|
} else {
|
||||||
return u.String()
|
return u.String()
|
||||||
|
@ -1041,8 +1041,10 @@ func (s3 *S3) prepare(req *request) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if s3.Auth.Token() != "" {
|
if s3.Signature == aws.V2Signature && s3.Auth.Token() != "" {
|
||||||
req.headers["X-Amz-Security-Token"] = []string{s3.Auth.Token()}
|
req.headers["X-Amz-Security-Token"] = []string{s3.Auth.Token()}
|
||||||
|
} else if s3.Auth.Token() != "" {
|
||||||
|
req.params.Set("X-Amz-Security-Token", s3.Auth.Token())
|
||||||
}
|
}
|
||||||
|
|
||||||
if s3.Signature == aws.V2Signature {
|
if s3.Signature == aws.V2Signature {
|
||||||
|
@ -1233,6 +1235,19 @@ func shouldRetry(err error) bool {
|
||||||
case "read", "write":
|
case "read", "write":
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
case *url.Error:
|
||||||
|
// url.Error can be returned either by net/url if a URL cannot be
|
||||||
|
// parsed, or by net/http if the response is closed before the headers
|
||||||
|
// are received or parsed correctly. In that later case, e.Op is set to
|
||||||
|
// the HTTP method name with the first letter uppercased. We don't want
|
||||||
|
// to retry on POST operations, since those are not idempotent, all the
|
||||||
|
// other ones should be safe to retry.
|
||||||
|
switch e.Op {
|
||||||
|
case "Get", "Put", "Delete", "Head":
|
||||||
|
return shouldRetry(e.Err)
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
case *Error:
|
case *Error:
|
||||||
switch e.Code {
|
switch e.Code {
|
||||||
case "InternalError", "NoSuchUpload", "NoSuchBucket":
|
case "InternalError", "NoSuchUpload", "NoSuchBucket":
|
|
@ -7,9 +7,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"github.com/crowdmob/goamz/testutil"
|
"github.com/AdRoll/goamz/testutil"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,9 +4,9 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"github.com/crowdmob/goamz/testutil"
|
"github.com/AdRoll/goamz/testutil"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
|
@ -1,9 +1,9 @@
|
||||||
package s3_test
|
package s3_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"github.com/crowdmob/goamz/s3/s3test"
|
"github.com/AdRoll/goamz/s3/s3test"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
@ -432,11 +432,74 @@ func (r bucketResource) put(a *action) interface{} {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bucketResource) post(a *action) interface{} {
|
func (r bucketResource) post(a *action) interface{} {
|
||||||
fatalf(400, "Method", "bucket POST method not available")
|
if _, multiDel := a.req.URL.Query()["delete"]; multiDel {
|
||||||
|
return r.multiDel(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
fatalf(400, "Method", "bucket operation not supported")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b bucketResource) multiDel(a *action) interface{} {
|
||||||
|
type multiDelRequestObject struct {
|
||||||
|
Key string
|
||||||
|
VersionId string
|
||||||
|
}
|
||||||
|
|
||||||
|
type multiDelRequest struct {
|
||||||
|
Quiet bool
|
||||||
|
Object []*multiDelRequestObject
|
||||||
|
}
|
||||||
|
|
||||||
|
type multiDelDelete struct {
|
||||||
|
XMLName struct{} `xml:"Deleted"`
|
||||||
|
Key string
|
||||||
|
}
|
||||||
|
|
||||||
|
type multiDelError struct {
|
||||||
|
XMLName struct{} `xml:"Error"`
|
||||||
|
Key string
|
||||||
|
Code string
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
type multiDelResult struct {
|
||||||
|
XMLName struct{} `xml:"DeleteResult"`
|
||||||
|
Deleted []*multiDelDelete
|
||||||
|
Error []*multiDelError
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &multiDelRequest{}
|
||||||
|
|
||||||
|
if err := xml.NewDecoder(a.req.Body).Decode(req); err != nil {
|
||||||
|
fatalf(400, "InvalidRequest", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
res := &multiDelResult{
|
||||||
|
Deleted: []*multiDelDelete{},
|
||||||
|
Error: []*multiDelError{},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, o := range req.Object {
|
||||||
|
if _, exists := b.bucket.objects[o.Key]; exists {
|
||||||
|
delete(b.bucket.objects, o.Key)
|
||||||
|
|
||||||
|
res.Deleted = append(res.Deleted, &multiDelDelete{
|
||||||
|
Key: o.Key,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
res.Error = append(res.Error, &multiDelError{
|
||||||
|
Key: o.Key,
|
||||||
|
Code: "AccessDenied",
|
||||||
|
Message: "Access Denied",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
// validBucketName returns whether name is a valid bucket name.
|
// validBucketName returns whether name is a valid bucket name.
|
||||||
// Here are the rules, from:
|
// Here are the rules, from:
|
||||||
// http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/BucketRestrictions.html
|
// http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/BucketRestrictions.html
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"crypto/hmac"
|
"crypto/hmac"
|
||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"log"
|
"log"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
|
@ -1,8 +1,8 @@
|
||||||
package s3_test
|
package s3_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crowdmob/goamz/cloudfront"
|
"github.com/AdRoll/goamz/cloudfront"
|
||||||
"github.com/docker/distribution/storagedriver"
|
"github.com/docker/distribution/storagedriver"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Package s3 provides a storagedriver.StorageDriver implementation to
|
// Package s3 provides a storagedriver.StorageDriver implementation to
|
||||||
// store blobs in Amazon S3 cloud storage.
|
// store blobs in Amazon S3 cloud storage.
|
||||||
//
|
//
|
||||||
// This package leverages the crowdmob/goamz client library for interfacing with
|
// This package leverages the AdRoll/goamz client library for interfacing with
|
||||||
// s3.
|
// s3.
|
||||||
//
|
//
|
||||||
// Because s3 is a key, value store the Stat call does not support last modification
|
// Because s3 is a key, value store the Stat call does not support last modification
|
||||||
|
@ -24,8 +24,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/crowdmob/goamz/s3"
|
"github.com/AdRoll/goamz/s3"
|
||||||
"github.com/docker/distribution/storagedriver"
|
"github.com/docker/distribution/storagedriver"
|
||||||
"github.com/docker/distribution/storagedriver/factory"
|
"github.com/docker/distribution/storagedriver/factory"
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/crowdmob/goamz/aws"
|
"github.com/AdRoll/goamz/aws"
|
||||||
"github.com/docker/distribution/storagedriver"
|
"github.com/docker/distribution/storagedriver"
|
||||||
"github.com/docker/distribution/storagedriver/testsuites"
|
"github.com/docker/distribution/storagedriver/testsuites"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue