func()

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)
	}
}