diff --git a/lib/reporting/report_test.go b/lib/reporting/report_test.go index 7a106487..38a8fd7e 100644 --- a/lib/reporting/report_test.go +++ b/lib/reporting/report_test.go @@ -84,7 +84,7 @@ var ( // sarif results result1Sarif = Results{ Message: Message{ - Text: messageText(result1.RuleID, result1.Source), + Text: createMessageText(result1.RuleID, result1.Source), }, RuleId: ruleID1, Locations: []Locations{ @@ -115,7 +115,7 @@ var ( } result2Sarif = Results{ Message: Message{ - Text: messageText(result2.RuleID, result2.Source), + Text: createMessageText(result2.RuleID, result2.Source), }, RuleId: ruleID2, Locations: []Locations{ @@ -146,7 +146,7 @@ var ( } result3Sarif = Results{ Message: Message{ - Text: messageText(result3.RuleID, result3.Source), + Text: createMessageText(result3.RuleID, result3.Source), }, RuleId: ruleID1, Locations: []Locations{ diff --git a/lib/reporting/sarif.go b/lib/reporting/sarif.go index 261e23ef..1a9b8025 100644 --- a/lib/reporting/sarif.go +++ b/lib/reporting/sarif.go @@ -68,7 +68,15 @@ func hasNoResults(report *Report) bool { return len(report.Results) == 0 } -func messageText(ruleName string, filePath string) string { +func createMessageText(ruleName string, filePath string) string { + // maintain only the filename if the scan target is git + if strings.HasPrefix(filePath, "git show ") { + filePathParts := strings.SplitN(filePath, ":", 2) + if len(filePathParts) == 2 { + filePath = filePathParts[1] + } + } + return fmt.Sprintf("%s has detected secret for file %s.", ruleName, filePath) } @@ -85,7 +93,7 @@ func getResults(report *Report) []Results { for _, secret := range secrets { r := Results{ Message: Message{ - Text: messageText(secret.RuleID, secret.Source), + Text: createMessageText(secret.RuleID, secret.Source), }, RuleId: secret.RuleID, Locations: getLocation(secret), diff --git a/lib/reporting/sarif_test.go b/lib/reporting/sarif_test.go new file mode 100644 index 00000000..3b903810 --- /dev/null +++ b/lib/reporting/sarif_test.go @@ -0,0 +1,53 @@ +package reporting + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCreateMessageText(t *testing.T) { + ruleName := "Test Rule" + messagePrefix := ruleName + " has detected secret for file %s." + + tests := []struct { + Name string + FilePath string + ExpectedMessage string + }{ + { + Name: "Filesystem file name", + FilePath: "folder/filename.txt", + ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename.txt"), + }, + { + Name: "Simple git filename", + FilePath: "git show 1a9f3c87b4d029f54e8c72d8b11a78f6a3c29d2e:folder/filename.txt", + ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename.txt"), + }, + { + Name: "Broken git file name with no commit hash", + FilePath: "git show folder/filename.txt", + ExpectedMessage: fmt.Sprintf(messagePrefix, "git show folder/filename.txt"), + }, + { + Name: "Git file name with one colon character", + FilePath: "git show d8e914f06d8d4494bd4f9ab2a2c9c88f78ef25ad:folder/filename:secondpart.txt", + ExpectedMessage: fmt.Sprintf(messagePrefix, "folder/filename:secondpart.txt"), + }, + { + Name: "Git file name with multiple colon character", + FilePath: "git show a73b5cf94f0b29e1cc6e71a092f6b8ebc1d0e002:folder:secondfolderpart/filename:secondpart.txt", + ExpectedMessage: fmt.Sprintf(messagePrefix, "folder:secondfolderpart/filename:secondpart.txt"), + }, + } + + for _, tt := range tests { + t.Run(tt.Name, func(t *testing.T) { + message := createMessageText(ruleName, tt.FilePath) + fmt.Printf("%v", message) + assert.Equal(t, tt.ExpectedMessage, message) + }) + } +}