diff --git a/internal/server/data/resource.go b/internal/server/data/resource.go index fb1ff8c..f7399c3 100644 --- a/internal/server/data/resource.go +++ b/internal/server/data/resource.go @@ -97,10 +97,15 @@ func getRequestParams(w http.ResponseWriter, r *http.Request, h *model.Handler) func getRequestHeaders(w http.ResponseWriter, r *http.Request, h *model.Handler) { w.Header().Add("Content-Type", "application/octet-stream") name := mux.Vars(r)["name"] - if values, ok := h.Request.Header[textproto.CanonicalMIMEHeaderKey(name)]; ok { + name = textproto.CanonicalMIMEHeaderKey(name) + if values, ok := h.Request.Header[name]; ok { _, _ = w.Write([]byte(values[0])) } else { - httperror.ErrorJSON(w, ResourceItemNotFound, http.StatusNotFound) + if name == "Host" { + _, _ = w.Write([]byte(h.Request.Host)) + } else { + httperror.ErrorJSON(w, ResourceItemNotFound, http.StatusNotFound) + } } } diff --git a/internal/server/data/resource_test.go b/internal/server/data/resource_test.go index 51ee2a4..d59d205 100644 --- a/internal/server/data/resource_test.go +++ b/internal/server/data/resource_test.go @@ -691,7 +691,37 @@ func TestGetRequestHeadersReturnsTheFirstCorrectMatchValue(t *testing.T) { } } -// DOING #78: /request/headers/Host /request/headers/host +func TestGetRequestHeadersReturns200sForHostHeader(t *testing.T) { + h := model.Handler{ + Request: httptest.NewRequest("GET", "http://www.foo.bar:8080/", nil), + Writer: httptest.NewRecorder(), + } + r := createMuxRequest("/handlers/HANDLERID/request/headers/{name}", "/handlers/HANDLERID/request/headers/Host", "GET", nil) + w := httptest.NewRecorder() + + getRequestHeaders(w, r, &h) + + res := w.Result() + if res.StatusCode != http.StatusOK { + t.Errorf("Status code mismatch. Expected: %d, got: %d", http.StatusOK, res.StatusCode) + } +} + +func TestGetRequestHeadersReturnsTheCorrectValueForHostHeader(t *testing.T) { + h := model.Handler{ + Request: httptest.NewRequest("GET", "http://www.foo.bar:8080/", nil), + Writer: httptest.NewRecorder(), + } + r := createMuxRequest("/handlers/HANDLERID/request/headers/{name}", "/handlers/HANDLERID/request/headers/Host", "GET", nil) + w := httptest.NewRecorder() + + getRequestHeaders(w, r, &h) + + res := w.Result() + if body, _ := ioutil.ReadAll(res.Body); string(body) != "www.foo.bar:8080" { + t.Errorf("Body mismatch. Expected: %q. Got: %q", "www.foo.bar:8080", string(body)) + } +} func TestGetRequestCookies200sOnHappyPath(t *testing.T) { h := model.Handler{