Skip to content

Commit

Permalink
Merge pull request #551 from reiinoldo/filter-replace-plugin-fix-rege…
Browse files Browse the repository at this point in the history
…x-replace

fix: Process the entire regex at once instead of replacing individual components
  • Loading branch information
loafoe authored Nov 21, 2024
2 parents 0ae29a2 + d460a19 commit a5087f1
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
8 changes: 3 additions & 5 deletions logproxy-filter-replace/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,10 @@ func (f Filter) Filter(msg logging.Resource) (logging.Resource, bool, bool, erro
modified := false
for _, filter := range f.filterList {
decodedMsg, _ := base64.StdEncoding.DecodeString(msg.LogData.Message)
if req := filter.pattern.FindAllStringSubmatch(string(decodedMsg), -1); req != nil {
if req := filter.pattern.FindAllString(string(decodedMsg), -1); req != nil {
modifiedMsg := string(decodedMsg)
for i := range req {
for j := range req[i] {
modifiedMsg = strings.ReplaceAll(modifiedMsg, req[i][j], filter.replace)
}
for _, match := range req {
modifiedMsg = strings.ReplaceAll(modifiedMsg, match, filter.replace)
}
msg.LogData.Message = base64.StdEncoding.EncodeToString([]byte(modifiedMsg))
modified = true
Expand Down
40 changes: 32 additions & 8 deletions logproxy-filter-replace/main_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package main

import (
"fmt"
"github.com/hashicorp/go-hclog"
"encoding/base64"
"os"
"testing"

"github.com/hashicorp/go-hclog"

"github.com/philips-software/go-hsdp-api/logging"
)

Expand All @@ -25,9 +26,13 @@ func TestFilter_Filter(t *testing.T) {
}
config := []Config{
{
Pattern: "[a-z0-9._%+\\-]+@[a-z0-9.\\-]+\\.[a-z]{2,4}",
Pattern: "[a-z0-9._%+\\-]+(@|%40)[a-z0-9.\\-]+\\.[a-z]{2,4}",
Replace: "<email obfuscated>",
},
{
Pattern: "identifier(%3D|=)[^&\\s]*",
Replace: "identifier=*****",
},
}
tests := []struct {
name string
Expand All @@ -41,21 +46,39 @@ func TestFilter_Filter(t *testing.T) {
{
"Modified",
fields{filterList: parse(config)},
args{msg: "dumbmessage [email protected] foobarmessage [email protected]"},
fmt.Sprintf("dumbmessage %s foobarmessage %s", "<email obfuscated>", "<email obfuscated>"),
args{msg: base64.StdEncoding.EncodeToString([]byte("dumbmessage [email protected] somemessage russet.potatoes%40potato.com foobarmessage [email protected]"))},
"dumbmessage <email obfuscated> somemessage <email obfuscated> foobarmessage <email obfuscated>",
false,
true,
nil,
},
{
"NotModified",
fields{filterList: parse(config)},
args{msg: "dumbmessage foobarmessage"},
args{msg: base64.StdEncoding.EncodeToString([]byte("dumbmessage foobarmessage"))},
"dumbmessage foobarmessage",
false,
false,
nil,
},
{
"Modified",
fields{filterList: parse(config)},
args{msg: base64.StdEncoding.EncodeToString([]byte("GET /logging?procedure.identifier=https://www.philips.com/identifiers/ProcedureIdentifier|ACC_20241120110729422 HTTP/1.1"))},
"GET /logging?procedure.identifier=***** HTTP/1.1",
false,
true,
nil,
},
{
"Modified",
fields{filterList: parse(config)},
args{msg: base64.StdEncoding.EncodeToString([]byte("GET /logging?procedure.identifier%3Dhttps://www.philips.com/identifiers/ProcedureIdentifier|ACC_20241120110729422 HTTP/1.1"))},
"GET /logging?procedure.identifier=***** HTTP/1.1",
false,
true,
nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -65,12 +88,13 @@ func TestFilter_Filter(t *testing.T) {
log := &logging.Resource{}
log.LogData.Message = tt.args.msg
msg, dropped, modified, err := f.Filter(*log)
decodedMsg, _ := base64.StdEncoding.DecodeString(msg.LogData.Message)
if err != tt.wantErr {
t.Errorf("Filter() error = %v, wantErr %v", err, tt.wantErr)
return
}
if msg.LogData.Message != tt.wantLogMessage {
t.Errorf("FilterReplace.Filter() got = %v, want %v", msg.LogData.Message, tt.wantLogMessage)
if string(decodedMsg) != tt.wantLogMessage {
t.Errorf("FilterReplace.Filter() got = %v, want %v", string(decodedMsg), tt.wantLogMessage)
}
if dropped != tt.wantDropped {
t.Errorf("Filter() got1 = %v, want %v", dropped, tt.wantDropped)
Expand Down

0 comments on commit a5087f1

Please sign in to comment.