mirror of
https://github.com/openfaas/faas.git
synced 2025-06-12 18:26:49 +00:00
Pass headers when using external auth
Fixes issue found in e2e testing where the headers were not being passed to the basic-auth-plugin. This change makes sure the upstream check gets all headers copied in before making the call. Tested with negative unit tests before writing fix. Signed-off-by: Alex Ellis <alexellis2@gmail.com>
This commit is contained in:
parent
8fe40406fa
commit
6beca8f59b
@ -11,6 +11,8 @@ func MakeExternalAuthHandler(next http.HandlerFunc, upstreamTimeout time.Duratio
|
|||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
req, _ := http.NewRequest(http.MethodGet, upstreamURL, nil)
|
req, _ := http.NewRequest(http.MethodGet, upstreamURL, nil)
|
||||||
|
|
||||||
|
copyHeaders(req.Header, &r.Header)
|
||||||
|
|
||||||
deadlineContext, cancel := context.WithTimeout(
|
deadlineContext, cancel := context.WithTimeout(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
upstreamTimeout)
|
upstreamTimeout)
|
||||||
|
@ -53,6 +53,66 @@ func Test_External_Auth_Wrapper_PassesValidAuth(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_External_Auth_Wrapper_WithoutRequiredHeaderFailsAuth(t *testing.T) {
|
||||||
|
wantToken := "secret-key"
|
||||||
|
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Header.Get("X-Token") == wantToken {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
|
}))
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
next := func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
|
}
|
||||||
|
|
||||||
|
passBody := false
|
||||||
|
handler := MakeExternalAuthHandler(next, time.Second*5, s.URL, passBody)
|
||||||
|
|
||||||
|
req := httptest.NewRequest(http.MethodGet, s.URL, nil)
|
||||||
|
|
||||||
|
// use an invalid token
|
||||||
|
req.Header.Set("X-Token", "invalid-key")
|
||||||
|
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
handler(rr, req)
|
||||||
|
want := http.StatusUnauthorized
|
||||||
|
if rr.Code != want {
|
||||||
|
t.Errorf("Status incorrect, want: %d, but got %d", want, rr.Code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_External_Auth_Wrapper_WithRequiredHeaderPassesValidAuth(t *testing.T) {
|
||||||
|
wantToken := "secret-key"
|
||||||
|
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Header.Get("X-Token") == wantToken {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
|
}))
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
next := func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
|
}
|
||||||
|
|
||||||
|
passBody := false
|
||||||
|
handler := MakeExternalAuthHandler(next, time.Second*5, s.URL, passBody)
|
||||||
|
|
||||||
|
req := httptest.NewRequest(http.MethodGet, s.URL, nil)
|
||||||
|
req.Header.Set("X-Token", wantToken)
|
||||||
|
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
handler(rr, req)
|
||||||
|
want := http.StatusNotImplemented
|
||||||
|
if rr.Code != want {
|
||||||
|
t.Errorf("Status incorrect, want: %d, but got %d", want, rr.Code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Test_External_Auth_Wrapper_TimeoutGivesInternalServerError(t *testing.T) {
|
func Test_External_Auth_Wrapper_TimeoutGivesInternalServerError(t *testing.T) {
|
||||||
|
|
||||||
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user