in cmd/go-runner/plugins/response_rewrite.go [81:130]
func (p *ResponseRewrite) ResponseFilter(conf interface{}, w pkgHTTP.Response) {
cfg := conf.(ResponseRewriteConf)
if cfg.Status > 0 {
w.WriteHeader(200)
}
w.Header().Set("X-Resp-A6-Runner", "Go")
if len(cfg.Headers) > 0 {
for k, v := range cfg.Headers {
w.Header().Set(k, v)
}
}
body := []byte(cfg.Body)
if len(cfg.Filters) > 0 {
originBody, err := w.ReadBody()
if err != nil {
log.Errorf("failed to read response body: ", err)
return
}
matched := false
for i := 0; i < len(cfg.Filters); i++ {
f := cfg.Filters[i]
found := f.regexComplied.Find(originBody)
if found != nil {
matched = true
if f.Scope == "once" {
originBody = bytes.Replace(originBody, found, []byte(f.Replace), 1)
} else if f.Scope == "global" {
originBody = bytes.ReplaceAll(originBody, found, []byte(f.Replace))
}
}
}
if matched {
body = originBody
goto write
}
// When configuring the Filters field, the Body field will be invalid.
return
}
if len(body) == 0 {
return
}
write:
_, err := w.Write(body)
if err != nil {
log.Errorf("failed to write: %s", err)
}
}