From ac0805e53b065e7188181fc80dce1800dfa51ab9 Mon Sep 17 00:00:00 2001 From: Muneeb Ullah Khan <100969065+MuneebUllahKhan222@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:52:14 +0500 Subject: [PATCH] [INS-469] Added Rev detectors to defaults.go and gated it behind feature flag (#5005) * Added rev detectors to defaults.go and gated it behind feature flag * resolved comment * updated defaults_test.go --- go.mod | 2 -- main.go | 1 + pkg/detectors/rev/rev.go | 5 +++-- pkg/detectors/rev/rev_integration_test.go | 16 +++++++++++++--- pkg/engine/defaults/defaults.go | 4 ++++ pkg/engine/defaults/defaults_test.go | 2 +- pkg/feature/feature.go | 1 + 7 files changed, 23 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 5808ea579..7697cc375 100644 --- a/go.mod +++ b/go.mod @@ -253,7 +253,6 @@ require ( github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.2 // indirect github.com/montanaflynn/stats v0.7.1 // indirect - github.com/morikuni/aec v1.0.0 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.16.0 // indirect @@ -320,6 +319,5 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect google.golang.org/grpc v1.79.3 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - gotest.tools/v3 v3.5.2 // indirect pault.ag/go/topsort v0.1.1 // indirect ) diff --git a/main.go b/main.go index 24c4955ce..7395c43f1 100644 --- a/main.go +++ b/main.go @@ -536,6 +536,7 @@ func run(state overseer.State, logSync func() error) { feature.DatadogApiKeyDetectorEnabled.Store(true) feature.TlyDetectorEnabled.Store(true) feature.WitDetectorEnabled.Store(true) + feature.RevDetectorEnabled.Store(true) conf := &config.Config{} if *configFilename != "" { diff --git a/pkg/detectors/rev/rev.go b/pkg/detectors/rev/rev.go index a6628b293..d90295551 100644 --- a/pkg/detectors/rev/rev.go +++ b/pkg/detectors/rev/rev.go @@ -3,10 +3,11 @@ package rev import ( "context" "fmt" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detector_typepb" @@ -49,7 +50,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1 := detectors.Result{ DetectorType: detector_typepb.DetectorType_Rev, Raw: []byte(resUserMatch), - SecretParts: map[string]string{"key": resUserMatch}, + SecretParts: map[string]string{"key": resUserMatch, "client": resClientMatch}, } if verify { diff --git a/pkg/detectors/rev/rev_integration_test.go b/pkg/detectors/rev/rev_integration_test.go index 3628811c4..63b059de3 100644 --- a/pkg/detectors/rev/rev_integration_test.go +++ b/pkg/detectors/rev/rev_integration_test.go @@ -9,8 +9,8 @@ import ( "testing" "time" - "github.com/kylelemons/godebug/pretty" - + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detector_typepb" @@ -98,7 +98,17 @@ func TestRev_FromChunk(t *testing.T) { } got[i].Raw = nil } - if diff := pretty.Compare(got, tt.want); diff != "" { + ignoreOpts := cmpopts.IgnoreFields( + detectors.Result{}, + "ExtraData", + "verificationError", + "primarySecret", + "SecretParts", + "chunkOffset", + "chunkOffsetSet", + ) + + if diff := cmp.Diff(got, tt.want, ignoreOpts); diff != "" { t.Errorf("Rev.FromData() %s diff: (-got +want)\n%s", tt.name, diff) } }) diff --git a/pkg/engine/defaults/defaults.go b/pkg/engine/defaults/defaults.go index 254279131..a22401c80 100644 --- a/pkg/engine/defaults/defaults.go +++ b/pkg/engine/defaults/defaults.go @@ -627,6 +627,7 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/requestfinance" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/restpackhtmltopdfapi" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/restpackscreenshotapi" + "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/rev" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/revampcrm" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/ringcentral" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/ritekit" @@ -1524,6 +1525,7 @@ func buildDetectorList() []detectors.Detector { // &restpack.Scanner{}, &restpackhtmltopdfapi.Scanner{}, &restpackscreenshotapi.Scanner{}, + &rev.Scanner{}, &revampcrm.Scanner{}, &ringcentral.Scanner{}, &ritekit.Scanner{}, @@ -1792,6 +1794,8 @@ func buildDetectorList() []detectors.Detector { return !feature.TlyDetectorEnabled.Load() case *wit.Scanner: return !feature.WitDetectorEnabled.Load() + case *rev.Scanner: + return !feature.RevDetectorEnabled.Load() default: return false } diff --git a/pkg/engine/defaults/defaults_test.go b/pkg/engine/defaults/defaults_test.go index 47f21058f..0e02533f2 100644 --- a/pkg/engine/defaults/defaults_test.go +++ b/pkg/engine/defaults/defaults_test.go @@ -121,7 +121,6 @@ var excludedFromDefaultList = map[detector_typepb.DetectorType]struct{}{ detector_typepb.DetectorType_Guru: {}, detector_typepb.DetectorType_IPInfo: {}, detector_typepb.DetectorType_Lob: {}, - detector_typepb.DetectorType_Rev: {}, detector_typepb.DetectorType_Tru: {}, detector_typepb.DetectorType_User: {}, @@ -134,6 +133,7 @@ var excludedFromDefaultList = map[detector_typepb.DetectorType]struct{}{ detector_typepb.DetectorType_Pinecone: {}, detector_typepb.DetectorType_TLy: {}, detector_typepb.DetectorType_Wit: {}, + detector_typepb.DetectorType_Rev: {}, // Reserved / special types. detector_typepb.DetectorType_CustomRegex: {}, // added dynamically via engine config, not via buildDetectorList() diff --git a/pkg/feature/feature.go b/pkg/feature/feature.go index 51defe577..f7be41070 100644 --- a/pkg/feature/feature.go +++ b/pkg/feature/feature.go @@ -23,6 +23,7 @@ var ( DatadogApiKeyDetectorEnabled atomic.Bool TlyDetectorEnabled atomic.Bool WitDetectorEnabled atomic.Bool + RevDetectorEnabled atomic.Bool ) type AtomicString struct {