From 4cd5fc25fd767e44fcac98b49b02ce345545b2ea Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Sun, 22 Aug 2021 23:50:48 +0300 Subject: [PATCH] Fix the issues in HTTP POST data --- tap/extensions/http/go.mod | 2 +- tap/extensions/http/go.sum | 6 ------ tap/extensions/http/main.go | 34 ++++++++++++++++++++++++++++++---- tap/extensions/http/structs.go | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/tap/extensions/http/go.mod b/tap/extensions/http/go.mod index a2105f6eb..61b21db71 100644 --- a/tap/extensions/http/go.mod +++ b/tap/extensions/http/go.mod @@ -3,7 +3,7 @@ module github.com/up9inc/mizu/tap/extensions/http go 1.16 require ( - github.com/google/martian v2.1.0+incompatible // indirect + github.com/google/martian v2.1.0+incompatible github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7 github.com/up9inc/mizu/tap/api v0.0.0 golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 diff --git a/tap/extensions/http/go.sum b/tap/extensions/http/go.sum index ebfc4bcd6..1ff511257 100644 --- a/tap/extensions/http/go.sum +++ b/tap/extensions/http/go.sum @@ -4,15 +4,9 @@ github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7 h1:jkvpcEatpwuMF5O5LVx github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7/go.mod h1:KTrHyWpO1sevuXPZwyeZc72ddWRFqNSKDFl7uVWKpg0= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/tap/extensions/http/main.go b/tap/extensions/http/main.go index 2797e5562..4bcf7563c 100644 --- a/tap/extensions/http/main.go +++ b/tap/extensions/http/main.go @@ -235,20 +235,43 @@ func representRequest(request map[string]interface{}) []interface{} { postData, _ := request["postData"].(map[string]interface{}) mimeType, _ := postData["mimeType"] - if mimeType == nil { - mimeType = "N/A" + if mimeType == nil || len(mimeType.(string)) == 0 { + mimeType = "text/html" } text, _ := postData["text"] if text != nil { repRequest = append(repRequest, map[string]string{ "type": "body", - "title": "POST Data", - "encoding": "base64", // FIXME: Does `request` have it? + "title": "POST Data (text/plain)", + "encoding": "", "mime_type": mimeType.(string), "data": text.(string), }) } + params, _ := json.Marshal(postData["params"].([]interface{})) + if len(params) > 0 { + if mimeType == "multipart/form-data" { + multipart, _ := json.Marshal([]map[string]string{ + { + "name": "Files", + "value": string(params), + }, + }) + repRequest = append(repRequest, map[string]string{ + "type": "table", + "title": "POST Data (multipart/form-data)", + "data": string(multipart), + }) + } else { + repRequest = append(repRequest, map[string]string{ + "type": "table", + "title": "POST Data (application/x-www-form-urlencoded)", + "data": string(params), + }) + } + } + return repRequest } @@ -291,6 +314,9 @@ func representResponse(response map[string]interface{}) []interface{} { content, _ := response["content"].(map[string]interface{}) mimeType, _ := content["mimeType"] + if mimeType == nil || len(mimeType.(string)) == 0 { + mimeType = "text/html" + } encoding, _ := content["encoding"] text, _ := content["text"] if text != nil { diff --git a/tap/extensions/http/structs.go b/tap/extensions/http/structs.go index ef0f7b6a2..bd231461a 100644 --- a/tap/extensions/http/structs.go +++ b/tap/extensions/http/structs.go @@ -28,7 +28,7 @@ type HTTPWrapper struct { func (h HTTPPayload) MarshalJSON() ([]byte, error) { switch h.Type { case "http_request": - harRequest, err := har.NewRequest(h.Data.(*http.Request), false) + harRequest, err := har.NewRequest(h.Data.(*http.Request), true) if err != nil { rlog.Debugf("convert-request-to-har", "Failed converting request to HAR %s (%v,%+v)", err, err, err) return nil, errors.New("Failed converting request to HAR")