From 0c00400ece1c85ac50c7b2c26640075dd357908f Mon Sep 17 00:00:00 2001 From: Jacob Moore Date: Wed, 6 Mar 2024 18:50:47 -0500 Subject: [PATCH] Fixed multi header handling by adapting model to actually be a slice --- daemon/build_request.go | 6 +++--- daemon/handle_mock.go | 10 ++++++---- daemon/handle_request.go | 12 +++++++----- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/daemon/build_request.go b/daemon/build_request.go index a607042..c04e005 100644 --- a/daemon/build_request.go +++ b/daemon/build_request.go @@ -182,10 +182,10 @@ func ReconstructURL(r *http.Request, protocol, host, basepath string, port strin return url } -func ExtractHeaders(resp *http.Response) map[string]any { - headers := make(map[string]any) +func ExtractHeaders(resp *http.Response) map[string][]string { + headers := make(map[string][]string) for k, v := range resp.Header { - headers[k] = v[0] + headers[k] = v } return headers } diff --git a/daemon/handle_mock.go b/daemon/handle_mock.go index ab5378c..9da4791 100644 --- a/daemon/handle_mock.go +++ b/daemon/handle_mock.go @@ -37,9 +37,9 @@ func (ws *WiretapService) handleMockRequest( time.Sleep(5 * time.Millisecond) // wiretap needs to work from anywhere, so allow everything. - headers := make(map[string]any) + headers := make(map[string][]string) setCORSHeaders(headers) - headers["Content-Type"] = "application/json" + headers["Content-Type"] = []string{"application/json"} buff := bytes.NewBuffer(mock) @@ -52,8 +52,10 @@ func (ws *WiretapService) handleMockRequest( resp.Header = header // write headers for k, v := range headers { - request.HttpResponseWriter.Header().Set(k, fmt.Sprint(v)) - header.Add(k, fmt.Sprint(v)) + for j := range v { + request.HttpResponseWriter.Header().Set(k, fmt.Sprint(j)) + header.Add(k, fmt.Sprint(v)) + } } // if there was an error building the mock, return a 404 diff --git a/daemon/handle_request.go b/daemon/handle_request.go index 1f28a4e..6a0239b 100644 --- a/daemon/handle_request.go +++ b/daemon/handle_request.go @@ -215,7 +215,9 @@ func (ws *WiretapService) handleHttpRequest(request *model.Request) { // write headers for k, v := range headers { - request.HttpResponseWriter.Header().Set(k, fmt.Sprint(v)) + for _, j := range v { + request.HttpResponseWriter.Header().Set(k, fmt.Sprint(j)) + } } config.Logger.Info("[wiretap] request completed", "url", request.HttpRequest.URL.String(), "code", returnedResponse.StatusCode) @@ -236,8 +238,8 @@ func (ws *WiretapService) handleHttpRequest(request *model.Request) { _, _ = request.HttpResponseWriter.Write(body) } -func setCORSHeaders(headers map[string]any) { - headers["Access-Control-Allow-Headers"] = "*" - headers["Access-Control-Allow-Origin"] = "*" - headers["Access-Control-Allow-Methods"] = "OPTIONS,POST,GET,DELETE,PATCH,PUT" +func setCORSHeaders(headers map[string][]string) { + headers["Access-Control-Allow-Headers"] = []string{"*"} + headers["Access-Control-Allow-Origin"] = []string{"*"} + headers["Access-Control-Allow-Methods"] = []string{"OPTIONS,POST,GET,DELETE,PATCH,PUT"} }