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

Function parseCaddyfile

modules/caddyhttp/headers/caddyfile.go:49–157  ·  view source on GitHub ↗

parseCaddyfile sets up the handler for response headers from Caddyfile tokens. Syntax: header [<matcher>] [[+|-|?|>]<field> [<value|regexp>] [<replacement>]] { [+]<field> [<value|regexp> [<replacement>]] ?<field> <default_value> -<field> ><field> [defer] } Either a block can be opened

(h httpcaddyfile.Helper)

Source from the content-addressed store, hash-verified

47// ? conditionally sets a value only if the header field is not already set,
48// and > sets a field with defer enabled.
49func parseCaddyfile(h httpcaddyfile.Helper) ([]httpcaddyfile.ConfigValue, error) {
50 h.Next() // consume directive name
51 matcherSet, err := h.ExtractMatcherSet()
52 if err != nil {
53 return nil, err
54 }
55 h.Next() // consume the directive name again (matcher parsing resets)
56
57 makeHandler := func() Handler {
58 return Handler{
59 Response: &RespHeaderOps{
60 HeaderOps: &HeaderOps{},
61 },
62 }
63 }
64 handler, handlerWithRequire := makeHandler(), makeHandler()
65
66 // first see if headers are in the initial line
67 var hasArgs bool
68 if h.NextArg() {
69 hasArgs = true
70 field := h.Val()
71 var value string
72 var replacement *string
73 if h.NextArg() {
74 value = h.Val()
75 }
76 if h.NextArg() {
77 arg := h.Val()
78 replacement = &arg
79 }
80 err := applyHeaderOp(
81 handler.Response.HeaderOps,
82 handler.Response,
83 field,
84 value,
85 replacement,
86 )
87 if err != nil {
88 return nil, h.Err(err.Error())
89 }
90 if len(handler.Response.HeaderOps.Delete) > 0 {
91 handler.Response.Deferred = true
92 }
93 }
94
95 // if not, they should be in a block
96 for h.NextBlock(0) {
97 field := h.Val()
98 if field == "defer" {
99 handler.Response.Deferred = true
100 continue
101 }
102 if field == "match" {
103 responseMatchers := make(map[string]caddyhttp.ResponseMatcher)
104 err := caddyhttp.ParseNamedResponseMatcher(h.NewFromNextSegment(), responseMatchers)
105 if err != nil {
106 return nil, err

Callers

nothing calls this directly

Calls 11

applyHeaderOpFunction · 0.85
ExtractMatcherSetMethod · 0.80
NextArgMethod · 0.80
ValMethod · 0.80
ErrMethod · 0.80
NextBlockMethod · 0.80
NewFromNextSegmentMethod · 0.80
NewRouteMethod · 0.80
NextMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected