From 77764714ad83d5c6e4db2da4b8945701f146bad0 Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Mon, 10 May 2021 12:06:38 -0400 Subject: encode: Default to order the formats are enabled for `prefer` in Caddyfile (#4151) --- modules/caddyhttp/encode/caddyfile.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'modules/caddyhttp/encode') diff --git a/modules/caddyhttp/encode/caddyfile.go b/modules/caddyhttp/encode/caddyfile.go index b236520..d00a16a 100644 --- a/modules/caddyhttp/encode/caddyfile.go +++ b/modules/caddyhttp/encode/caddyfile.go @@ -43,7 +43,7 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) // gzip [] // zstd // minimum_length -// prefer +// prefer off| // # response matcher block // match { // status @@ -55,7 +55,11 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) // // Specifying the formats on the first line will use those formats' defaults. func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + var preferDefaults []string + var preferOff bool + responseMatchers := make(map[string]caddyhttp.ResponseMatcher) + for d.Next() { for _, arg := range d.RemainingArgs() { mod, err := caddy.GetModule("http.encoders." + arg) @@ -70,6 +74,7 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { enc.EncodingsRaw = make(caddy.ModuleMap) } enc.EncodingsRaw[arg] = caddyconfig.JSON(encoding, nil) + preferDefaults = append(preferDefaults, arg) } for d.NextBlock(0) { @@ -86,6 +91,11 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { case "prefer": var encs []string for d.NextArg() { + // if one of the values is "off", then + // we'll skip setting the prefer list. + if d.Val() == "off" { + preferOff = true + } encs = append(encs, d.Val()) } if len(encs) == 0 { @@ -114,10 +124,23 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { enc.EncodingsRaw = make(caddy.ModuleMap) } enc.EncodingsRaw[name] = caddyconfig.JSON(encoding, nil) + preferDefaults = append(preferDefaults, name) } } } + // if the "prefer" subdirective wasn't specified, use + // the order in which the encoders were defined. + if len(enc.Prefer) == 0 { + enc.Prefer = preferDefaults + } + + // if "prefer off" was set, then we'll not use the default + // behaviour of the order in which they were defined. + if preferOff { + enc.Prefer = nil + } + return nil } -- cgit v1.2.3