Skip to content

Commit a5087f1

Browse files
authored
Merge pull request #551 from reiinoldo/filter-replace-plugin-fix-regex-replace
fix: Process the entire regex at once instead of replacing individual components
2 parents 0ae29a2 + d460a19 commit a5087f1

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

logproxy-filter-replace/main.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@ func (f Filter) Filter(msg logging.Resource) (logging.Resource, bool, bool, erro
4444
modified := false
4545
for _, filter := range f.filterList {
4646
decodedMsg, _ := base64.StdEncoding.DecodeString(msg.LogData.Message)
47-
if req := filter.pattern.FindAllStringSubmatch(string(decodedMsg), -1); req != nil {
47+
if req := filter.pattern.FindAllString(string(decodedMsg), -1); req != nil {
4848
modifiedMsg := string(decodedMsg)
49-
for i := range req {
50-
for j := range req[i] {
51-
modifiedMsg = strings.ReplaceAll(modifiedMsg, req[i][j], filter.replace)
52-
}
49+
for _, match := range req {
50+
modifiedMsg = strings.ReplaceAll(modifiedMsg, match, filter.replace)
5351
}
5452
msg.LogData.Message = base64.StdEncoding.EncodeToString([]byte(modifiedMsg))
5553
modified = true

logproxy-filter-replace/main_test.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package main
22

33
import (
4-
"fmt"
5-
"github.com/hashicorp/go-hclog"
4+
"encoding/base64"
65
"os"
76
"testing"
87

8+
"github.com/hashicorp/go-hclog"
9+
910
"github.com/philips-software/go-hsdp-api/logging"
1011
)
1112

@@ -25,9 +26,13 @@ func TestFilter_Filter(t *testing.T) {
2526
}
2627
config := []Config{
2728
{
28-
Pattern: "[a-z0-9._%+\\-]+@[a-z0-9.\\-]+\\.[a-z]{2,4}",
29+
Pattern: "[a-z0-9._%+\\-]+(@|%40)[a-z0-9.\\-]+\\.[a-z]{2,4}",
2930
Replace: "<email obfuscated>",
3031
},
32+
{
33+
Pattern: "identifier(%3D|=)[^&\\s]*",
34+
Replace: "identifier=*****",
35+
},
3136
}
3237
tests := []struct {
3338
name string
@@ -41,21 +46,39 @@ func TestFilter_Filter(t *testing.T) {
4146
{
4247
"Modified",
4348
fields{filterList: parse(config)},
44-
args{msg: "dumbmessage [email protected] foobarmessage [email protected]"},
45-
fmt.Sprintf("dumbmessage %s foobarmessage %s", "<email obfuscated>", "<email obfuscated>"),
49+
args{msg: base64.StdEncoding.EncodeToString([]byte("dumbmessage [email protected] somemessage russet.potatoes%40potato.com foobarmessage [email protected]"))},
50+
"dumbmessage <email obfuscated> somemessage <email obfuscated> foobarmessage <email obfuscated>",
4651
false,
4752
true,
4853
nil,
4954
},
5055
{
5156
"NotModified",
5257
fields{filterList: parse(config)},
53-
args{msg: "dumbmessage foobarmessage"},
58+
args{msg: base64.StdEncoding.EncodeToString([]byte("dumbmessage foobarmessage"))},
5459
"dumbmessage foobarmessage",
5560
false,
5661
false,
5762
nil,
5863
},
64+
{
65+
"Modified",
66+
fields{filterList: parse(config)},
67+
args{msg: base64.StdEncoding.EncodeToString([]byte("GET /logging?procedure.identifier=https://www.philips.com/identifiers/ProcedureIdentifier|ACC_20241120110729422 HTTP/1.1"))},
68+
"GET /logging?procedure.identifier=***** HTTP/1.1",
69+
false,
70+
true,
71+
nil,
72+
},
73+
{
74+
"Modified",
75+
fields{filterList: parse(config)},
76+
args{msg: base64.StdEncoding.EncodeToString([]byte("GET /logging?procedure.identifier%3Dhttps://www.philips.com/identifiers/ProcedureIdentifier|ACC_20241120110729422 HTTP/1.1"))},
77+
"GET /logging?procedure.identifier=***** HTTP/1.1",
78+
false,
79+
true,
80+
nil,
81+
},
5982
}
6083
for _, tt := range tests {
6184
t.Run(tt.name, func(t *testing.T) {
@@ -65,12 +88,13 @@ func TestFilter_Filter(t *testing.T) {
6588
log := &logging.Resource{}
6689
log.LogData.Message = tt.args.msg
6790
msg, dropped, modified, err := f.Filter(*log)
91+
decodedMsg, _ := base64.StdEncoding.DecodeString(msg.LogData.Message)
6892
if err != tt.wantErr {
6993
t.Errorf("Filter() error = %v, wantErr %v", err, tt.wantErr)
7094
return
7195
}
72-
if msg.LogData.Message != tt.wantLogMessage {
73-
t.Errorf("FilterReplace.Filter() got = %v, want %v", msg.LogData.Message, tt.wantLogMessage)
96+
if string(decodedMsg) != tt.wantLogMessage {
97+
t.Errorf("FilterReplace.Filter() got = %v, want %v", string(decodedMsg), tt.wantLogMessage)
7498
}
7599
if dropped != tt.wantDropped {
76100
t.Errorf("Filter() got1 = %v, want %v", dropped, tt.wantDropped)

0 commit comments

Comments
 (0)