github.com/caddyserver/caddy/v2/modules/caddyhttp/requestbody
No package summary is available.
Package
Files: 2. Third party imports: 3. Imports from organisation: 0. Tests: 0. Benchmarks: 0.
Vars
Interface guard
var _ caddyhttp.MiddlewareHandler = (*RequestBody)(nil)
Types
RequestBody
RequestBody is a middleware for manipulating the request body.
type RequestBody struct {
// The maximum number of bytes to allow reading from the body by a later handler.
// If more bytes are read, an error with HTTP status 413 is returned.
MaxSize int64 `json:"max_size,omitempty"`
// EXPERIMENTAL. Subject to change/removal.
ReadTimeout time.Duration `json:"read_timeout,omitempty"`
// EXPERIMENTAL. Subject to change/removal.
WriteTimeout time.Duration `json:"write_timeout,omitempty"`
logger *zap.Logger
}
errorWrapper
errorWrapper wraps errors that are returned from Read() so that they can be associated with a proper status code.
type errorWrapper struct {
io.ReadCloser
}
Functions
func (*RequestBody) Provision
func (rb *RequestBody) Provision(ctx caddy.Context) error {
rb.logger = ctx.Logger()
return nil
}
Cognitive complexity: 0
, Cyclomatic complexity: 1
func (RequestBody) CaddyModule
CaddyModule returns the Caddy module information.
func (RequestBody) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "http.handlers.request_body",
New: func() caddy.Module { return new(RequestBody) },
}
}
Cognitive complexity: 2
, Cyclomatic complexity: 1
func (RequestBody) ServeHTTP
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 = errorWrapper{http.MaxBytesReader(w, r.Body, rb.MaxSize)}
}
if rb.ReadTimeout > 0 || rb.WriteTimeout > 0 {
//nolint:bodyclose
rc := http.NewResponseController(w)
if rb.ReadTimeout > 0 {
if err := rc.SetReadDeadline(time.Now().Add(rb.ReadTimeout)); err != nil {
if c := rb.logger.Check(zapcore.ErrorLevel, "could not set read deadline"); c != nil {
c.Write(zap.Error(err))
}
}
}
if rb.WriteTimeout > 0 {
if err := rc.SetWriteDeadline(time.Now().Add(rb.WriteTimeout)); err != nil {
if c := rb.logger.Check(zapcore.ErrorLevel, "could not set write deadline"); c != nil {
c.Write(zap.Error(err))
}
}
}
}
return next.ServeHTTP(w, r)
}
Cognitive complexity: 19
, Cyclomatic complexity: 11
func (errorWrapper) Read
func (ew errorWrapper) Read(p []byte) (n int, err error) {
n, err = ew.ReadCloser.Read(p)
var mbe *http.MaxBytesError
if errors.As(err, &mbe) {
err = caddyhttp.Error(http.StatusRequestEntityTooLarge, err)
}
return
}
Cognitive complexity: 2
, Cyclomatic complexity: 2
Private functions
func init
init ()
References: httpcaddyfile.RegisterHandlerDirective.
func parseCaddyfile
parseCaddyfile (h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
References: time.ParseDuration.