Add an option to preserve the ForwardAuth Server Location header

This commit is contained in:
Nelson Isioma 2024-12-13 10:38:37 +01:00 committed by GitHub
parent 4974d9e4d7
commit 2302debac2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 115 additions and 5 deletions

View file

@ -711,6 +711,34 @@ func TestForwardAuthTracing(t *testing.T) {
}
}
func TestForwardAuthPreserveLocationHeader(t *testing.T) {
relativeURL := "/index.html"
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Location", relativeURL)
http.Error(w, "Unauthorized", http.StatusUnauthorized)
}))
t.Cleanup(server.Close)
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
auth := dynamic.ForwardAuth{
Address: server.URL,
PreserveLocationHeader: true,
}
middleware, err := NewForward(context.Background(), next, auth, "authTest")
require.NoError(t, err)
ts := httptest.NewServer(middleware)
t.Cleanup(ts.Close)
req := testhelpers.MustNewRequest(http.MethodGet, ts.URL, nil)
res, err := http.DefaultClient.Do(req)
require.NoError(t, err)
assert.Equal(t, http.StatusUnauthorized, res.StatusCode)
assert.Equal(t, relativeURL, res.Header.Get("Location"))
}
type mockTracer struct {
embedded.Tracer