intercept: fix http.intercept.header.* placeholder (#6429)

This commit is contained in:
Kévin Dunglas 2024-07-03 16:43:13 +02:00 committed by GitHub
parent f8861ca16b
commit 0287009ee5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 3 deletions

View File

@ -18,17 +18,23 @@ func TestIntercept(t *testing.T) {
localhost:9080 { localhost:9080 {
respond /intercept "I'm a teapot" 408 respond /intercept "I'm a teapot" 408
header /intercept To-Intercept ok
respond /no-intercept "I'm not a teapot" respond /no-intercept "I'm not a teapot"
intercept { intercept {
@teapot status 408 @teapot status 408
handle_response @teapot { handle_response @teapot {
header /intercept intercepted {resp.header.To-Intercept}
respond /intercept "I'm a combined coffee/tea pot that is temporarily out of coffee" 503 respond /intercept "I'm a combined coffee/tea pot that is temporarily out of coffee" 503
} }
} }
} }
`, "caddyfile") `, "caddyfile")
tester.AssertGetResponse("http://localhost:9080/intercept", 503, "I'm a combined coffee/tea pot that is temporarily out of coffee") r, _ := tester.AssertGetResponse("http://localhost:9080/intercept", 503, "I'm a combined coffee/tea pot that is temporarily out of coffee")
if r.Header.Get("intercepted") != "ok" {
t.Fatalf(`header "intercepted" value is not "ok": %s`, r.Header.Get("intercepted"))
}
tester.AssertGetResponse("http://localhost:9080/no-intercept", 200, "I'm not a teapot") tester.AssertGetResponse("http://localhost:9080/no-intercept", 200, "I'm not a teapot")
} }

View File

@ -50,7 +50,6 @@ type Intercept struct {
// //
// Three new placeholders are available in this handler chain: // Three new placeholders are available in this handler chain:
// - `{http.intercept.status_code}` The status code from the response // - `{http.intercept.status_code}` The status code from the response
// - `{http.intercept.status_text}` The status text from the response
// - `{http.intercept.header.*}` The headers from the response // - `{http.intercept.header.*}` The headers from the response
HandleResponse []caddyhttp.ResponseHandler `json:"handle_response,omitempty"` HandleResponse []caddyhttp.ResponseHandler `json:"handle_response,omitempty"`
@ -161,7 +160,7 @@ func (ir Intercept) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddy
// set up the replacer so that parts of the original response can be // set up the replacer so that parts of the original response can be
// used for routing decisions // used for routing decisions
for field, value := range r.Header { for field, value := range rec.Header() {
repl.Set("http.intercept.header."+field, strings.Join(value, ",")) repl.Set("http.intercept.header."+field, strings.Join(value, ","))
} }
repl.Set("http.intercept.status_code", rec.Status()) repl.Set("http.intercept.status_code", rec.Status())