mirror of
https://github.com/minio/minio.git
synced 2025-02-03 09:55:59 -05:00
handlers: Handle re-direction properly for S3 requests. (#3355)
Make sure all S3 signature requests are not re-directed to `/minio`. This should be only done for JWT and some Anonymous requests. This also fixes a bug found from https://github.com/bji/libs3 ``` $ s3 -u list ERROR: XmlParseFailure ``` Now after this fix shows proper output ``` $ s3 -u list Bucket Created -------------------------------------------------------- -------------------- andoria 2016-11-27T08:19:06Z ```
This commit is contained in:
parent
f3322e94c8
commit
201a20ac02
@ -81,22 +81,26 @@ func setBrowserRedirectHandler(h http.Handler) http.Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h redirectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h redirectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
// Re-direction handled specifically for browsers.
|
aType := getRequestAuthType(r)
|
||||||
if strings.Contains(r.Header.Get("User-Agent"), "Mozilla") && !isRequestSignatureV4(r) {
|
// Re-direct only for JWT and anonymous requests coming from web-browser.
|
||||||
switch r.URL.Path {
|
if aType == authTypeJWT || aType == authTypeAnonymous {
|
||||||
case "/", "/webrpc", "/login", "/favicon.ico":
|
// Re-direction handled specifically for browsers.
|
||||||
// '/' is redirected to 'locationPrefix/'
|
if strings.Contains(r.Header.Get("User-Agent"), "Mozilla") {
|
||||||
// '/webrpc' is redirected to 'locationPrefix/webrpc'
|
switch r.URL.Path {
|
||||||
// '/login' is redirected to 'locationPrefix/login'
|
case "/", "/webrpc", "/login", "/favicon.ico":
|
||||||
location := h.locationPrefix + r.URL.Path
|
// '/' is redirected to 'locationPrefix/'
|
||||||
// Redirect to new location.
|
// '/webrpc' is redirected to 'locationPrefix/webrpc'
|
||||||
http.Redirect(w, r, location, http.StatusTemporaryRedirect)
|
// '/login' is redirected to 'locationPrefix/login'
|
||||||
return
|
location := h.locationPrefix + r.URL.Path
|
||||||
case h.locationPrefix:
|
// Redirect to new location.
|
||||||
// locationPrefix is redirected to 'locationPrefix/'
|
http.Redirect(w, r, location, http.StatusTemporaryRedirect)
|
||||||
location := h.locationPrefix + "/"
|
return
|
||||||
http.Redirect(w, r, location, http.StatusTemporaryRedirect)
|
case h.locationPrefix:
|
||||||
return
|
// locationPrefix is redirected to 'locationPrefix/'
|
||||||
|
location := h.locationPrefix + "/"
|
||||||
|
http.Redirect(w, r, location, http.StatusTemporaryRedirect)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
h.handler.ServeHTTP(w, r)
|
h.handler.ServeHTTP(w, r)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user