mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
tsweb: fix Port80Handler redirect to https with FQDN unset
Fixes the current http://pkgs.tailscale.com/ redirect to https:/// as that server doesn't configure the Port80Handler.FQDN field. Change-Id: Iff56e6127a46c306ca97738d91b217bcab32a582 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
c6ac82e3a6
commit
0df3b76c25
@ -162,7 +162,7 @@ func (h Port80Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
host := h.FQDN
|
||||
if host == "" {
|
||||
host = r.URL.Hostname()
|
||||
host = r.Host
|
||||
}
|
||||
target := "https://" + host + path
|
||||
http.Redirect(w, r, target, http.StatusFound)
|
||||
|
@ -580,3 +580,45 @@ func TestAcceptsEncoding(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPort80Handler(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
h *Port80Handler
|
||||
req string
|
||||
wantLoc string
|
||||
}{
|
||||
{
|
||||
name: "no_fqdn",
|
||||
h: &Port80Handler{},
|
||||
req: "GET / HTTP/1.1\r\nHost: foo.com\r\n\r\n",
|
||||
wantLoc: "https://foo.com/",
|
||||
},
|
||||
{
|
||||
name: "fqdn_and_path",
|
||||
h: &Port80Handler{FQDN: "bar.com"},
|
||||
req: "GET /path HTTP/1.1\r\nHost: foo.com\r\n\r\n",
|
||||
wantLoc: "https://bar.com/path",
|
||||
},
|
||||
{
|
||||
name: "path_and_query_string",
|
||||
h: &Port80Handler{FQDN: "baz.com"},
|
||||
req: "GET /path?a=b HTTP/1.1\r\nHost: foo.com\r\n\r\n",
|
||||
wantLoc: "https://baz.com/path?a=b",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
r, _ := http.ReadRequest(bufio.NewReader(strings.NewReader(tt.req)))
|
||||
rec := httptest.NewRecorder()
|
||||
tt.h.ServeHTTP(rec, r)
|
||||
got := rec.Result()
|
||||
if got, want := got.StatusCode, 302; got != want {
|
||||
t.Errorf("got status code %v; want %v", got, want)
|
||||
}
|
||||
if got, want := got.Header.Get("Location"), "https://foo.com/"; got != tt.wantLoc {
|
||||
t.Errorf("Location = %q; want %q", got, want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user