From f7def87d0fdec91006dfb311cb577597deea7d30 Mon Sep 17 00:00:00 2001 From: David Stotijn Date: Thu, 31 Mar 2022 15:23:56 +0200 Subject: [PATCH] Add HTTP header support to string literal matching --- pkg/proxy/intercept/filter.go | 22 ++++++++++++++++++++++ pkg/reqlog/search.go | 22 ++++++++++++++++++++++ pkg/sender/search.go | 22 ++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/pkg/proxy/intercept/filter.go b/pkg/proxy/intercept/filter.go index 4ba868b..e1cab87 100644 --- a/pkg/proxy/intercept/filter.go +++ b/pkg/proxy/intercept/filter.go @@ -198,6 +198,17 @@ func getMappedStringLiteralFromReq(req *http.Request, s string) (string, error) } func matchReqStringLiteral(req *http.Request, strLiteral filter.StringLiteral) (bool, error) { + for key, values := range req.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range reqFilterKeyFns { value, err := fn(req) if err != nil { @@ -398,6 +409,17 @@ func getMappedStringLiteralFromRes(res *http.Response, s string) (string, error) } func matchResStringLiteral(res *http.Response, strLiteral filter.StringLiteral) (bool, error) { + for key, values := range res.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range resFilterKeyFns { value, err := fn(res) if err != nil { diff --git a/pkg/reqlog/search.go b/pkg/reqlog/search.go index 5165382..0c7d73a 100644 --- a/pkg/reqlog/search.go +++ b/pkg/reqlog/search.go @@ -181,6 +181,17 @@ func (reqLog RequestLog) getMappedStringLiteral(s string) string { } func (reqLog RequestLog) matchStringLiteral(strLiteral filter.StringLiteral) (bool, error) { + for key, values := range reqLog.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range reqLogSearchKeyFns { if strings.Contains( strings.ToLower(fn(reqLog)), @@ -191,6 +202,17 @@ func (reqLog RequestLog) matchStringLiteral(strLiteral filter.StringLiteral) (bo } if reqLog.Response != nil { + for key, values := range reqLog.Response.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range ResLogSearchKeyFns { if strings.Contains( strings.ToLower(fn(*reqLog.Response)), diff --git a/pkg/sender/search.go b/pkg/sender/search.go index 3538d7e..c7c5b63 100644 --- a/pkg/sender/search.go +++ b/pkg/sender/search.go @@ -174,6 +174,17 @@ func (req Request) getMappedStringLiteral(s string) string { } func (req Request) matchStringLiteral(strLiteral filter.StringLiteral) (bool, error) { + for key, values := range req.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range senderReqSearchKeyFns { if strings.Contains( strings.ToLower(fn(req)), @@ -184,6 +195,17 @@ func (req Request) matchStringLiteral(strLiteral filter.StringLiteral) (bool, er } if req.Response != nil { + for key, values := range req.Response.Header { + for _, value := range values { + if strings.Contains( + strings.ToLower(fmt.Sprintf("%v: %v", key, value)), + strings.ToLower(strLiteral.Value), + ) { + return true, nil + } + } + } + for _, fn := range reqlog.ResLogSearchKeyFns { if strings.Contains( strings.ToLower(fn(*req.Response)),