Even mux vars don't help, handle it by looking at req.URL.Path

master
Harshavardhana 10 years ago
parent b69327a617
commit 2c7b30e5e1
  1. 21
      pkg/api/api_signature.go
  2. 5
      pkg/api/api_test.go

@ -30,7 +30,6 @@ import (
"strings"
"time"
"github.com/gorilla/mux"
"github.com/minio-io/minio/pkg/api/config"
)
@ -169,14 +168,30 @@ var subResList = []string{
"website",
}
func url2BucketAndObject(url string) (string, string) {
var bucketName, objectName string
splits := strings.SplitN(url, "/", 3)
switch len(splits) {
case 0, 1:
bucketName = ""
objectName = ""
case 2:
bucketName = splits[1]
objectName = ""
case 3:
bucketName = splits[1]
objectName = splits[2]
}
return bucketName, objectName
}
// From the Amazon docs:
//
// CanonicalizedResource = [ "/" + Bucket ] +
// <HTTP-Request-URI, from the protocol name up to the query string> +
// [ sub-resource, if present. For example "?acl", "?location", "?logging", or "?torrent"];
func writeCanonicalizedResource(buf *bytes.Buffer, req *http.Request) {
vars := mux.Vars(req)
bucket := vars["bucket"]
bucket, _ := url2BucketAndObject(req.URL.Path)
if bucket != "" {
buf.WriteByte('/')
buf.WriteString(bucket)

@ -113,17 +113,18 @@ func (s *MySuite) TearDownTest(c *C) {
}
func setAuthHeader(req *http.Request) {
if date := req.Header.Get("Date"); date == "" {
req.Header.Set("Date", time.Now().UTC().Format(http.TimeFormat))
}
hm := hmac.New(sha1.New, []byte("H+AVh8q5G7hEH2r3WxFP135+Q19Aw8yXWel8IGh/HrEjZyTNx/n4Xw=="))
ss := getStringToSign(req)
io.WriteString(hm, ss)
authHeader := new(bytes.Buffer)
fmt.Fprintf(authHeader, "AWS %s:", "AC5NH40NQLTL4D2W92PM")
encoder := base64.NewEncoder(base64.StdEncoding, authHeader)
encoder.Write(hm.Sum(nil))
encoder.Close()
req.Header.Set("Authorization", authHeader.String())
req.Header.Set("Date", time.Now().UTC().Format(http.TimeFormat))
}
func (s *MySuite) TestNonExistantBucket(c *C) {

Loading…
Cancel
Save