mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
|
package middleware
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"encoding/json"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/Sirupsen/logrus"
|
||
|
"github.com/docker/docker/api/server/httputils"
|
||
|
"github.com/docker/docker/pkg/ioutils"
|
||
|
"golang.org/x/net/context"
|
||
|
)
|
||
|
|
||
|
// DebugRequestMiddleware dumps the request to logger
|
||
|
func DebugRequestMiddleware(handler httputils.APIFunc) httputils.APIFunc {
|
||
|
return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
||
|
logrus.Debugf("%s %s", r.Method, r.RequestURI)
|
||
|
|
||
|
if r.Method != "POST" {
|
||
|
return handler(ctx, w, r, vars)
|
||
|
}
|
||
|
if err := httputils.CheckForJSON(r); err != nil {
|
||
|
return handler(ctx, w, r, vars)
|
||
|
}
|
||
|
maxBodySize := 4096 // 4KB
|
||
|
if r.ContentLength > int64(maxBodySize) {
|
||
|
return handler(ctx, w, r, vars)
|
||
|
}
|
||
|
|
||
|
body := r.Body
|
||
|
bufReader := bufio.NewReaderSize(body, maxBodySize)
|
||
|
r.Body = ioutils.NewReadCloserWrapper(bufReader, func() error { return body.Close() })
|
||
|
|
||
|
b, err := bufReader.Peek(maxBodySize)
|
||
|
if err != io.EOF {
|
||
|
// either there was an error reading, or the buffer is full (in which case the request is too large)
|
||
|
return handler(ctx, w, r, vars)
|
||
|
}
|
||
|
|
||
|
var postForm map[string]interface{}
|
||
|
if err := json.Unmarshal(b, &postForm); err == nil {
|
||
|
if _, exists := postForm["password"]; exists {
|
||
|
postForm["password"] = "*****"
|
||
|
}
|
||
|
formStr, errMarshal := json.Marshal(postForm)
|
||
|
if errMarshal == nil {
|
||
|
logrus.Debugf("form data: %s", string(formStr))
|
||
|
} else {
|
||
|
logrus.Debugf("form data: %q", postForm)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return handler(ctx, w, r, vars)
|
||
|
}
|
||
|
}
|