diff options
Diffstat (limited to 'modules/caddyhttp')
-rw-r--r-- | modules/caddyhttp/vars.go | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/modules/caddyhttp/vars.go b/modules/caddyhttp/vars.go index d6c5a66..1208d9c 100644 --- a/modules/caddyhttp/vars.go +++ b/modules/caddyhttp/vars.go @@ -16,6 +16,7 @@ package caddyhttp import ( "context" + "fmt" "net/http" "github.com/caddyserver/caddy/v2" @@ -64,12 +65,23 @@ func (VarsMatcher) CaddyModule() caddy.ModuleInfo { // Match matches a request based on variables in the context. func (m VarsMatcher) Match(r *http.Request) bool { - vars := r.Context().Value(VarsCtxKey).(map[string]string) + vars := r.Context().Value(VarsCtxKey).(map[string]interface{}) repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) for k, v := range m { keyExpanded := repl.ReplaceAll(k, "") valExpanded := repl.ReplaceAll(v, "") - if vars[keyExpanded] != valExpanded { + var varStr string + switch vv := vars[keyExpanded].(type) { + case string: + varStr = vv + case fmt.Stringer: + varStr = vv.String() + case error: + varStr = vv.Error() + default: + varStr = fmt.Sprintf("%v", vv) + } + if varStr != valExpanded { return false } } |