From dfb8011a1af1a1afa4e3b2f80da9ee43c2fc64f4 Mon Sep 17 00:00:00 2001 From: gezimbll Date: Tue, 23 Jan 2024 10:30:33 -0500 Subject: [PATCH] Fix encoding dataprovider as json body for *http filter --- engine/filterhelpers.go | 16 +++++++--------- engine/filters.go | 1 - engine/libattributes.go | 7 +------ 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/engine/filterhelpers.go b/engine/filterhelpers.go index 07778dfd2..864961279 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -244,7 +244,7 @@ func sentrypeerHasData(itemId, token, url string) (found bool, err error) { // expects a boolean reply // when element is set to *any the CGREvent is sent as JSON body // when the element is specified as a path e.g ~*req.Account is sent as query string pair ,the path being the key with the value extracted from dataprovider -func filterHTTP(httpType string, dDP any, fieldname, value string) (bool, error) { +func filterHTTP(httpType string, dDP utils.DataProvider, fieldname, value string) (bool, error) { var ( parsedURL *url.URL resp string @@ -263,14 +263,9 @@ func filterHTTP(httpType string, dDP any, fieldname, value string) (bool, error) queryParams := parsedURL.Query() queryParams.Set(fieldname, value) parsedURL.RawQuery = queryParams.Encode() - resp, err = externalAPI(parsedURL.String(), nil, nil) + resp, err = externalAPI(parsedURL.String(), nil) } else { - var data []byte - data, err = json.Marshal(dDP) - if err != nil { - return false, fmt.Errorf("error marshaling data: %w", err) - } - resp, err = externalAPI(parsedURL.String(), bytes.NewReader(data), nil) + resp, err = externalAPI(parsedURL.String(), bytes.NewReader([]byte(dDP.String()))) } if err != nil { return false, err @@ -278,7 +273,10 @@ func filterHTTP(httpType string, dDP any, fieldname, value string) (bool, error) return utils.IfaceAsBool(resp) } -func externalAPI(url string, rdr io.Reader, hdr map[string]string) (string, error) { +func externalAPI(url string, rdr io.Reader) (string, error) { + hdr := map[string]string{ + "Content-Type": "application/json", + } resp, err := getHTTP(http.MethodGet, url, rdr, hdr) if err != nil { return "", fmt.Errorf("error processing the request: %w", err) diff --git a/engine/filters.go b/engine/filters.go index bd7f92259..1a723f026 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -787,7 +787,6 @@ func (fltr *FilterRule) passHttp(dDP utils.DataProvider) (bool, error) { } return false, err } - return filterHTTP(fltr.Type, dDP, fltr.Element, strVal) } diff --git a/engine/libattributes.go b/engine/libattributes.go index 186e4550b..857ff9f59 100644 --- a/engine/libattributes.go +++ b/engine/libattributes.go @@ -20,7 +20,6 @@ package engine import ( "bytes" - "encoding/json" "fmt" "sort" "strings" @@ -176,9 +175,5 @@ func externalAttributeAPI(httpType string, dDP utils.DataProvider) (string, erro if err != nil { return "", err } - data, err := json.Marshal(dDP) - if err != nil { - return "", fmt.Errorf("error marshaling data: %w", err) - } - return externalAPI(urlS, bytes.NewReader(data), nil) + return externalAPI(urlS, bytes.NewReader([]byte(dDP.String()))) }