|
|
@ -24,13 +24,13 @@ import ( |
|
|
|
"errors" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"io" |
|
|
|
"io" |
|
|
|
"net" |
|
|
|
|
|
|
|
"net/http" |
|
|
|
"net/http" |
|
|
|
"net/url" |
|
|
|
"net/url" |
|
|
|
"sort" |
|
|
|
"sort" |
|
|
|
"strings" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/gorilla/mux" |
|
|
|
"github.com/minio-io/minio/pkg/api/config" |
|
|
|
"github.com/minio-io/minio/pkg/api/config" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -175,8 +175,8 @@ var subResList = []string{ |
|
|
|
// <HTTP-Request-URI, from the protocol name up to the query string> +
|
|
|
|
// <HTTP-Request-URI, from the protocol name up to the query string> +
|
|
|
|
// [ sub-resource, if present. For example "?acl", "?location", "?logging", or "?torrent"];
|
|
|
|
// [ sub-resource, if present. For example "?acl", "?location", "?logging", or "?torrent"];
|
|
|
|
func writeCanonicalizedResource(buf *bytes.Buffer, req *http.Request) { |
|
|
|
func writeCanonicalizedResource(buf *bytes.Buffer, req *http.Request) { |
|
|
|
// Grab bucket name from hostname
|
|
|
|
vars := mux.Vars(req) |
|
|
|
bucket := bucketFromHostname(req) |
|
|
|
bucket := vars["bucket"] |
|
|
|
if bucket != "" { |
|
|
|
if bucket != "" { |
|
|
|
buf.WriteByte('/') |
|
|
|
buf.WriteByte('/') |
|
|
|
buf.WriteString(bucket) |
|
|
|
buf.WriteString(bucket) |
|
|
@ -203,23 +203,3 @@ func writeCanonicalizedResource(buf *bytes.Buffer, req *http.Request) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Convert subdomain http request into bucketname if possible
|
|
|
|
|
|
|
|
func bucketFromHostname(req *http.Request) string { |
|
|
|
|
|
|
|
host, _, _ := net.SplitHostPort(req.Host) |
|
|
|
|
|
|
|
// Verify incoming request if only IP with no bucket subdomain
|
|
|
|
|
|
|
|
if net.ParseIP(host) != nil { |
|
|
|
|
|
|
|
return "" |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if host == "" { |
|
|
|
|
|
|
|
host = req.URL.Host |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Grab the bucket from the incoming hostname
|
|
|
|
|
|
|
|
host = strings.TrimSpace(host) |
|
|
|
|
|
|
|
hostParts := strings.Split(host, ".") |
|
|
|
|
|
|
|
if len(hostParts) > 2 { |
|
|
|
|
|
|
|
return hostParts[0] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return "" |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|