|
@ -349,19 +349,21 @@ func (MatchQuery) CaddyModule() caddy.ModuleInfo { |
|
|
|
|
|
|
|
|
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
|
|
|
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
|
|
|
func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { |
|
|
func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { |
|
|
if *m == nil { |
|
|
|
|
|
*m = make(map[string][]string) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for d.Next() { |
|
|
for d.Next() { |
|
|
var query string |
|
|
var query string |
|
|
if !d.Args(&query) { |
|
|
if !d.Args(&query) { |
|
|
return d.ArgErr() |
|
|
return d.ArgErr() |
|
|
} |
|
|
} |
|
|
|
|
|
if query == "" { |
|
|
|
|
|
continue |
|
|
|
|
|
} |
|
|
parts := strings.SplitN(query, "=", 2) |
|
|
parts := strings.SplitN(query, "=", 2) |
|
|
if len(parts) != 2 { |
|
|
if len(parts) != 2 { |
|
|
return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val()) |
|
|
return d.Errf("malformed query matcher token: %s; must be in param=val format", d.Val()) |
|
|
} |
|
|
} |
|
|
|
|
|
if *m == nil { |
|
|
|
|
|
*m = make(map[string][]string) |
|
|
|
|
|
} |
|
|
url.Values(*m).Set(parts[0], parts[1]) |
|
|
url.Values(*m).Set(parts[0], parts[1]) |
|
|
if d.NextBlock(0) { |
|
|
if d.NextBlock(0) { |
|
|
return d.Err("malformed query matcher: blocks are not supported") |
|
|
return d.Err("malformed query matcher: blocks are not supported") |
|
@ -372,6 +374,9 @@ func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { |
|
|
|
|
|
|
|
|
// Match returns true if r matches m.
|
|
|
// Match returns true if r matches m.
|
|
|
func (m MatchQuery) Match(r *http.Request) bool { |
|
|
func (m MatchQuery) Match(r *http.Request) bool { |
|
|
|
|
|
if m == nil { |
|
|
|
|
|
return len(r.URL.Query()) == 0 |
|
|
|
|
|
} |
|
|
for param, vals := range m { |
|
|
for param, vals := range m { |
|
|
paramVal, found := r.URL.Query()[param] |
|
|
paramVal, found := r.URL.Query()[param] |
|
|
if found { |
|
|
if found { |
|
|