From 002bfc028414f64aa89dad6a6987c2eca636d417 Mon Sep 17 00:00:00 2001 From: Victor Vrantchan Date: Sun, 19 Mar 2017 03:07:56 +0000 Subject: [PATCH] add debug handler --- serve.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/serve.go b/serve.go index 508d7866..e67dced2 100644 --- a/serve.go +++ b/serve.go @@ -10,9 +10,11 @@ import ( "encoding/pem" "flag" "fmt" + "io" "io/ioutil" stdlog "log" "net/http" + "net/http/httputil" "net/url" "os" "os/signal" @@ -60,6 +62,7 @@ func serve(args []string) error { flTLSKey = flagset.String("tls-key", "", "path to TLS private key") flHTTPAddr = flagset.String("http-addr", ":https", "http(s) listen address of mdm server. defaults to :8080 if tls is false") flRedirAddr = flagset.String("redir-addr", ":http", "http redirect to https listen address") + flHTTPDebug = flagset.Bool("http-debug", false, "enable debug for http(dumps full request)") ) flagset.Usage = usageFor(flagset, "micromdm serve [flags]") if err := flagset.Parse(args); err != nil { @@ -131,13 +134,20 @@ func serve(args []string) error { enrollHandler := enroll.ServiceHandler(ctx, sm.enrollService, httpLogger) r := mux.NewRouter() r.Handle("/mdm/checkin", checkinHandlers.CheckinHandler).Methods("PUT") - r.Handle("/mdm/enroll", enrollHandler) + r.Handle("/mdm/enroll", enrollHandler).Methods("GET", "POST", "PUT") r.Handle("/scep", scepHandler) r.Handle("/push/{udid}", pushHandlers.PushHandler) r.Handle("/v1/commands", commandHandlers.NewCommandHandler).Methods("POST") + + var handler http.Handler + if *flHTTPDebug { + handler = debugHTTPmiddleware(r) + } else { + handler = r + } srv := &http.Server{ Addr: *flHTTPAddr, - Handler: r, + Handler: handler, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second, ReadHeaderTimeout: 10 * time.Second, @@ -170,7 +180,7 @@ func serve(args []string) error { httpAddr = *flHTTPAddr } logger.Log("addr", httpAddr) - errs <- http.ListenAndServe(httpAddr, r) + errs <- http.ListenAndServe(httpAddr, handler) return } @@ -571,3 +581,17 @@ func savePEMCert(path string, cert *x509.Certificate) error { Bytes: cert.Raw, }) } + +func debugHTTPmiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + body := io.TeeReader(r.Body, os.Stderr) + r.Body = ioutil.NopCloser(body) + out, err := httputil.DumpRequest(r, true) + if err != nil { + stdlog.Println(err) + } + fmt.Println("") + fmt.Println(string(out)) + fmt.Println("") + }) +}