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
}