From 9e576c76e74ff3d5b8d5a384fecf2a2ca191b402 Mon Sep 17 00:00:00 2001
From: Matthew Holt <mholt@users.noreply.github.com>
Date: Thu, 23 May 2019 13:16:34 -0600
Subject: Add request_body middleware and some limits to HTTP servers

---
 modules/caddyhttp/requestbody/requestbody.go | 33 ++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 modules/caddyhttp/requestbody/requestbody.go

(limited to 'modules/caddyhttp/requestbody')

diff --git a/modules/caddyhttp/requestbody/requestbody.go b/modules/caddyhttp/requestbody/requestbody.go
new file mode 100644
index 0000000..8aba14e
--- /dev/null
+++ b/modules/caddyhttp/requestbody/requestbody.go
@@ -0,0 +1,33 @@
+package requestbody
+
+import (
+	"net/http"
+
+	"bitbucket.org/lightcodelabs/caddy2"
+	"bitbucket.org/lightcodelabs/caddy2/modules/caddyhttp"
+)
+
+func init() {
+	caddy2.RegisterModule(caddy2.Module{
+		Name: "http.middleware.request_body",
+		New:  func() interface{} { return new(RequestBody) },
+	})
+}
+
+// RequestBody is a middleware for manipulating the request body.
+type RequestBody struct {
+	MaxSize int64 `json:"max_size,omitempty"`
+}
+
+func (rb RequestBody) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error {
+	if r.Body == nil {
+		return next.ServeHTTP(w, r)
+	}
+	if rb.MaxSize > 0 {
+		r.Body = http.MaxBytesReader(w, r.Body, rb.MaxSize)
+	}
+	return next.ServeHTTP(w, r)
+}
+
+// Interface guard
+var _ caddyhttp.MiddlewareHandler = (*RequestBody)(nil)
-- 
cgit v1.2.3