From 0f74d49f4d5ba45027abf78baf08e6167bff0801 Mon Sep 17 00:00:00 2001 From: Tim Voronov Date: Wed, 4 Feb 2026 21:25:57 -0500 Subject: [PATCH] Update body limit configuration to support size units and improve documentation --- internal/server/server.go | 12 +++++++----- main.go | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/internal/server/server.go b/internal/server/server.go index 36ce9c2..64dddd5 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -26,9 +26,11 @@ type ( // If value is 0, rate limit is set default value. RequestLimitTimeWindow uint64 - // BodyLimit is a maximum size of request body. - // If value is 0, body limit is disabled. - BodyLimit uint64 + // BodyLimit sets the maximum allowed size for the request body. + // If set to the empty string (`""`), no body size limit is enforced. + // Accepted formats are an integer followed by an optional unit, e.g. `4K`, `4KB`, `10M`, `1G`. + // Supported units: K, M, G, T, P (optionally followed by `B`), case-insensitive. + BodyLimit string } // Server is HTTP server that wraps Ferret worker. @@ -76,8 +78,8 @@ func New(logger *lecho.Logger, opts Options) (*Server, error) { AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept}, })) - if opts.BodyLimit > 0 { - router.Use(middleware.BodyLimit(fmt.Sprintf("%d", opts.BodyLimit))) + if opts.BodyLimit != "" { + router.Use(middleware.BodyLimit(opts.BodyLimit)) } router.Use(middleware.RequestID()) diff --git a/main.go b/main.go index ad4df81..e114fb9 100644 --- a/main.go +++ b/main.go @@ -57,10 +57,10 @@ var ( "amount of seconds for request rate limit time window", ) - bodyLimit = flag.Uint64( + bodyLimit = flag.String( "body-limit", - 1000, - "maximum size of request body in kb. 0 means no limit.", + "1M", + "maximum allowed size for a request body (e.g., 4K, 4KB, 10M, 1G). Empty string means no limit.", ) showVersion = flag.Bool(