From 6d319f2fa15a09a5f972789c9b5779479415b65c Mon Sep 17 00:00:00 2001 From: mountain Date: Tue, 27 Jun 2023 10:06:26 +0900 Subject: [PATCH] =?UTF-8?q?logapicall=20=ED=94=8C=EB=9E=98=EA=B7=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/http_handler.go | 47 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/server/http_handler.go b/server/http_handler.go index c21b5e2..82522c0 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "net/http" + "net/url" "os" "path" "reflect" @@ -108,6 +109,29 @@ func (h *houstonHandler) RegisterHandlers(serveMux *http.ServeMux, prefix string var noauth = flagx.Bool("noauth", false, "") +type respWriteTracker struct { + inner http.ResponseWriter + reqUrlValues url.Values + body []byte +} + +func (rt *respWriteTracker) Header() http.Header { + return rt.inner.Header() +} + +func (rt *respWriteTracker) Write(bt []byte) (int, error) { + rt.body = append(rt.body, bt...) + return rt.inner.Write(bt) +} + +func (rt *respWriteTracker) WriteHeader(statusCode int) { + if statusCode != http.StatusOK { + logger.Println() + } +} + +var logApiCallFlag = flagx.Bool("logapicall", false, "") + func (h *houstonHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { defer func() { s := recover() @@ -157,10 +181,8 @@ func (h *houstonHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var operation string if r.Method == "POST" { operation = r.FormValue("operation") - logger.Println("api called :", userinfo["email"], r.Form) } else { operation = r.URL.Query().Get("operation") - logger.Println("api called :", userinfo["email"], r.URL.Query()) } if len(operation) == 0 { @@ -176,6 +198,27 @@ func (h *houstonHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + if *logApiCallFlag { + var urlvalues url.Values + if r.Method == "POST" { + urlvalues = r.Form + } else { + urlvalues = r.URL.Query() + } + + tracker := &respWriteTracker{ + inner: w, + reqUrlValues: urlvalues, + } + + defer func() { + logger.Println("api called :", userinfo["email"], urlvalues) + logger.Println("-->", string(tracker.body)) + }() + + w = http.ResponseWriter(tracker) + } + args := []reflect.Value{ reflect.ValueOf(h), reflect.ValueOf(w),