MCPcopy
hub / github.com/caddyserver/caddy / applyHeaderOp

Function applyHeaderOp

modules/caddyhttp/headers/caddyfile.go:225–289  ·  view source on GitHub ↗
(ops *HeaderOps, respHeaderOps *RespHeaderOps, field, value string, replacement *string)

Source from the content-addressed store, hash-verified

223}
224
225func applyHeaderOp(ops *HeaderOps, respHeaderOps *RespHeaderOps, field, value string, replacement *string) error {
226 switch {
227 case strings.HasPrefix(field, "+"): // append
228 if ops.Add == nil {
229 ops.Add = make(http.Header)
230 }
231 ops.Add.Add(field[1:], value)
232
233 case strings.HasPrefix(field, "-"): // delete
234 ops.Delete = append(ops.Delete, field[1:])
235 if respHeaderOps != nil {
236 respHeaderOps.Deferred = true
237 }
238
239 case strings.HasPrefix(field, "?"): // default (conditional on not existing) - response headers only
240 if respHeaderOps == nil {
241 return fmt.Errorf("%v: the default header modifier ('?') can only be used on response headers; for conditional manipulation of request headers, use matchers", field)
242 }
243 if respHeaderOps.Require == nil {
244 respHeaderOps.Require = &caddyhttp.ResponseMatcher{
245 Headers: make(http.Header),
246 }
247 }
248 field = strings.TrimPrefix(field, "?")
249 respHeaderOps.Require.Headers[field] = nil
250 if respHeaderOps.Set == nil {
251 respHeaderOps.Set = make(http.Header)
252 }
253 respHeaderOps.Set.Set(field, value)
254
255 case replacement != nil: // replace
256 // allow defer shortcut for replace syntax
257 if strings.HasPrefix(field, ">") && respHeaderOps != nil {
258 respHeaderOps.Deferred = true
259 }
260 if ops.Replace == nil {
261 ops.Replace = make(map[string][]Replacement)
262 }
263 field = strings.TrimLeft(field, "+-?>")
264 ops.Replace[field] = append(
265 ops.Replace[field],
266 Replacement{
267 SearchRegexp: value,
268 Replace: *replacement,
269 },
270 )
271
272 case strings.HasPrefix(field, ">"): // set (overwrite) with defer
273 if ops.Set == nil {
274 ops.Set = make(http.Header)
275 }
276 ops.Set.Set(field[1:], value)
277 if respHeaderOps != nil {
278 respHeaderOps.Deferred = true
279 }
280
281 default: // set (overwrite)
282 if ops.Set == nil {

Callers 2

parseCaddyfileFunction · 0.85
CaddyfileHeaderOpFunction · 0.85

Calls 2

AddMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected