fix: obtain correct location string with DNS style buckets (#10060)

closes #10054
master
Harshavardhana 4 years ago committed by GitHub
parent 1341bf5a9e
commit 7342b5355f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      cmd/api-response.go
  2. 17
      cmd/api-response_test.go

@ -396,8 +396,7 @@ func getObjectLocation(r *http.Request, domains []string, bucket, object string)
} }
// If domain is set then we need to use bucket DNS style. // If domain is set then we need to use bucket DNS style.
for _, domain := range domains { for _, domain := range domains {
if strings.Contains(r.Host, domain) { if strings.HasPrefix(r.Host, bucket+"."+domain) {
u.Host = bucket + "." + r.Host
u.Path = path.Join(SlashSeparator, object) u.Path = path.Join(SlashSeparator, object)
break break
} }

@ -77,7 +77,7 @@ func TestObjectLocation(t *testing.T) {
// Server with virtual domain name. // Server with virtual domain name.
{ {
request: &http.Request{ request: &http.Request{
Host: "mys3.bucket.org", Host: "mybucket.mys3.bucket.org",
Header: map[string][]string{}, Header: map[string][]string{},
}, },
domains: []string{"mys3.bucket.org"}, domains: []string{"mys3.bucket.org"},
@ -87,7 +87,7 @@ func TestObjectLocation(t *testing.T) {
}, },
{ {
request: &http.Request{ request: &http.Request{
Host: "mys3.bucket.org", Host: "mybucket.mys3.bucket.org",
Header: map[string][]string{ Header: map[string][]string{
"X-Forwarded-Scheme": {httpsScheme}, "X-Forwarded-Scheme": {httpsScheme},
}, },
@ -98,11 +98,14 @@ func TestObjectLocation(t *testing.T) {
expectedLocation: "https://mybucket.mys3.bucket.org/test/1.txt", expectedLocation: "https://mybucket.mys3.bucket.org/test/1.txt",
}, },
} }
for i, testCase := range testCases { for _, testCase := range testCases {
gotLocation := getObjectLocation(testCase.request, testCase.domains, testCase.bucket, testCase.object) testCase := testCase
if testCase.expectedLocation != gotLocation { t.Run("", func(t *testing.T) {
t.Errorf("Test %d: expected %s, got %s", i+1, testCase.expectedLocation, gotLocation) gotLocation := getObjectLocation(testCase.request, testCase.domains, testCase.bucket, testCase.object)
} if testCase.expectedLocation != gotLocation {
t.Errorf("expected %s, got %s", testCase.expectedLocation, gotLocation)
}
})
} }
} }

Loading…
Cancel
Save