@marcel91200 / caddy Mirror · read-only / commits / c6bddbfb
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

http: Fix vars matcher

Matthew Holt committed Jan 22, 2020 at 09:43 UTC c6bddbfbe25b2123a1b53a7a705283d68bc4109a
1 file changed +14 -2
modules/caddyhttp/vars.go
+14 -2
@@ -16,6 +16,7 @@ package caddyhttp
16
17 import (
18 "context"
19 + "fmt"
20 "net/http"
21
22 "github.com/caddyserver/caddy/v2"
@@ -64,12 +65,23 @@ func (VarsMatcher) CaddyModule() caddy.ModuleInfo {
65
66 // Match matches a request based on variables in the context.
67 func (m VarsMatcher) Match(r *http.Request) bool {
67 - vars := r.Context().Value(VarsCtxKey).(map[string]string)
68 + vars := r.Context().Value(VarsCtxKey).(map[string]interface{})
69 repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
70 for k, v := range m {
71 keyExpanded := repl.ReplaceAll(k, "")
72 valExpanded := repl.ReplaceAll(v, "")
72 - if vars[keyExpanded] != valExpanded {
73 + var varStr string
74 + switch vv := vars[keyExpanded].(type) {
75 + case string:
76 + varStr = vv
77 + case fmt.Stringer:
78 + varStr = vv.String()
79 + case error:
80 + varStr = vv.Error()
81 + default:
82 + varStr = fmt.Sprintf("%v", vv)
83 + }
84 + if varStr != valExpanded {
85 return false
86 }
87 }