diff --git a/pkg/detectors/apacta/apacta/apacta.go b/pkg/detectors/apacta/apacta/apacta.go
deleted file mode 100644
index 0db5c7451040..000000000000
--- a/pkg/detectors/apacta/apacta/apacta.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package apacta
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"apacta"}) + `\b([a-z0-9-]{36})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"apacta"}
-}
-
-// FromData will find and optionally verify Apacta secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Apacta,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://app.apacta.com/api/v1/time_entries?api_key=%s", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/apacta/apacta/apacta_test.go b/pkg/detectors/apacta/apacta/apacta_test.go
deleted file mode 100644
index 03a26d0baf61..000000000000
--- a/pkg/detectors/apacta/apacta/apacta_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package apacta
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestApacta_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("APACTA")
- inactiveSecret := testSecrets.MustGetField("APACTA_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apacta secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Apacta,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apacta secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Apacta,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Apacta.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Apacta.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/apimatic/apimatic/apimatic.go b/pkg/detectors/apimatic/apimatic/apimatic.go
deleted file mode 100644
index 4fdbe8bd9cc8..000000000000
--- a/pkg/detectors/apimatic/apimatic/apimatic.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package apimatic
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"apimatic"}) + `\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b`)
- passPat = regexp.MustCompile(detectors.PrefixRegex([]string{"apimatic"}) + `\b([a-z0-9-\S]{8,32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"apimatic"}
-}
-
-// FromData will find and optionally verify APIMatic secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- passMatches := passPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- userPatMatch := strings.TrimSpace(match[1])
-
- for _, idMatch := range passMatches {
- if len(idMatch) != 2 {
- continue
- }
-
- passPatMatch := strings.TrimSpace(idMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_APIMatic,
- Raw: []byte(userPatMatch),
- }
- if verify {
- timeout := 10 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", "https://www.apimatic.io/api/code-generations", nil)
- if err != nil {
- continue
- }
- req.SetBasicAuth(userPatMatch, passPatMatch)
- res, err := client.Do(req)
-
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(passPatMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/apimatic/apimatic/apimatic_test.go b/pkg/detectors/apimatic/apimatic/apimatic_test.go
deleted file mode 100644
index 759e1e8edc3a..000000000000
--- a/pkg/detectors/apimatic/apimatic/apimatic_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package apimatic
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestAPIMatic_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("APIMATIC")
- pass := testSecrets.MustGetField("APIMATIC_PASS")
- inactiveSecret := testSecrets.MustGetField("APIMATIC_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apimatic secret %s within apimatic pass %s", secret, pass)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_APIMatic,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apimatic secret %s within apimatic pass %s but not valid", inactiveSecret, pass)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_APIMatic,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("APIMatic.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("APIMatic.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/apiscience/apiscience/apiscience.go b/pkg/detectors/apiscience/apiscience/apiscience.go
deleted file mode 100644
index 90834d13abee..000000000000
--- a/pkg/detectors/apiscience/apiscience/apiscience.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package apiscience
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"apiscience"}) + `\b([a-bA-Z0-9\S]{22})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"apiscience"}
-}
-
-// FromData will find and optionally verify ApiScience secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_ApiScience,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.apiscience.com/v1/monitors", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/apiscience/apiscience/apiscience_test.go b/pkg/detectors/apiscience/apiscience/apiscience_test.go
deleted file mode 100644
index 30100dcf3acf..000000000000
--- a/pkg/detectors/apiscience/apiscience/apiscience_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package apiscience
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestApiScience_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("APISCIENCE")
- inactiveSecret := testSecrets.MustGetField("APISCIENCE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apiscience secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ApiScience,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a apiscience secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ApiScience,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("ApiScience.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("ApiScience.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/appsynergy/appsynergy/appsynergy.go b/pkg/detectors/appsynergy/appsynergy/appsynergy.go
deleted file mode 100644
index a614697d2f80..000000000000
--- a/pkg/detectors/appsynergy/appsynergy/appsynergy.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package appsynergy
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"appsynergy"}) + `\b([a-z0-9]{64})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"appsynergy"}
-}
-
-// FromData will find and optionally verify AppSynergy secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_AppSynergy,
- Raw: []byte(resMatch),
- }
-
- if verify {
- payload := strings.NewReader(`{"html":"
Hello World
","filename":"HelloWorld.pdf"}`)
- req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("https://www.appsynergy.com/api?action=HTML2PDF&apiKey=%s", resMatch), payload)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/appsynergy/appsynergy/appsynergy_test.go b/pkg/detectors/appsynergy/appsynergy/appsynergy_test.go
deleted file mode 100644
index 621a80ab1c78..000000000000
--- a/pkg/detectors/appsynergy/appsynergy/appsynergy_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package appsynergy
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestAppSynergy_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("APPSYNERGY")
- inactiveSecret := testSecrets.MustGetField("APPSYNERGY_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a appsynergy secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_AppSynergy,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a appsynergy secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_AppSynergy,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("AppSynergy.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("AppSynergy.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/beebole/beebole/beebole.go b/pkg/detectors/beebole/beebole/beebole.go
deleted file mode 100644
index 1c1caa4ea82d..000000000000
--- a/pkg/detectors/beebole/beebole/beebole.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package beebole
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"beebole"}) + `\b([0-9a-z]{40})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"beebole"}
-}
-
-// FromData will find and optionally verify Beebole secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Beebole,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:X", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- payload := strings.NewReader(`{"service": "custom_field.list"}`)
- req, err := http.NewRequestWithContext(ctx, "POST", "https://beebole-apps.com/api/v2", payload)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/beebole/beebole/beebole_test.go b/pkg/detectors/beebole/beebole/beebole_test.go
deleted file mode 100644
index d71c4be34f5d..000000000000
--- a/pkg/detectors/beebole/beebole/beebole_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package beebole
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestBeebole_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("BEEBOLE")
- inactiveSecret := testSecrets.MustGetField("BEEBOLE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a beebole secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Beebole,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a beebole secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Beebole,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Beebole.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Beebole.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/caflou/caflou/caflou.go b/pkg/detectors/caflou/caflou/caflou.go
deleted file mode 100644
index e7feea4e84c9..000000000000
--- a/pkg/detectors/caflou/caflou/caflou.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package caflou
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"caflou"}) + `\b([a-bA-Z0-9\S]{155})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"caflou"}
-}
-
-// FromData will find and optionally verify Caflou secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Caflou,
- Raw: []byte(resMatch),
- }
-
- if verify {
- timeout := 10 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", "https://app.caflou.com/api/v1/accounts", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/caflou/caflou/caflou_test.go b/pkg/detectors/caflou/caflou/caflou_test.go
deleted file mode 100644
index 21bcae721476..000000000000
--- a/pkg/detectors/caflou/caflou/caflou_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package caflou
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestCaflou_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("CAFLOU")
- inactiveSecret := testSecrets.MustGetField("CAFLOU_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a caflou secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Caflou,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a caflou secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Caflou,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Caflou.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Caflou.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/cashboard/cashboard/cashboard.go b/pkg/detectors/cashboard/cashboard/cashboard.go
deleted file mode 100644
index f701ee64dc4c..000000000000
--- a/pkg/detectors/cashboard/cashboard/cashboard.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package cashboard
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"cashboard"}) + `\b([0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3}-[0-9A-Z]{3})\b`)
- userPat = regexp.MustCompile(detectors.PrefixRegex([]string{"cashboard"}) + `\b([0-9a-z]{1,})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"cashboard"}
-}
-
-// FromData will find and optionally verify Cashboard secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- userMatches := userPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, userMatch := range userMatches {
- if len(userMatch) != 2 {
- continue
- }
- resUser := strings.TrimSpace(userMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Cashboard,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:%s", resUser, resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.cashboardapp.com/account.xml", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
-
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/cashboard/cashboard/cashboard_test.go b/pkg/detectors/cashboard/cashboard/cashboard_test.go
deleted file mode 100644
index f2ba3025ad34..000000000000
--- a/pkg/detectors/cashboard/cashboard/cashboard_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package cashboard
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestCashboard_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("CASHBOARD")
- user := testSecrets.MustGetField("SCANNER_USERNAME")
- inactiveSecret := testSecrets.MustGetField("CASHBOARD_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a cashboard secret %s within %s", secret, user)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Cashboard,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a cashboard secret %s within %s but not valid", inactiveSecret, user)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Cashboard,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Cashboard.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Cashboard.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/checio/checio/checio.go b/pkg/detectors/checio/checio/checio.go
deleted file mode 100644
index 1c9a42b074c7..000000000000
--- a/pkg/detectors/checio/checio/checio.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package checio
-
-import (
- "context"
- // "log"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"checio"}) + `\b(pk_[a-z0-9]{45})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"checio"}
-}
-
-// FromData will find and optionally verify ChecIO secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_ChecIO,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.chec.io/v1/products?limit=25", nil)
- if err != nil {
- continue
- }
- req.Header.Add("X-Authorization", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/checio/checio/checio_test.go b/pkg/detectors/checio/checio/checio_test.go
deleted file mode 100644
index c2da73be2178..000000000000
--- a/pkg/detectors/checio/checio/checio_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package checio
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestChecIO_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("CHECIO")
- inactiveSecret := testSecrets.MustGetField("CHECIO_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a checio secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ChecIO,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a checio secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ChecIO,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("ChecIO.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("ChecIO.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/checklyhq/checklyhq/checklyhq.go b/pkg/detectors/checklyhq/checklyhq/checklyhq.go
deleted file mode 100644
index ba94067786ba..000000000000
--- a/pkg/detectors/checklyhq/checklyhq/checklyhq.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package checklyhq
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"checklyhq"}) + `\b([a-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"checklyhq"}
-}
-
-// FromData will find and optionally verify ChecklyHQ secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_ChecklyHQ,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.checklyhq.com/v1/checks", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/checklyhq/checklyhq/checklyhq_test.go b/pkg/detectors/checklyhq/checklyhq/checklyhq_test.go
deleted file mode 100644
index 0224f352b7c5..000000000000
--- a/pkg/detectors/checklyhq/checklyhq/checklyhq_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package checklyhq
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestChecklyHQ_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("CHECKLYHQ")
- inactiveSecret := testSecrets.MustGetField("CHECKLYHQ_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a checklyhq secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ChecklyHQ,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a checklyhq secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ChecklyHQ,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("ChecklyHQ.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("ChecklyHQ.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/cloudelements/cloudelements/cloudelements.go b/pkg/detectors/cloudelements/cloudelements/cloudelements.go
deleted file mode 100644
index 0e6cf39556ca..000000000000
--- a/pkg/detectors/cloudelements/cloudelements/cloudelements.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package cloudelements
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"cloudelements"}) + `\b([a-zA-Z0-9]{43})\b`)
- orgPat = regexp.MustCompile(detectors.PrefixRegex([]string{"cloudelements"}) + `\b([a-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"cloudelements"}
-}
-
-// FromData will find and optionally verify CloudElements secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- orgMatches := orgPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, orgMatch := range orgMatches {
- if len(orgMatch) != 2 {
- continue
- }
-
- resOrgMatch := strings.TrimSpace(orgMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_CloudElements,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://staging.cloud-elements.com/elements/api-v2/accounts", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("User %s, Organization %s", resMatch, resOrgMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/cloudelements/cloudelements/cloudelements_test.go b/pkg/detectors/cloudelements/cloudelements/cloudelements_test.go
deleted file mode 100644
index 6f62ca259b98..000000000000
--- a/pkg/detectors/cloudelements/cloudelements/cloudelements_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package cloudelements
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestCloudElements_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("CLOUDELEMENTS")
- org := testSecrets.MustGetField("CLOUDELEMENTS_ORG")
- inactiveSecret := testSecrets.MustGetField("CLOUDELEMENTS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a cloudelements secret %s within cloudelements %s", secret, org)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_CloudElements,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a cloudelements secret %s within cloudelements %s but not valid", inactiveSecret, org)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_CloudElements,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("CloudElements.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("CloudElements.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/courier/courier/courier.go b/pkg/detectors/courier/courier/courier.go
deleted file mode 100644
index 8fda9242e313..000000000000
--- a/pkg/detectors/courier/courier/courier.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package courier
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"courier"}) + `\b(pk\_[a-zA-Z0-9]{1,}\_[a-zA-Z0-9]{28})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"courier"}
-}
-
-// FromData will find and optionally verify Courier secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
- fmt.Printf("\nresMatch: %s\n", resMatch)
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Courier,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.courier.com/preferences", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- fmt.Println(res)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/courier/courier/courier_test.go b/pkg/detectors/courier/courier/courier_test.go
deleted file mode 100644
index c79fdc7c1cae..000000000000
--- a/pkg/detectors/courier/courier/courier_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package courier
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestCourier_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("COURIER")
- inactiveSecret := testSecrets.MustGetField("COURIER_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a courier secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Courier,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a courier secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Courier,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Courier.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Courier.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/deputy/deputy/deputy.go b/pkg/detectors/deputy/deputy/deputy.go
deleted file mode 100644
index dfd1318d9330..000000000000
--- a/pkg/detectors/deputy/deputy/deputy.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package deputy
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"deputy"}) + `\b([0-9a-z]{32})\b`)
- urlPat = regexp.MustCompile(`\b([0-9a-z]{1,}\.as\.deputy\.com)\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"deputy"}
-}
-
-// FromData will find and optionally verify Deputy secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- urlMatches := urlPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, urlMatch := range urlMatches {
- if len(urlMatch) != 2 {
- continue
- }
- resURL := strings.TrimSpace(urlMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Deputy,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://%s/api/v1/me", resURL), nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("OAuth %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/deputy/deputy/deputy_test.go b/pkg/detectors/deputy/deputy/deputy_test.go
deleted file mode 100644
index c480f7c28894..000000000000
--- a/pkg/detectors/deputy/deputy/deputy_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package deputy
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestDeputy_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("DEPUTY")
- url := testSecrets.MustGetField("DEPUTY_URL")
- inactiveSecret := testSecrets.MustGetField("DEPUTY_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a deputy secret %s within %s", secret, url)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Deputy,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a deputy secret %s within %s but not valid", inactiveSecret, url)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Deputy,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Deputy.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Deputy.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/ditto/ditto/ditto.go b/pkg/detectors/ditto/ditto/ditto.go
deleted file mode 100644
index d0123b4b08c8..000000000000
--- a/pkg/detectors/ditto/ditto/ditto.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package ditto
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"ditto"}) + `\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12}\.[a-z0-9]{40})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"ditto"}
-}
-
-// FromData will find and optionally verify Ditto secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Ditto,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.dittowords.com/variants", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("token %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/ditto/ditto/ditto_test.go b/pkg/detectors/ditto/ditto/ditto_test.go
deleted file mode 100644
index 09b56dcc3b1a..000000000000
--- a/pkg/detectors/ditto/ditto/ditto_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package ditto
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestDitto_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("DITTO")
- inactiveSecret := testSecrets.MustGetField("DITTO_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a ditto secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Ditto,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a ditto secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Ditto,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Ditto.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Ditto.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/dronahq/dronahq/dronahq.go b/pkg/detectors/dronahq/dronahq/dronahq.go
deleted file mode 100644
index 32236d9b5f43..000000000000
--- a/pkg/detectors/dronahq/dronahq/dronahq.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package dronahq
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"dronahq"}) + `\b([a-z0-9]{50})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"dronahq"}
-}
-
-// FromData will find and optionally verify DronaHQ secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_DronaHQ,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://plugin.api.dronahq.com/users/?tokenkey=%s", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/dronahq/dronahq/dronahq_test.go b/pkg/detectors/dronahq/dronahq/dronahq_test.go
deleted file mode 100644
index 29d8ca80f828..000000000000
--- a/pkg/detectors/dronahq/dronahq/dronahq_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package dronahq
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestDronaHQ_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("DRONAHQ")
- inactiveSecret := testSecrets.MustGetField("DRONAHQ_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a dronahq secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_DronaHQ,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a dronahq secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_DronaHQ,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("DronaHQ.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("DronaHQ.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks.go b/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks.go
deleted file mode 100644
index c12a15ee551a..000000000000
--- a/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package eagleeyenetworks
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"eagleeyenetworks"}) + `\b([a-zA-Z0-9]{15})\b`)
- email = regexp.MustCompile(detectors.PrefixRegex([]string{"eagleeyenetworks"}) + `\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"eagleeyenetworks"}
-}
-
-// FromData will find and optionally verify EagleEyeNetworks secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- emailMatches := email.FindAllStringSubmatch(dataStr, -1)
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, emailMatch := range emailMatches {
- if len(emailMatch) != 2 {
- continue
- }
-
- resEmailPatMatch := strings.TrimSpace(emailMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_EagleEyeNetworks,
- Raw: []byte(resMatch),
- }
-
- if verify {
- payload := strings.NewReader(fmt.Sprintf(`{"username": "%s", "password": "%s"}`, resEmailPatMatch, resMatch))
- req, err := http.NewRequestWithContext(ctx, "POST", "https://login.eagleeyenetworks.com/g/aaa/authenticate", payload)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks_test.go b/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks_test.go
deleted file mode 100644
index b7ac092c91c6..000000000000
--- a/pkg/detectors/eagleeyenetworks/eagleeyenetworks/eagleeyenetworks_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package eagleeyenetworks
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestEagleEyeNetworks_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("EAGLEEYENETWORKS")
- email := testSecrets.MustGetField("EAGLEEYENETWORKS_USER")
- inactiveSecret := testSecrets.MustGetField("EAGLEEYENETWORKS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a eagleeyenetworks secret %s within eagleeyenetworks %s", secret, email)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_EagleEyeNetworks,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a eagleeyenetworks secret %s within eagleeyenetworks %s but not valid", inactiveSecret, email)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_EagleEyeNetworks,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("EagleEyeNetworks.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("EagleEyeNetworks.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/fastforex/fastforex/fastforex.go b/pkg/detectors/fastforex/fastforex/fastforex.go
deleted file mode 100644
index 2290ca5468a4..000000000000
--- a/pkg/detectors/fastforex/fastforex/fastforex.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package fastforex
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"fastforex"}) + `\b([a-z0-9-]{28})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"fastforex"}
-}
-
-// FromData will find and optionally verify FastForex secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_FastForex,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://api.fastforex.io/fetch-all?api_key=%s", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/fastforex/fastforex/fastforex_test.go b/pkg/detectors/fastforex/fastforex/fastforex_test.go
deleted file mode 100644
index 563239cec547..000000000000
--- a/pkg/detectors/fastforex/fastforex/fastforex_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package fastforex
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestFastForex_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("FASTFOREX")
- inactiveSecret := testSecrets.MustGetField("FASTFOREX_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fastforex secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_FastForex,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fastforex secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_FastForex,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("FastForex.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("FastForex.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/findl/findl/findl.go b/pkg/detectors/findl/findl/findl.go
deleted file mode 100644
index df82d877843f..000000000000
--- a/pkg/detectors/findl/findl/findl.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package findl
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"findl"}) + `\b([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"findl"}
-}
-
-// FromData will find and optionally verify Findl secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Findl,
- Raw: []byte(resMatch),
- }
-
- if verify {
- timeout := 5 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.findl.com/v1.0/query?limit=6", nil)
- if err != nil {
- continue
- }
- req.Header.Add("X-API-Key", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/findl/findl/findl_test.go b/pkg/detectors/findl/findl/findl_test.go
deleted file mode 100644
index abd87968e5e3..000000000000
--- a/pkg/detectors/findl/findl/findl_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package findl
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestFindl_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("FINDL")
- inactiveSecret := testSecrets.MustGetField("FINDL_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a findl secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Findl,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a findl secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Findl,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Findl.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Findl.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/fmfw/fmfw/fmfw.go b/pkg/detectors/fmfw/fmfw/fmfw.go
deleted file mode 100644
index 16dc18ab33fb..000000000000
--- a/pkg/detectors/fmfw/fmfw/fmfw.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package fmfw
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"fmfw"}) + `\b([a-zA-Z0-9_-]{32})\b`)
- idPat = regexp.MustCompile(detectors.PrefixRegex([]string{"fmfw"}) + `\b([a-zA-Z0-9-]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"fmfw"}
-}
-
-// FromData will find and optionally verify Fmfw secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- idMatches := idPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- tokenPatMatch := strings.TrimSpace(match[1])
-
- for _, idMatch := range idMatches {
- if len(idMatch) != 2 {
- continue
- }
-
- userPatMatch := strings.TrimSpace(idMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Fmfw,
- Raw: []byte(tokenPatMatch),
- }
-
- if verify {
- timeout := 10 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.fmfw.io/api/3/spot/balance", nil)
- if err != nil {
- continue
- }
- req.SetBasicAuth(userPatMatch, tokenPatMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/fmfw/fmfw/fmfw_test.go b/pkg/detectors/fmfw/fmfw/fmfw_test.go
deleted file mode 100644
index b19b3af3c79c..000000000000
--- a/pkg/detectors/fmfw/fmfw/fmfw_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package fmfw
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestFmfw_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("FMFW")
- user := testSecrets.MustGetField("FMFW_USER")
- inactiveSecret := testSecrets.MustGetField("FMFW_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fmfw secret %s within fmfw %s", secret, user)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Fmfw,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fmfw secret %s within fmfw %s but not valid", inactiveSecret, user)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Fmfw,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Fmfw.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Fmfw.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/freshdesk/freshdesk/freshdesk.go b/pkg/detectors/freshdesk/freshdesk/freshdesk.go
deleted file mode 100644
index e47e77ab0739..000000000000
--- a/pkg/detectors/freshdesk/freshdesk/freshdesk.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package freshdesk
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- urlPat = regexp.MustCompile(`\b([0-9a-z-]{1,}\.freshdesk\.com)\b`)
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"freshdesk"}) + `\b([0-9A-Za-z]{20})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"freshdesk"}
-}
-
-// FromData will find and optionally verify Freshdesk secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- urlMatches := urlPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, urlMatch := range urlMatches {
- if len(urlMatch) != 2 {
- continue
- }
- resURL := strings.TrimSpace(urlMatch[1])
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Freshdesk,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:X", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://%s/api/v2/tickets", resURL), nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/freshdesk/freshdesk/freshdesk_test.go b/pkg/detectors/freshdesk/freshdesk/freshdesk_test.go
deleted file mode 100644
index d2029e5340cb..000000000000
--- a/pkg/detectors/freshdesk/freshdesk/freshdesk_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package freshdesk
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestFreshdesk_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("FRESHDESK")
- url := testSecrets.MustGetField("FRESHDESK_URL")
- inactiveSecret := testSecrets.MustGetField("FRESHDESK_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a freshdesk secret %s within %s", secret, url)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Freshdesk,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a freshdesk secret %s within %s but not valid", inactiveSecret, url)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Freshdesk,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Freshdesk.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Freshdesk.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/fusebill/fusebill/fusebill.go b/pkg/detectors/fusebill/fusebill/fusebill.go
deleted file mode 100644
index 3b95432bded6..000000000000
--- a/pkg/detectors/fusebill/fusebill/fusebill.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package fusebill
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"fusebill"}) + `\b([a-zA-Z0-9]{88})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"fusebill"}
-}
-
-// FromData will find and optionally verify Fusebill secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Fusebill,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://secure.fusebill.com/v1/customers?pageSize=100&pageNumber=0", nil)
- if err != nil {
- continue
- }
-
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/fusebill/fusebill/fusebill_test.go b/pkg/detectors/fusebill/fusebill/fusebill_test.go
deleted file mode 100644
index d1312f3a3870..000000000000
--- a/pkg/detectors/fusebill/fusebill/fusebill_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package fusebill
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestFusebill_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("FUSEBILL")
- inactiveSecret := testSecrets.MustGetField("FUSEBILL_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fusebill secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Fusebill,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a fusebill secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Fusebill,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Fusebill.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Fusebill.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/geckoboard/geckoboard/geckoboard.go b/pkg/detectors/geckoboard/geckoboard/geckoboard.go
deleted file mode 100644
index 956228e422f0..000000000000
--- a/pkg/detectors/geckoboard/geckoboard/geckoboard.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package geckoboard
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"geckoboard"}) + `\b([a-zA-Z0-9]{44})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"geckoboard"}
-}
-
-// FromData will find and optionally verify Geckoboard secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Geckoboard,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.geckoboard.com/", nil)
- if err != nil {
- continue
- }
-
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/geckoboard/geckoboard/geckoboard_test.go b/pkg/detectors/geckoboard/geckoboard/geckoboard_test.go
deleted file mode 100644
index 81a716440645..000000000000
--- a/pkg/detectors/geckoboard/geckoboard/geckoboard_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package geckoboard
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestGeckoboard_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("GECKOBOARD")
- inactiveSecret := testSecrets.MustGetField("GECKOBOARD_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a geckoboard secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Geckoboard,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a geckoboard secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Geckoboard,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Geckoboard.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Geckoboard.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/getsandbox/getsandbox/getsandbox.go b/pkg/detectors/getsandbox/getsandbox/getsandbox.go
deleted file mode 100644
index fbc57613b9d8..000000000000
--- a/pkg/detectors/getsandbox/getsandbox/getsandbox.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package getsandbox
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"getsandbox"}) + `\b([a-z0-9-]{40})\b`)
- idPat = regexp.MustCompile(detectors.PrefixRegex([]string{"getsandbox"}) + `\b([a-z0-9-]{15,30})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"getsandbox"}
-}
-
-// FromData will find and optionally verify GetSandbox secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- idMatches := idPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, idMatch := range idMatches {
- if len(idMatch) != 2 {
- continue
- }
-
- resIdMatch := strings.TrimSpace(idMatch[1])
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_GetSandbox,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://getsandbox.com/api/1/sandboxes/%s", resIdMatch), nil)
- if err != nil {
- continue
- }
- req.Header.Add("API-Key", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/getsandbox/getsandbox/getsandbox_test.go b/pkg/detectors/getsandbox/getsandbox/getsandbox_test.go
deleted file mode 100644
index ea8493653ee3..000000000000
--- a/pkg/detectors/getsandbox/getsandbox/getsandbox_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package getsandbox
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestGetSandbox_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("GETSANDBOX")
- id := testSecrets.MustGetField("GETSANDBOX_ID")
- inactiveSecret := testSecrets.MustGetField("GETSANDBOX_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a getsandbox secret %s within getsandbox %s", secret, id)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_GetSandbox,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a getsandbox secret %s within getsandbox %s but not valid", inactiveSecret, id)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_GetSandbox,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("GetSandbox.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("GetSandbox.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/goodday/goodday/goodday.go b/pkg/detectors/goodday/goodday/goodday.go
deleted file mode 100644
index 4cfe0d4352b4..000000000000
--- a/pkg/detectors/goodday/goodday/goodday.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package goodday
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"goodday"}) + `\b([a-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"goodday"}
-}
-
-// FromData will find and optionally verify GoodDay secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_GoodDay,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.goodday.work/2.0/users", nil)
- if err != nil {
- continue
- }
- req.Header.Add("gd-api-token", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/goodday/goodday/goodday_test.go b/pkg/detectors/goodday/goodday/goodday_test.go
deleted file mode 100644
index e0178909c466..000000000000
--- a/pkg/detectors/goodday/goodday/goodday_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package goodday
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestGoodDay_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("GOODDAY")
- inactiveSecret := testSecrets.MustGetField("GOODDAY_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a goodday secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_GoodDay,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a goodday secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_GoodDay,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("GoodDay.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("GoodDay.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/happi/happi/happi.go b/pkg/detectors/happi/happi/happi.go
deleted file mode 100644
index 3c21b00901a9..000000000000
--- a/pkg/detectors/happi/happi/happi.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package happi
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"happi"}) + `\b([a-zA-Z0-9]{56})`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"happi"}
-}
-
-// FromData will find and optionally verify Happi secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Happi,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.happi.dev/v1/exchange", nil)
- if err != nil {
- continue
- }
- req.Header.Add("x-happi-key", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/happi/happi/happi_test.go b/pkg/detectors/happi/happi/happi_test.go
deleted file mode 100644
index 85d169643ac0..000000000000
--- a/pkg/detectors/happi/happi/happi_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package happi
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestHappi_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("HAPPI")
- inactiveSecret := testSecrets.MustGetField("HAPPI_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a happi secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Happi,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a happi secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Happi,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Happi.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Happi.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/invoiceocean/invoiceocean/invoiceocean.go b/pkg/detectors/invoiceocean/invoiceocean/invoiceocean.go
deleted file mode 100644
index 4064190fc6d8..000000000000
--- a/pkg/detectors/invoiceocean/invoiceocean/invoiceocean.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package invoiceocean
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"invoiceocean"}) + `\b([0-9A-Za-z]{20})\b`)
- urlPat = regexp.MustCompile(`\b([0-9a-z]{1,}\.invoiceocean\.com)\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"invoiceocean"}
-}
-
-// FromData will find and optionally verify Invoiceocean secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- urlMatches := urlPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- for _, urlMatch := range urlMatches {
- if len(urlMatch) != 2 {
- continue
- }
- resURL := strings.TrimSpace(urlMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_InvoiceOcean,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://%s/invoices.json?period=this_month&api_token=%s", resURL, resMatch), nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/invoiceocean/invoiceocean/invoiceocean_test.go b/pkg/detectors/invoiceocean/invoiceocean/invoiceocean_test.go
deleted file mode 100644
index a00990852e8c..000000000000
--- a/pkg/detectors/invoiceocean/invoiceocean/invoiceocean_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package invoiceocean
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestInvoiceocean_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("INVOICEOCEAN")
- url := testSecrets.MustGetField("INVOICEOCEAN_URL")
- inactiveSecret := testSecrets.MustGetField("INVOICEOCEAN_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a invoiceocean secret %s within %s", secret, url)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_InvoiceOcean,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a invoiceocean secret %s within %s but not valid", inactiveSecret, url)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_InvoiceOcean,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Invoiceocean.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Invoiceocean.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/kanban/kanban/kanban.go b/pkg/detectors/kanban/kanban/kanban.go
deleted file mode 100644
index 49729f33f121..000000000000
--- a/pkg/detectors/kanban/kanban/kanban.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package kanban
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"kanban"}) + `\b([0-9A-Z]{12})\b`)
- urlPat = regexp.MustCompile(`\b([0-9a-z]{1,}\.kanbantool\.com)\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"kanban"}
-}
-
-// FromData will find and optionally verify Kanban secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- urlMatches := urlPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
- for _, urlMatch := range urlMatches {
- if len(urlMatch) != 2 {
- continue
- }
- resURL := strings.TrimSpace(urlMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Kanban,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://%s/api/v3/users/current.json", resURL), nil)
- if err != nil {
- continue
- }
- req.Header.Add("Accept", "application/vnd.kanban+json; version=3")
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/kanban/kanban/kanban_test.go b/pkg/detectors/kanban/kanban/kanban_test.go
deleted file mode 100644
index 8b9fb25e9d0c..000000000000
--- a/pkg/detectors/kanban/kanban/kanban_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package kanban
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestKanban_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("KANBAN")
- url := testSecrets.MustGetField("KANBAN_URL")
- inactiveSecret := testSecrets.MustGetField("KANBAN_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a kanban secret %s within %s", secret, url)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Kanban,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a kanban secret %s within %s but not valid", inactiveSecret, url)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Kanban,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Kanban.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Kanban.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/luno/luno/luno.go b/pkg/detectors/luno/luno/luno.go
deleted file mode 100644
index a6002d2a1b06..000000000000
--- a/pkg/detectors/luno/luno/luno.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package luno
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"luno"}) + `\b([a-zA-Z0-9_-]{43})\b`)
- idPat = regexp.MustCompile(detectors.PrefixRegex([]string{"luno"}) + `\b([a-z0-9]{13})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"luno"}
-}
-
-// FromData will find and optionally verify Luno secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- idMatches := idPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- tokenPatMatch := strings.TrimSpace(match[1])
-
- for _, idMatch := range idMatches {
- if len(idMatch) != 2 {
- continue
- }
-
- userPatMatch := strings.TrimSpace(idMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Luno,
- Raw: []byte(tokenPatMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.luno.com/api/1/balance", nil)
- if err != nil {
- continue
- }
- req.SetBasicAuth(userPatMatch, tokenPatMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/luno/luno/luno_test.go b/pkg/detectors/luno/luno/luno_test.go
deleted file mode 100644
index 37bacb93b9e5..000000000000
--- a/pkg/detectors/luno/luno/luno_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package luno
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestLuno_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("LUNO")
- user := testSecrets.MustGetField("LUNO_USER")
- inactiveSecret := testSecrets.MustGetField("LUNO_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a luno secret %s within luno %s", secret, user)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Luno,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a luno secret %s within luno %s but not valid", inactiveSecret, user)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Luno,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Luno.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Luno.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/manifest/manifest/manifest.go b/pkg/detectors/manifest/manifest/manifest.go
deleted file mode 100644
index 39358b946f44..000000000000
--- a/pkg/detectors/manifest/manifest/manifest.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package manifest
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"manifest"}) + `\b([a-zA-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"manifest"}
-}
-
-// FromData will find and optionally verify Manifest secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Manifest,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.manifest.ly/api/v1/checklists/?api_key="+resMatch, nil)
- if err != nil {
- continue
- }
-
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/manifest/manifest/manifest_test.go b/pkg/detectors/manifest/manifest/manifest_test.go
deleted file mode 100644
index f5ce7bbf4983..000000000000
--- a/pkg/detectors/manifest/manifest/manifest_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package manifest
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestManifest_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("MANIFEST")
- inactiveSecret := testSecrets.MustGetField("MANIFEST_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a manifest secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Manifest,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a manifest secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Manifest,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Manifest.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Manifest.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/meistertask/meistertask/meistertask.go b/pkg/detectors/meistertask/meistertask/meistertask.go
deleted file mode 100644
index 3d10d8b5447b..000000000000
--- a/pkg/detectors/meistertask/meistertask/meistertask.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package meistertask
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"meistertask"}) + `\b([a-zA-Z0-9]{43})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"meistertask"}
-}
-
-// FromData will find and optionally verify Meistertask secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Meistertask,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://www.meistertask.com/api/projects", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/meistertask/meistertask/meistertask_test.go b/pkg/detectors/meistertask/meistertask/meistertask_test.go
deleted file mode 100644
index a800d87e6008..000000000000
--- a/pkg/detectors/meistertask/meistertask/meistertask_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package meistertask
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestMeistertask_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("MEISTERTASK")
- inactiveSecret := testSecrets.MustGetField("MEISTERTASK_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a meistertask secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Meistertask,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a meistertask secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Meistertask,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Meistertask.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Meistertask.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/mite/mite/mite.go b/pkg/detectors/mite/mite/mite.go
deleted file mode 100644
index ffec13965fbc..000000000000
--- a/pkg/detectors/mite/mite/mite.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package mite
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"mite"}) + `\b([0-9a-z]{16})\b`)
- urlPat = regexp.MustCompile(`\b([0-9a-z-]{1,}.mite.yo.lk)\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"mite"}
-}
-
-// FromData will find and optionally verify Mite secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- urlMatches := urlPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
- for _, urlMatch := range urlMatches {
- if len(urlMatch) != 2 {
- continue
- }
- resURL := strings.TrimSpace(urlMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Mite,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://%s/account.json", resURL), nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("X-MiteApiKey", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/mite/mite/mite_test.go b/pkg/detectors/mite/mite/mite_test.go
deleted file mode 100644
index dd8ec6f86f01..000000000000
--- a/pkg/detectors/mite/mite/mite_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package mite
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestMite_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("MITE")
- url := testSecrets.MustGetField("MITE_URL")
- inactiveSecret := testSecrets.MustGetField("MITE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a mite secret %s within %s", secret, url)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Mite,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a mite secret %s within %s but not valid", inactiveSecret, url)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Mite,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Mite.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Mite.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/mixmax/mixmax/mixmax.go b/pkg/detectors/mixmax/mixmax/mixmax.go
deleted file mode 100644
index 1f86ed91d217..000000000000
--- a/pkg/detectors/mixmax/mixmax/mixmax.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package mixmax
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"mixmax"}) + `\b([a-zA-Z0-9_-]{36})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"mixmax"}
-}
-
-// FromData will find and optionally verify Mixmax secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Mixmax,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.mixmax.com/v1/users/me", nil)
- if err != nil {
- continue
- }
-
- req.Header.Add("X-API-Token", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/mixmax/mixmax/mixmax_test.go b/pkg/detectors/mixmax/mixmax/mixmax_test.go
deleted file mode 100644
index 638aef73214d..000000000000
--- a/pkg/detectors/mixmax/mixmax/mixmax_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package mixmax
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestMixmax_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("MIXMAX")
- inactiveSecret := testSecrets.MustGetField("MIXMAX_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a mixmax secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Mixmax,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a mixmax secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Mixmax,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Mixmax.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Mixmax.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/myintervals/myintervals/myintervals.go b/pkg/detectors/myintervals/myintervals/myintervals.go
deleted file mode 100644
index 25433cc46b5d..000000000000
--- a/pkg/detectors/myintervals/myintervals/myintervals.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package myintervals
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"myintervals"}) + `\b([0-9a-z]{11})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"myintervals"}
-}
-
-// FromData will find and optionally verify Myintervals secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_MyIntervals,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:X", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.myintervals.com/client/", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/myintervals/myintervals/myintervals_test.go b/pkg/detectors/myintervals/myintervals/myintervals_test.go
deleted file mode 100644
index 291ac9c90d25..000000000000
--- a/pkg/detectors/myintervals/myintervals/myintervals_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package myintervals
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestMyintervals_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("MYINTERVALS")
- inactiveSecret := testSecrets.MustGetField("MYINTERVALS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a myintervals secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_MyIntervals,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a myintervals secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_MyIntervals,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Myintervals.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Myintervals.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/oanda/oanda/oanda.go b/pkg/detectors/oanda/oanda/oanda.go
deleted file mode 100644
index 99e9aed92051..000000000000
--- a/pkg/detectors/oanda/oanda/oanda.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package oanda
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"oanda"}) + `\b([a-zA-Z0-9]{24})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"oanda"}
-}
-
-// FromData will find and optionally verify Oanda secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Oanda,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://web-services.oanda.com/rates/api/v2/currencies.json", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/oanda/oanda/oanda_test.go b/pkg/detectors/oanda/oanda/oanda_test.go
deleted file mode 100644
index 5ffba9a49f1f..000000000000
--- a/pkg/detectors/oanda/oanda/oanda_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package oanda
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestOanda_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("OANDA")
- inactiveSecret := testSecrets.MustGetField("OANDA_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a oanda secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Oanda,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a oanda secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Oanda,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Oanda.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Oanda.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/paymoapp/paymoapp/paymoapp.go b/pkg/detectors/paymoapp/paymoapp/paymoapp.go
deleted file mode 100644
index f15c2dd6dc37..000000000000
--- a/pkg/detectors/paymoapp/paymoapp/paymoapp.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package paymoapp
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"paymoapp"}) + `\b([a-zA-Z0-9]{44})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"paymoapp"}
-}
-
-// FromData will find and optionally verify Paymoapp secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Paymoapp,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://app.paymoapp.com/api/me", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/paymoapp/paymoapp/paymoapp_test.go b/pkg/detectors/paymoapp/paymoapp/paymoapp_test.go
deleted file mode 100644
index c77025994948..000000000000
--- a/pkg/detectors/paymoapp/paymoapp/paymoapp_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package paymoapp
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestPaymoapp_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("PAYMOAPP")
- inactiveSecret := testSecrets.MustGetField("PAYMOAPP_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a paymoapp secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Paymoapp,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a paymoapp secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Paymoapp,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Paymoapp.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Paymoapp.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs.go b/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs.go
deleted file mode 100644
index 53f1710c3e5d..000000000000
--- a/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package peopledatalabs
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"peopledatalabs"}) + `\b([a-z0-9]{64})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"peopledatalabs"}
-}
-
-// FromData will find and optionally verify PeopleDataLabs secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_PeopleDataLabs,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.peopledatalabs.com/v5/person/enrich?min_likelihood=6&profile=http://linkedin.com/in/williamhgates", nil)
- if err != nil {
- continue
- }
- req.Header.Add("X-Api-Key", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs_test.go b/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs_test.go
deleted file mode 100644
index d3d7d281578f..000000000000
--- a/pkg/detectors/peopledatalabs/peopledatalabs/peopledatalabs_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package peopledatalabs
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestPeopleDataLabs_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("PEOPLEDATALABS")
- inactiveSecret := testSecrets.MustGetField("PEOPLEDATALABS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a peopledatalabs secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_PeopleDataLabs,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a peopledatalabs secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_PeopleDataLabs,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("PeopleDataLabs.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("PeopleDataLabs.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/scrapfly/scrapfly/scrapfly.go b/pkg/detectors/scrapfly/scrapfly/scrapfly.go
deleted file mode 100644
index 588d83d84e9d..000000000000
--- a/pkg/detectors/scrapfly/scrapfly/scrapfly.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package scrapfly
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"scrapfly"}) + `\b([a-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"scrapfly"}
-}
-
-// FromData will find and optionally verify Scrapfly secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Scrapfly,
- Raw: []byte(resMatch),
- }
-
- if verify {
- timeout := 10 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://api.scrapfly.io/scrape?key=%s&url=https://google.com", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/scrapfly/scrapfly/scrapfly_test.go b/pkg/detectors/scrapfly/scrapfly/scrapfly_test.go
deleted file mode 100644
index 99c24525546c..000000000000
--- a/pkg/detectors/scrapfly/scrapfly/scrapfly_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package scrapfly
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestScrapfly_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SCRAPFLY")
- inactiveSecret := testSecrets.MustGetField("SCRAPFLY_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a scrapfly secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Scrapfly,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a scrapfly secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Scrapfly,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Scrapfly.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Scrapfly.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/selectpdf/selectpdf/selectpdf.go b/pkg/detectors/selectpdf/selectpdf/selectpdf.go
deleted file mode 100644
index 8d5dbfef6895..000000000000
--- a/pkg/detectors/selectpdf/selectpdf/selectpdf.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package selectpdf
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
- "time"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"selectpdf"}) + `\b([a-z0-9-]{36})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"selectpdf"}
-}
-
-// FromData will find and optionally verify SelectPDF secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_SelectPDF,
- Raw: []byte(resMatch),
- }
-
- if verify {
- timeout := 10 * time.Second
- client.Timeout = timeout
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://selectpdf.com/api2/convert/?key=%s&url=google.com", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/selectpdf/selectpdf/selectpdf_test.go b/pkg/detectors/selectpdf/selectpdf/selectpdf_test.go
deleted file mode 100644
index 29ef9c80d67f..000000000000
--- a/pkg/detectors/selectpdf/selectpdf/selectpdf_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package selectpdf
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestSelectPDF_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SELECTPDF")
- inactiveSecret := testSecrets.MustGetField("SELECTPDF_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a selectpdf secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_SelectPDF,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a selectpdf secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_SelectPDF,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("SelectPDF.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("SelectPDF.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/sherpadesk/sherpadesk/sherpadesk.go b/pkg/detectors/sherpadesk/sherpadesk/sherpadesk.go
deleted file mode 100644
index 26fafbd0e6d3..000000000000
--- a/pkg/detectors/sherpadesk/sherpadesk/sherpadesk.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package sherpadesk
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"sherpadesk"}) + `\b([0-9a-z]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"sherpadesk"}
-}
-
-// FromData will find and optionally verify Sherpadesk secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Sherpadesk,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("x:%s", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.sherpadesk.com/organizations/", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/sherpadesk/sherpadesk/sherpadesk_test.go b/pkg/detectors/sherpadesk/sherpadesk/sherpadesk_test.go
deleted file mode 100644
index 6600dd2654a9..000000000000
--- a/pkg/detectors/sherpadesk/sherpadesk/sherpadesk_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package sherpadesk
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestSherpadesk_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SHERPADESK")
- inactiveSecret := testSecrets.MustGetField("SHERPADESK_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a sherpadesk secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Sherpadesk,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a sherpadesk secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Sherpadesk,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Sherpadesk.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Sherpadesk.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/shotstack/shotstack/shotstack.go b/pkg/detectors/shotstack/shotstack/shotstack.go
deleted file mode 100644
index eec5b141f93a..000000000000
--- a/pkg/detectors/shotstack/shotstack/shotstack.go
+++ /dev/null
@@ -1,105 +0,0 @@
-package shotstack
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"shotstack"}) + `\b([a-zA-Z0-9]{40})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"shotstack"}
-}
-
-// FromData will find and optionally verify Shotstack secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Shotstack,
- Raw: []byte(resMatch),
- }
-
- if verify {
- payload := strings.NewReader(`{
- "timeline":{
- "soundtrack":{
- "src":"https://s3-ap-southeast-2.amazonaws.com/shotstack-assets/music/moment.mp3",
- "effect":"fadeOut"
- },
- "background":"#000000",
- "tracks":[
- {
- "clips":[
- {
- "asset": {
- "type":"title",
- "text":"Hello World",
- "style":"minimal"
- },
- "start":0,
- "length":5,
- "transition":{
- "in":"fade",
- "out":"fade"
- }
- }
- ]
- }
- ]
- },
- "output":{"format":"mp4", "resolution":"sd"
- }
- }`)
- req, err := http.NewRequestWithContext(ctx, "POST", "https://api.shotstack.io/stage/render", payload)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Accept", "application/json")
- req.Header.Add("x-api-key", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/shotstack/shotstack/shotstack_test.go b/pkg/detectors/shotstack/shotstack/shotstack_test.go
deleted file mode 100644
index e81cb9c650d6..000000000000
--- a/pkg/detectors/shotstack/shotstack/shotstack_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package shotstack
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestShotstack_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SHOTSTACK")
- inactiveSecret := testSecrets.MustGetField("SHOTSTACK_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a shotstack secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Shotstack,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a shotstack secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Shotstack,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Shotstack.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Shotstack.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/sigopt/sigopt/sigopt.go b/pkg/detectors/sigopt/sigopt/sigopt.go
deleted file mode 100644
index cbc5fd37fc9b..000000000000
--- a/pkg/detectors/sigopt/sigopt/sigopt.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package sigopt
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"sigopt"}) + `\b([A-Z0-9]{48})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"sigopt"}
-}
-
-// FromData will find and optionally verify Sigopt secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Sigopt,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.sigopt.com/v1/experiments", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/sigopt/sigopt/sigopt_test.go b/pkg/detectors/sigopt/sigopt/sigopt_test.go
deleted file mode 100644
index 992498bb2c54..000000000000
--- a/pkg/detectors/sigopt/sigopt/sigopt_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package sigopt
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestSigopt_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SIGOPT")
- inactiveSecret := testSecrets.MustGetField("SIGOPT_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a sigopt secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Sigopt,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a sigopt secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Sigopt,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Sigopt.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Sigopt.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/simplynoted/simplynoted/simplynoted.go b/pkg/detectors/simplynoted/simplynoted/simplynoted.go
deleted file mode 100644
index 80f6c3afe494..000000000000
--- a/pkg/detectors/simplynoted/simplynoted/simplynoted.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package simplynoted
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"simplynoted"}) + `\b([a-zA-Z0-9\S]{340,360})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"simplynoted"}
-}
-
-// FromData will find and optionally verify SimplyNoted secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_SimplyNoted,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.simplynoted.com/api/products", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/simplynoted/simplynoted/simplynoted_test.go b/pkg/detectors/simplynoted/simplynoted/simplynoted_test.go
deleted file mode 100644
index 421a1d4aaa04..000000000000
--- a/pkg/detectors/simplynoted/simplynoted/simplynoted_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package simplynoted
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestSimplyNoted_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SIMPLYNOTED")
- inactiveSecret := testSecrets.MustGetField("SIMPLYNOTED_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a simplynoted secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_SimplyNoted,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a simplynoted secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_SimplyNoted,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("SimplyNoted.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("SimplyNoted.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/swiftype/swiftype/swiftype.go b/pkg/detectors/swiftype/swiftype/swiftype.go
deleted file mode 100644
index 83ac2f57ff90..000000000000
--- a/pkg/detectors/swiftype/swiftype/swiftype.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package swiftype
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"swiftype"}) + `\b([a-zA-z-0-9]{6}\_[a-zA-z-0-9]{6}\-[a-zA-z-0-9]{6})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"swiftype"}
-}
-
-// FromData will find and optionally verify Swiftype secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Swiftype,
- Raw: []byte(resMatch),
- }
-
- if verify {
- payload := strings.NewReader(`{"auth_token":"` + resMatch + `","q": "gatsby"}`)
- req, err := http.NewRequestWithContext(ctx, "GET", "https://search-api.swiftype.com/api/v1/engines/bookstore/document_types/books/search.json", payload)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/swiftype/swiftype/swiftype_test.go b/pkg/detectors/swiftype/swiftype/swiftype_test.go
deleted file mode 100644
index 916f458f2756..000000000000
--- a/pkg/detectors/swiftype/swiftype/swiftype_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package swiftype
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestSwiftype_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("SWIFTYPE")
- inactiveSecret := testSecrets.MustGetField("SWIFTYPE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a swiftype secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Swiftype,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a swiftype secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Swiftype,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Swiftype.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Swiftype.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/thousandeyes/thousandeyes/thousandeyes.go b/pkg/detectors/thousandeyes/thousandeyes/thousandeyes.go
deleted file mode 100644
index 9a7ece7c5ff9..000000000000
--- a/pkg/detectors/thousandeyes/thousandeyes/thousandeyes.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package thousandeyes
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"thousandeyes"}) + `\b([a-zA-Z0-9]{32})\b`)
- email = regexp.MustCompile(detectors.PrefixRegex([]string{"thousandeyes"}) + `\b([a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,12}.[a-zA-Z0-9]{2,5})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"thousandeyes"}
-}
-
-// FromData will find and optionally verify ThousandEyes secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- emailMatches := email.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- tokenPatMatch := strings.TrimSpace(match[1])
-
- for _, emailMatch := range emailMatches {
- if len(emailMatch) != 2 {
- continue
- }
-
- userPatMatch := strings.TrimSpace(emailMatch[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_ThousandEyes,
- Raw: []byte(tokenPatMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.thousandeyes.com/v6/endpoint-data/user-sessions/web.json", nil)
- if err != nil {
- continue
- }
- req.SetBasicAuth(userPatMatch, tokenPatMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/thousandeyes/thousandeyes/thousandeyes_test.go b/pkg/detectors/thousandeyes/thousandeyes/thousandeyes_test.go
deleted file mode 100644
index 6df8900cad6d..000000000000
--- a/pkg/detectors/thousandeyes/thousandeyes/thousandeyes_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package thousandeyes
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestThousandEyes_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("THOUSANDEYES")
- email := testSecrets.MustGetField("THOUSANDEYES_USER")
- inactiveSecret := testSecrets.MustGetField("THOUSANDEYES_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a thousandeyes secret %s within thousandeyes %s", secret, email)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ThousandEyes,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a thousandeyes secret %s within thousandeyes %s but not valid", inactiveSecret, email)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_ThousandEyes,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("ThousandEyes.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("ThousandEyes.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/travelpayouts/travelpayouts/travelpayouts.go b/pkg/detectors/travelpayouts/travelpayouts/travelpayouts.go
deleted file mode 100644
index 314a0879878a..000000000000
--- a/pkg/detectors/travelpayouts/travelpayouts/travelpayouts.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package travelpayouts
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"travelpayouts"}) + `\b([a-z0-9]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"travelpayouts"}
-}
-
-// FromData will find and optionally verify TravelPayouts secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_TravelPayouts,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("http://api.travelpayouts.com/v2/prices/latest?currency=usd&limit=5&token=%s", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/travelpayouts/travelpayouts/travelpayouts_test.go b/pkg/detectors/travelpayouts/travelpayouts/travelpayouts_test.go
deleted file mode 100644
index 7a40418fd09f..000000000000
--- a/pkg/detectors/travelpayouts/travelpayouts/travelpayouts_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package travelpayouts
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestTravelPayouts_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("TRAVELPAYOUTS")
- inactiveSecret := testSecrets.MustGetField("TRAVELPAYOUTS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a travelpayouts secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_TravelPayouts,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a travelpayouts secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_TravelPayouts,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("TravelPayouts.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("TravelPayouts.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/upwave/upwave/upwave.go b/pkg/detectors/upwave/upwave/upwave.go
deleted file mode 100644
index a5448f403117..000000000000
--- a/pkg/detectors/upwave/upwave/upwave.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package upwave
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"upwave"}) + `\b([0-9a-z]{32})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"upwave"}
-}
-
-// FromData will find and optionally verify Upwave secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Upwave,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.upwave.io/workspaces/", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Token %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/upwave/upwave/upwave_test.go b/pkg/detectors/upwave/upwave/upwave_test.go
deleted file mode 100644
index 02fe922a56c4..000000000000
--- a/pkg/detectors/upwave/upwave/upwave_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package upwave
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestUpwave_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("UPWAVE")
- inactiveSecret := testSecrets.MustGetField("UPWAVE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a upwave secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Upwave,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a upwave secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Upwave,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Upwave.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Upwave.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/versioneye/versioneye/versioneye.go b/pkg/detectors/versioneye/versioneye/versioneye.go
deleted file mode 100644
index bada2d0dbe46..000000000000
--- a/pkg/detectors/versioneye/versioneye/versioneye.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package versioneye
-
-import (
- "context"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"versioneye"}) + `\b([a-zA-Z0-9-]{40})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"versioneye"}
-}
-
-// FromData will find and optionally verify VersionEye secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_VersionEye,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://www.versioneye.com/api/v1/scans", nil)
- if err != nil {
- continue
- }
- req.Header.Add("apiKey", resMatch)
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/versioneye/versioneye/versioneye_test.go b/pkg/detectors/versioneye/versioneye/versioneye_test.go
deleted file mode 100644
index 7363a7b8384b..000000000000
--- a/pkg/detectors/versioneye/versioneye/versioneye_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package versioneye
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestVersionEye_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("VERSIONEYE")
- inactiveSecret := testSecrets.MustGetField("VERSIONEYE_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a versioneye secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_VersionEye,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a versioneye secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_VersionEye,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("VersionEye.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("VersionEye.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/viewneo/viewneo/viewneo.go b/pkg/detectors/viewneo/viewneo/viewneo.go
deleted file mode 100644
index 9e2a0746d360..000000000000
--- a/pkg/detectors/viewneo/viewneo/viewneo.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package viewneo
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"viewneo"}) + `\b([a-z0-9A-Z]{120,300}.[a-z0-9A-Z]{150,300}.[a-z0-9A-Z-_]{600,800})`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"viewneo"}
-}
-
-// FromData will find and optionally verify Viewneo secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Viewneo,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", "https://cloud.viewneo.com/api/v1.0/playlist", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", resMatch))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/viewneo/viewneo/viewneo_test.go b/pkg/detectors/viewneo/viewneo/viewneo_test.go
deleted file mode 100644
index ae2b55e4e96c..000000000000
--- a/pkg/detectors/viewneo/viewneo/viewneo_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package viewneo
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestViewneo_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("VIEWNEO")
- inactiveSecret := testSecrets.MustGetField("VIEWNEO_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a viewneo secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Viewneo,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a viewneo secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Viewneo,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Viewneo.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Viewneo.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/webscraper/webscraper/webscraper.go b/pkg/detectors/webscraper/webscraper/webscraper.go
deleted file mode 100644
index 466557409693..000000000000
--- a/pkg/detectors/webscraper/webscraper/webscraper.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package webscraper
-
-import (
- "context"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"webscraper"}) + `\b([a-zA-Z0-9]{60})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"webscraper"}
-}
-
-// FromData will find and optionally verify WebScraper secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_WebScraper,
- Raw: []byte(resMatch),
- }
-
- if verify {
- req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("https://api.webscraper.io/api/v1/sitemaps?api_token=%s", resMatch), nil)
- if err != nil {
- continue
- }
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/webscraper/webscraper/webscraper_test.go b/pkg/detectors/webscraper/webscraper/webscraper_test.go
deleted file mode 100644
index b8131a82e9bc..000000000000
--- a/pkg/detectors/webscraper/webscraper/webscraper_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package webscraper
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestWebScraper_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("WEBSCRAPER")
- inactiveSecret := testSecrets.MustGetField("WEBSCRAPER_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a webscraper secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_WebScraper,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a webscraper secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_WebScraper,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("WebScraper.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("WebScraper.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/detectors/worksnaps/worksnaps/worksnaps.go b/pkg/detectors/worksnaps/worksnaps/worksnaps.go
deleted file mode 100644
index 0df209b37a20..000000000000
--- a/pkg/detectors/worksnaps/worksnaps/worksnaps.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package worksnaps
-
-import (
- "context"
- b64 "encoding/base64"
- "fmt"
- "net/http"
- "regexp"
- "strings"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-type Scanner struct{}
-
-// Ensure the Scanner satisfies the interface at compile time
-var _ detectors.Detector = (*Scanner)(nil)
-
-var (
- client = common.SaneHttpClient()
-
- //Make sure that your group is surrounded in boundry characters such as below to reduce false positives
- keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"worksnaps"}) + `\b([0-9A-Za-z]{40})\b`)
-)
-
-// Keywords are used for efficiently pre-filtering chunks.
-// Use identifiers in the secret preferably, or the provider name.
-func (s Scanner) Keywords() []string {
- return []string{"worksnaps"}
-}
-
-// FromData will find and optionally verify Worksnaps secrets in a given set of bytes.
-func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) {
- dataStr := string(data)
-
- matches := keyPat.FindAllStringSubmatch(dataStr, -1)
-
- for _, match := range matches {
- if len(match) != 2 {
- continue
- }
- resMatch := strings.TrimSpace(match[1])
-
- s1 := detectors.Result{
- DetectorType: detectorspb.DetectorType_Worksnaps,
- Raw: []byte(resMatch),
- }
-
- if verify {
- data := fmt.Sprintf("%s:ignored", resMatch)
- sEnc := b64.StdEncoding.EncodeToString([]byte(data))
- req, err := http.NewRequestWithContext(ctx, "GET", "https://api.worksnaps.com/api/projects.xml", nil)
- if err != nil {
- continue
- }
- req.Header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
- res, err := client.Do(req)
- if err == nil {
- defer res.Body.Close()
- if res.StatusCode >= 200 && res.StatusCode < 300 {
- s1.Verified = true
- } else {
- //This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key
- if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {
- continue
- }
- }
- }
- }
-
- results = append(results, s1)
- }
-
- return detectors.CleanResults(results), nil
-}
diff --git a/pkg/detectors/worksnaps/worksnaps/worksnaps_test.go b/pkg/detectors/worksnaps/worksnaps/worksnaps_test.go
deleted file mode 100644
index 4defaafd37b2..000000000000
--- a/pkg/detectors/worksnaps/worksnaps/worksnaps_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-package worksnaps
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/kylelemons/godebug/pretty"
-
- "github.com/trufflesecurity/trufflehog/v3/pkg/common"
- "github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
- "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb"
-)
-
-func TestWorksnaps_FromChunk(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
- defer cancel()
- testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors2")
- if err != nil {
- t.Fatalf("could not get test secrets from GCP: %s", err)
- }
- secret := testSecrets.MustGetField("WORKSNAPS")
- inactiveSecret := testSecrets.MustGetField("WORKSNAPS_INACTIVE")
-
- type args struct {
- ctx context.Context
- data []byte
- verify bool
- }
- tests := []struct {
- name string
- s Scanner
- args args
- want []detectors.Result
- wantErr bool
- }{
- {
- name: "found, verified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a worksnaps secret %s within", secret)),
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Worksnaps,
- Verified: true,
- },
- },
- wantErr: false,
- },
- {
- name: "found, unverified",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte(fmt.Sprintf("You can find a worksnaps secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation
- verify: true,
- },
- want: []detectors.Result{
- {
- DetectorType: detectorspb.DetectorType_Worksnaps,
- Verified: false,
- },
- },
- wantErr: false,
- },
- {
- name: "not found",
- s: Scanner{},
- args: args{
- ctx: context.Background(),
- data: []byte("You cannot find the secret within"),
- verify: true,
- },
- want: nil,
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := Scanner{}
- got, err := s.FromData(tt.args.ctx, tt.args.verify, tt.args.data)
- if (err != nil) != tt.wantErr {
- t.Errorf("Worksnaps.FromData() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- for i := range got {
- if len(got[i].Raw) == 0 {
- t.Fatalf("no raw secret present: \n %+v", got[i])
- }
- got[i].Raw = nil
- }
- if diff := pretty.Compare(got, tt.want); diff != "" {
- t.Errorf("Worksnaps.FromData() %s diff: (-got +want)\n%s", tt.name, diff)
- }
- })
- }
-}
-
-func BenchmarkFromData(benchmark *testing.B) {
- ctx := context.Background()
- s := Scanner{}
- for name, data := range detectors.MustGetBenchmarkData() {
- benchmark.Run(name, func(b *testing.B) {
- for n := 0; n < b.N; n++ {
- s.FromData(ctx, false, data)
- }
- })
- }
-}
diff --git a/pkg/engine/defaults.go b/pkg/engine/defaults.go
index fab68e8df7bc..c6f5555aab0a 100644
--- a/pkg/engine/defaults.go
+++ b/pkg/engine/defaults.go
@@ -98,6 +98,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/censys"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/centralstationcrm"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/cexio"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/chartmogul"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/chatbot"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/chatfule"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/checio"
@@ -166,12 +167,14 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/deepgram"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/delighted"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/deputy"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/detectify"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/detectlanguage"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/dfuse"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/diffbot"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/digitaloceantoken"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/discordbottoken"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/discordwebhook"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/disqus"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/ditto"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/dnscheck"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/documo"
@@ -206,6 +209,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/fastlypersonaltoken"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/feedier"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/fetchrss"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/fibery"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/figmapersonalaccesstoken"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/fileio"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/finage"
@@ -225,6 +229,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/flutterwave"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/fmfw"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/formbucket"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/formcraft"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/formio"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/foursquare"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/frameio"
@@ -261,6 +266,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/graphhopper"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/groovehq"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/guardianapi"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/gumroad"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/gyazo"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/happi"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/happyscribe"
@@ -280,6 +286,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/hybiscus"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/hypertrack"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/iconfinder"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/iexapis"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/iexcloud"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/image4"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/imagekit"
@@ -369,6 +376,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/moonclerk"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/moosend"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/mrticktock"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/mux"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/myfreshworks"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/myintervals"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nasdaqdatalink"
@@ -381,6 +389,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nexmoapikey"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nftport"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nicereply"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nightfall"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nimble"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/nitro"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/noticeable"
@@ -408,12 +417,14 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/pagerdutyapikey"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/pandadoc"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/pandascore"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paperform"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paralleldots"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/parsehub"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/parsers"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/partnerstack"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/passbase"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/pastebin"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paydirtapp"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paymoapp"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paymongo"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/paypaloauth"
@@ -456,6 +467,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/rapidapi"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/rawg"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/razorpay"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/reachmail"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/readme"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/reallysimplesystems"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/rebrandly"
@@ -537,12 +549,14 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/sonarcloud"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/splunkobservabilitytoken"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/spoonacular"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/sportradar"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/sportsmonk"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/square"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/squareapp"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/squarespace"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/squareup"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/sslmate"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/statuscake"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/statuspage"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/statuspal"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/stitchdata"
@@ -599,6 +613,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/twitter"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/tyntec"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/typeform"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/typetalk"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/ubidots"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/unifyid"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/unplugg"
@@ -606,6 +621,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/upcdatabase"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/uplead"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/uploadcare"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/uptimerobot"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/upwave"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/uri"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/urlscan"
@@ -655,6 +671,7 @@ import (
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/zipbooks"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/zipcodeapi"
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors/zonkafeedback"
+ "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/zulipchat"
)
func DefaultDetectors() []detectors.Detector {
@@ -1338,5 +1355,22 @@ func DefaultDetectors() []detectors.Detector {
aha.Scanner{},
packagecloud.Scanner{},
cloudsmith.Scanner{},
+ nightfall.Scanner{},
+ mux.Scanner{},
+ statuscake.Scanner{},
+ formcraft.Scanner{},
+ sportradar.Scanner{},
+ paperform.Scanner{},
+ zulipchat.Scanner{},
+ iexapis.Scanner{},
+ detectify.Scanner{},
+ reachmail.Scanner{},
+ gumroad.Scanner{},
+ typetalk.Scanner{},
+ chartmogul.Scanner{},
+ fibery.Scanner{},
+ uptimerobot.Scanner{},
+ paydirtapp.Scanner{},
+ disqus.Scanner{},
}
}