httpserver: give each req context a Replacer that preserves custom values (#1937)

This allows custom replacements to be defined in a way that propagates
throughout all plugins.
This commit is contained in:
Aaron Taylor
2017-11-07 12:10:03 -05:00
committed by Matt Holt
parent 169ab3acda
commit 9a22cda15d
3 changed files with 31 additions and 12 deletions

View File

@@ -356,6 +356,12 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
c := context.WithValue(r.Context(), OriginalURLCtxKey, urlCopy)
r = r.WithContext(c)
// Setup a replacer for the request that keeps track of placeholder
// values across plugins.
replacer := NewReplacer(r, nil, "")
c = context.WithValue(r.Context(), ReplacerCtxKey, replacer)
r = r.WithContext(c)
w.Header().Set("Server", caddy.AppName)
status, _ := s.serveHTTP(w, r)