diff --git a/capture.go b/capture.go index b5bee86..24a48fa 100644 --- a/capture.go +++ b/capture.go @@ -28,7 +28,7 @@ func (items *Captures) Add(capture Capture) { } } -func (items *Captures) GetRefs(itemBaseUrl string) []CaptureRef { +func (items *Captures) ToReferences(itemBaseUrl string) []CaptureRef { refs := make([]CaptureRef, len(*items)) for i, item := range *items { refs[i] = CaptureRef{ diff --git a/dashboard.go b/dashboard.go index 6b20e2c..3df53a6 100644 --- a/dashboard.go +++ b/dashboard.go @@ -39,7 +39,7 @@ const dashboardHTML = ` --b0E: #a626a4; --b0F: #986801; - --e0C: #82aaff; + --e0D: #82aaff; --e0E: #c792ea; } @@ -76,7 +76,7 @@ const dashboardHTML = ` .list-item { flex-shrink: 0; padding: 1rem; - color: var(--e0C); + color: var(--e0D); background: var(--b07); cursor: pointer; margin-bottom: 0.5rem; @@ -118,6 +118,15 @@ const dashboardHTML = ` .res-inner:before { content: "RESPONSE"; } + + .bt-pretty { + position: absolute; + right: .5rem; + top: 0.25rem; + font-size: .75em; + color: var(--e0E); + text-decoration: none; + } @@ -137,12 +146,14 @@ const dashboardHTML = `
-
{{request}}
+ prettify +
{{request}}
+ prettify
{{response}}
@@ -159,6 +170,8 @@ const dashboardHTML = ` $http.get(item.itemUrl).then(r => { $scope.request = r.data.request; $scope.response = r.data.response; + $scope.canPrettifyRequestBody = r.data.request.indexOf('Content-Type: application/json') != -1; + $scope.canPrettifyResponseBody = r.data.response.indexOf('Content-Type: application/json') != -1; }); } @@ -171,6 +184,15 @@ const dashboardHTML = ` return $scope.selectedId == item.id; } + $scope.prettifyBody = key => { + let regex = /.*\n([\{\[].*[\}\]]).*/gs; + let data = $scope[key]; + let match = regex.exec(data); + let body = match[1]; + let prettyBody = JSON.stringify(JSON.parse(body), null, ' '); + $scope[key] = data.replace(body, prettyBody); + } + let socket = io(); socket.on('connect', () => { socket.on('captures', captures => { diff --git a/main.go b/main.go index 6cb207c..3346be1 100644 --- a/main.go +++ b/main.go @@ -84,16 +84,17 @@ func getSocketHandler() http.Handler { } func (t Transport) RoundTrip(req *http.Request) (*http.Response, error) { - res, err := t.RoundTripper.RoundTrip(req) - if err != nil { - return nil, errors.New("uh oh | " + err.Error() + " | " + req.URL.String()) - } reqDump, err := DumpRequest(req) if err != nil { return nil, err } + res, err := t.RoundTripper.RoundTrip(req) + if err != nil { + return nil, errors.New("uh oh | " + err.Error() + " | " + req.URL.String()) + } + resDump, err := DumpResponse(res) if err != nil { return nil, err @@ -119,10 +120,11 @@ func DumpRequest(req *http.Request) ([]byte, error) { func DumpResponse(res *http.Response) ([]byte, error) { var originalBody bytes.Buffer - res.Body = ioutil.NopCloser(io.TeeReader(res.Body, &originalBody)) + reader := io.TeeReader(res.Body, &originalBody) if res.Header.Get("Content-Encoding") == "gzip" { - res.Body, _ = gzip.NewReader(res.Body) + reader, _ = gzip.NewReader(reader) } + res.Body = ioutil.NopCloser(reader) resDump, err := httputil.DumpResponse(res, true) res.Body = ioutil.NopCloser(&originalBody) return resDump, err @@ -132,5 +134,5 @@ func emit() { if socket == nil { return } - socket.Emit("captures", captures.GetRefs(host+dashboardItemsPath)) + socket.Emit("captures", captures.ToReferences(host+dashboardItemsPath)) }