From c6bddbfbe25b2123a1b53a7a705283d68bc4109a Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Wed, 22 Jan 2020 09:43:42 -0700 Subject: http: Fix vars matcher --- modules/caddyhttp/vars.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'modules/caddyhttp/vars.go') 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 } } -- cgit v1.2.3