Merge pull request #1097 from hopkings2008/master
use the scheme and host from x-forward-proto and x-forward-host if the…master
						commit
						0e73b8a37f
					
				| 
						 | 
					@ -204,7 +204,9 @@ func (cr clonedRoute) URL(pairs ...string) (*url.URL, error) {
 | 
				
			||||||
		routeURL.Path = routeURL.Path[1:]
 | 
							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.
 | 
					// appendValuesURL appends the parameters to the url.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,6 +166,11 @@ func TestBuilderFromRequest(t *testing.T) {
 | 
				
			||||||
			request: &http.Request{URL: u, Host: u.Host},
 | 
								request: &http.Request{URL: u, Host: u.Host},
 | 
				
			||||||
			base:    "http://example.com",
 | 
								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},
 | 
								request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader},
 | 
				
			||||||
			base:    "https://example.com",
 | 
								base:    "https://example.com",
 | 
				
			||||||
| 
						 | 
					@ -197,15 +202,26 @@ func TestBuilderFromRequest(t *testing.T) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, testCase := range makeURLBuilderTestCases(builder) {
 | 
							for _, testCase := range makeURLBuilderTestCases(builder) {
 | 
				
			||||||
			url, err := testCase.build()
 | 
								buildURL, err := testCase.build()
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Fatalf("%s: error building url: %v", testCase.description, err)
 | 
									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 {
 | 
								if buildURL != expectedURL {
 | 
				
			||||||
				t.Fatalf("%s: %q != %q", testCase.description, url, 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},
 | 
								request: &http.Request{URL: u, Host: u.Host},
 | 
				
			||||||
			base:    "http://example.com/prefix/",
 | 
								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},
 | 
								request: &http.Request{URL: u, Host: u.Host, Header: forwardedProtoHeader},
 | 
				
			||||||
			base:    "https://example.com/prefix/",
 | 
								base:    "https://example.com/prefix/",
 | 
				
			||||||
| 
						 | 
					@ -253,15 +274,25 @@ func TestBuilderFromRequestWithPrefix(t *testing.T) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, testCase := range makeURLBuilderTestCases(builder) {
 | 
							for _, testCase := range makeURLBuilderTestCases(builder) {
 | 
				
			||||||
			url, err := testCase.build()
 | 
								buildURL, err := testCase.build()
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Fatalf("%s: error building url: %v", testCase.description, err)
 | 
									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 buildURL != expectedURL {
 | 
				
			||||||
 | 
									t.Fatalf("%s: %q != %q", testCase.description, buildURL, expectedURL)
 | 
				
			||||||
			if url != expectedURL {
 | 
					 | 
				
			||||||
				t.Fatalf("%s: %q != %q", testCase.description, url, expectedURL)
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue