getRequestHeaders returns value for Host header. Fixes #78

This commit is contained in:
Héctor Hurtado
2020-09-09 14:06:53 +02:00
parent 6c3bee9ae0
commit 5c1a00e340
2 changed files with 38 additions and 3 deletions
+7 -2
View File
@@ -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)
}
}
}
+31 -1
View File
@@ -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{