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

Function ParseNamedResponseMatcher

modules/caddyhttp/responsematchers.go:69–119  ·  view source on GitHub ↗

ParseNamedResponseMatcher parses the tokens of a named response matcher. @name { header <field> [<value>] status <code...> } Or, single line syntax: @name [header <field> [<value>]] | [status <code...>]

(d *caddyfile.Dispenser, matchers map[string]ResponseMatcher)

Source from the content-addressed store, hash-verified

67//
68// @name [header <field> [<value>]] | [status <code...>]
69func ParseNamedResponseMatcher(d *caddyfile.Dispenser, matchers map[string]ResponseMatcher) error {
70 d.Next() // consume matcher name
71 definitionName := d.Val()
72
73 if _, ok := matchers[definitionName]; ok {
74 return d.Errf("matcher is defined more than once: %s", definitionName)
75 }
76
77 matcher := ResponseMatcher{}
78 for nesting := d.Nesting(); d.NextArg() || d.NextBlock(nesting); {
79 switch d.Val() {
80 case "header":
81 if matcher.Headers == nil {
82 matcher.Headers = http.Header{}
83 }
84
85 // reuse the header request matcher's unmarshaler
86 headerMatcher := MatchHeader(matcher.Headers)
87 err := headerMatcher.UnmarshalCaddyfile(d.NewFromNextSegment())
88 if err != nil {
89 return err
90 }
91
92 matcher.Headers = http.Header(headerMatcher)
93 case "status":
94 if matcher.StatusCode == nil {
95 matcher.StatusCode = []int{}
96 }
97
98 args := d.RemainingArgs()
99 if len(args) == 0 {
100 return d.ArgErr()
101 }
102
103 for _, arg := range args {
104 if len(arg) == 3 && strings.HasSuffix(arg, "xx") {
105 arg = arg[:1]
106 }
107 statusNum, err := strconv.Atoi(arg)
108 if err != nil {
109 return d.Errf("bad status value '%s': %v", arg, err)
110 }
111 matcher.StatusCode = append(matcher.StatusCode, statusNum)
112 }
113 default:
114 return d.Errf("unrecognized response matcher %s", d.Val())
115 }
116 }
117 matchers[definitionName] = matcher
118 return nil
119}

Callers 4

UnmarshalCaddyfileMethod · 0.92
UnmarshalCaddyfileMethod · 0.92
UnmarshalCaddyfileMethod · 0.92
parseCaddyfileFunction · 0.92

Calls 12

MatchHeaderTypeAlias · 0.85
ValMethod · 0.80
ErrfMethod · 0.80
NestingMethod · 0.80
NextArgMethod · 0.80
NextBlockMethod · 0.80
NewFromNextSegmentMethod · 0.80
RemainingArgsMethod · 0.80
ArgErrMethod · 0.80
NextMethod · 0.65
UnmarshalCaddyfileMethod · 0.65
HeaderMethod · 0.45

Tested by

no test coverage detected