summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--caddytest/integration/caddyfile_adapt/matcher_syntax.txt28
-rw-r--r--modules/caddyhttp/matchers.go27
2 files changed, 38 insertions, 17 deletions
diff --git a/caddytest/integration/caddyfile_adapt/matcher_syntax.txt b/caddytest/integration/caddyfile_adapt/matcher_syntax.txt
index 55c06ea..c5c2760 100644
--- a/caddytest/integration/caddyfile_adapt/matcher_syntax.txt
+++ b/caddytest/integration/caddyfile_adapt/matcher_syntax.txt
@@ -25,6 +25,12 @@
header Bar foo
}
respond @matcher7 "header matcher merging values of the same field"
+
+ @matcher8 {
+ query foo=bar foo=baz bar=foo
+ query bar=baz
+ }
+ respond @matcher8 "query matcher merging pairs with the same keys"
}
----------
{
@@ -155,6 +161,28 @@
"handler": "static_response"
}
]
+ },
+ {
+ "match": [
+ {
+ "query": {
+ "bar": [
+ "foo",
+ "baz"
+ ],
+ "foo": [
+ "bar",
+ "baz"
+ ]
+ }
+ }
+ ],
+ "handle": [
+ {
+ "body": "query matcher merging pairs with the same keys",
+ "handler": "static_response"
+ }
+ ]
}
]
}
diff --git a/modules/caddyhttp/matchers.go b/modules/caddyhttp/matchers.go
index cbb6253..b7a304f 100644
--- a/modules/caddyhttp/matchers.go
+++ b/modules/caddyhttp/matchers.go
@@ -353,18 +353,16 @@ func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
*m = make(map[string][]string)
}
for d.Next() {
- var query string
- if !d.Args(&query) {
- return d.ArgErr()
- }
- if query == "" {
- continue
- }
- parts := strings.SplitN(query, "=", 2)
- if len(parts) != 2 {
- return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val())
+ for _, query := range d.RemainingArgs() {
+ if query == "" {
+ continue
+ }
+ parts := strings.SplitN(query, "=", 2)
+ if len(parts) != 2 {
+ return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val())
+ }
+ url.Values(*m).Add(parts[0], parts[1])
}
- url.Values(*m).Set(parts[0], parts[1])
if d.NextBlock(0) {
return d.Err("malformed query matcher: blocks are not supported")
}
@@ -411,12 +409,7 @@ func (m *MatchHeader) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
// If multiple header matchers with the same header field are defined,
// we want to add the existing to the list of headers (will be OR'ed)
- existing := http.Header(*m).Values(field)
- if len(existing) > 0 {
- http.Header(*m).Add(field, val)
- } else {
- http.Header(*m).Set(field, val)
- }
+ http.Header(*m).Add(field, val)
if d.NextBlock(0) {
return d.Err("malformed header matcher: blocks are not supported")