mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
fix: preserve IPv6 brackets in redirects
Re-wrap bare IPv6 hosts after stripping ports so HTTPS redirect URLs stay valid. Add a regression test covering bracketed IPv6 hosts in redirect responses.
This commit is contained in:
parent
9e57f5a5f5
commit
121679b44e
2 changed files with 23 additions and 0 deletions
3
serve.go
3
serve.go
|
|
@ -332,6 +332,9 @@ func buildRedirectServer(engine *Engine, cfg runConfig) (*http.Server, error) {
|
||||||
|
|
||||||
if parsedHost, _, err := net.SplitHostPort(host); err == nil {
|
if parsedHost, _, err := net.SplitHostPort(host); err == nil {
|
||||||
host = parsedHost
|
host = parsedHost
|
||||||
|
if strings.Contains(host, ":") && !strings.HasPrefix(host, "[") {
|
||||||
|
host = "[" + host + "]"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
targetURL := "https://" + host
|
targetURL := "https://" + host
|
||||||
|
|
|
||||||
|
|
@ -399,6 +399,26 @@ func TestBuildRedirectServerUsesConfiguredRedirectHostWhenHeaderModeDisabled(t *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBuildRedirectServerPreservesIPv6BracketsInRedirectURL(t *testing.T) {
|
||||||
|
engine := New()
|
||||||
|
server, err := buildRedirectServer(engine, runConfig{addr: ":443", httpRedirectAddr: ":80"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("build redirect server: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req := httptest.NewRequest(http.MethodGet, "http://[::1]/plain/path?q=1", nil)
|
||||||
|
req.Host = "[::1]:80"
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
server.Handler.ServeHTTP(rr, req)
|
||||||
|
|
||||||
|
if rr.Code != http.StatusMovedPermanently {
|
||||||
|
t.Fatalf("expected redirect status %d, got %d", http.StatusMovedPermanently, rr.Code)
|
||||||
|
}
|
||||||
|
if location := rr.Header().Get("Location"); location != "https://[::1]/plain/path?q=1" {
|
||||||
|
t.Fatalf("unexpected IPv6 redirect location: %q", location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGracefulServeShutsDownSiblingServersOnStartupFailure(t *testing.T) {
|
func TestGracefulServeShutsDownSiblingServersOnStartupFailure(t *testing.T) {
|
||||||
occupied, err := net.Listen("tcp", "127.0.0.1:0")
|
occupied, err := net.Listen("tcp", "127.0.0.1:0")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue