James Birtles
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
20 additions and
0 deletions
-
modules/caddyhttp/matchers.go
-
modules/caddyhttp/matchers_test.go
|
|
@ -374,10 +374,13 @@ func (m *MatchQuery) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { |
|
|
|
|
|
|
|
// Match returns true if r matches m. An empty m matches an empty query string.
|
|
|
|
func (m MatchQuery) Match(r *http.Request) bool { |
|
|
|
repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) |
|
|
|
for param, vals := range m { |
|
|
|
param = repl.ReplaceAll(param, "") |
|
|
|
paramVal, found := r.URL.Query()[param] |
|
|
|
if found { |
|
|
|
for _, v := range vals { |
|
|
|
v = repl.ReplaceAll(v, "") |
|
|
|
if paramVal[0] == v || v == "*" { |
|
|
|
return true |
|
|
|
} |
|
|
|
|
|
@ -546,11 +546,28 @@ func TestQueryMatcher(t *testing.T) { |
|
|
|
input: "/?", |
|
|
|
expect: false, |
|
|
|
}, |
|
|
|
{ |
|
|
|
scenario: "match against a placeholder value", |
|
|
|
match: MatchQuery{"debug": []string{"{http.vars.debug}"}}, |
|
|
|
input: "/?debug=1", |
|
|
|
expect: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
scenario: "match against a placeholder key", |
|
|
|
match: MatchQuery{"{http.vars.key}": []string{"1"}}, |
|
|
|
input: "/?somekey=1", |
|
|
|
expect: true, |
|
|
|
}, |
|
|
|
} { |
|
|
|
|
|
|
|
u, _ := url.Parse(tc.input) |
|
|
|
|
|
|
|
req := &http.Request{URL: u} |
|
|
|
repl := caddy.NewReplacer() |
|
|
|
ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl) |
|
|
|
repl.Set("http.vars.debug", "1") |
|
|
|
repl.Set("http.vars.key", "somekey") |
|
|
|
req = req.WithContext(ctx) |
|
|
|
actual := tc.match.Match(req) |
|
|
|
if actual != tc.expect { |
|
|
|
t.Errorf("Test %d %v: Expected %t, got %t for '%s'", i, tc.match, tc.expect, actual, tc.input) |
|
|
|