use the scheme and host from x-forward-proto and x-forward-host if they exits and correct the scheme for Location header during image upload
Signed-off-by: yuzou <zouyu7@huawei.com>master
							parent
							
								
									e02a0b0399
								
							
						
					
					
						commit
						d724bb1d24
					
				|  | @ -204,7 +204,9 @@ func (cr clonedRoute) URL(pairs ...string) (*url.URL, error) { | |||
| 		routeURL.Path = routeURL.Path[1:] | ||||
| 	} | ||||
| 
 | ||||
| 	return cr.root.ResolveReference(routeURL), nil | ||||
| 	url := cr.root.ResolveReference(routeURL) | ||||
| 	url.Scheme = cr.root.Scheme | ||||
| 	return url, nil | ||||
| } | ||||
| 
 | ||||
| // appendValuesURL appends the parameters to the url.
 | ||||
|  |  | |||
|  | @ -166,6 +166,11 @@ func TestBuilderFromRequest(t *testing.T) { | |||
| 			request: &http.Request{URL: u, Host: u.Host}, | ||||
| 			base:    "http://example.com", | ||||
| 		}, | ||||
| 
 | ||||
| 		{ | ||||
| 			request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader}, | ||||
| 			base:    "http://example.com", | ||||
| 		}, | ||||
| 		{ | ||||
| 			request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader}, | ||||
| 			base:    "https://example.com", | ||||
|  | @ -197,15 +202,26 @@ func TestBuilderFromRequest(t *testing.T) { | |||
| 		} | ||||
| 
 | ||||
| 		for _, testCase := range makeURLBuilderTestCases(builder) { | ||||
| 			url, err := testCase.build() | ||||
| 			buildURL, err := testCase.build() | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("%s: error building url: %v", testCase.description, err) | ||||
| 			} | ||||
| 
 | ||||
| 			expectedURL := tr.base + testCase.expectedPath | ||||
| 			var expectedURL string | ||||
| 			proto, ok := tr.request.Header["X-Forwarded-Proto"] | ||||
| 			if !ok { | ||||
| 				expectedURL = tr.base + testCase.expectedPath | ||||
| 			} else { | ||||
| 				urlBase, err := url.Parse(tr.base) | ||||
| 				if err != nil { | ||||
| 					t.Fatal(err) | ||||
| 				} | ||||
| 				urlBase.Scheme = proto[0] | ||||
| 				expectedURL = urlBase.String() + testCase.expectedPath | ||||
| 			} | ||||
| 
 | ||||
| 			if url != expectedURL { | ||||
| 				t.Fatalf("%s: %q != %q", testCase.description, url, expectedURL) | ||||
| 			if buildURL != expectedURL { | ||||
| 				t.Fatalf("%s: %q != %q", testCase.description, buildURL, expectedURL) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | @ -229,6 +245,11 @@ func TestBuilderFromRequestWithPrefix(t *testing.T) { | |||
| 			request: &http.Request{URL: u, Host: u.Host}, | ||||
| 			base:    "http://example.com/prefix/", | ||||
| 		}, | ||||
| 
 | ||||
| 		{ | ||||
| 			request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader}, | ||||
| 			base:    "http://example.com/prefix/", | ||||
| 		}, | ||||
| 		{ | ||||
| 			request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader}, | ||||
| 			base:    "https://example.com/prefix/", | ||||
|  | @ -253,15 +274,25 @@ func TestBuilderFromRequestWithPrefix(t *testing.T) { | |||
| 		} | ||||
| 
 | ||||
| 		for _, testCase := range makeURLBuilderTestCases(builder) { | ||||
| 			url, err := testCase.build() | ||||
| 			buildURL, err := testCase.build() | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("%s: error building url: %v", testCase.description, err) | ||||
| 			} | ||||
| 			var expectedURL string | ||||
| 			proto, ok := tr.request.Header["X-Forwarded-Proto"] | ||||
| 			if !ok { | ||||
| 				expectedURL = tr.base[0:len(tr.base)-1] + testCase.expectedPath | ||||
| 			} else { | ||||
| 				urlBase, err := url.Parse(tr.base) | ||||
| 				if err != nil { | ||||
| 					t.Fatal(err) | ||||
| 				} | ||||
| 				urlBase.Scheme = proto[0] | ||||
| 				expectedURL = urlBase.String()[0:len(urlBase.String())-1] + testCase.expectedPath | ||||
| 			} | ||||
| 
 | ||||
| 			expectedURL := tr.base[0:len(tr.base)-1] + testCase.expectedPath | ||||
| 
 | ||||
| 			if url != expectedURL { | ||||
| 				t.Fatalf("%s: %q != %q", testCase.description, url, expectedURL) | ||||
| 			if buildURL != expectedURL { | ||||
| 				t.Fatalf("%s: %q != %q", testCase.description, buildURL, expectedURL) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue