Skip to content

Commit

Permalink
Merge 0439e23 into 54a328d
Browse files Browse the repository at this point in the history
  • Loading branch information
dineshba committed Jun 3, 2020
2 parents 54a328d + 0439e23 commit f745747
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 132 deletions.
32 changes: 13 additions & 19 deletions checksumcalculator/checksumcalculator.go
Expand Up @@ -2,7 +2,6 @@ package checksumcalculator

import (
"fmt"
"os"
"talisman/gitrepo"
"talisman/talismanrc"
"talisman/utility"
Expand All @@ -11,26 +10,21 @@ import (
)

type ChecksumCalculator struct {
fileNamePatterns []string
gitAdditions []gitrepo.Addition
}

//NewChecksumCalculator returns new instance of the CheckSumDetector
func NewChecksumCalculator(patterns []string) *ChecksumCalculator {
cc := ChecksumCalculator{fileNamePatterns: patterns}
func NewChecksumCalculator(gitAdditions []gitrepo.Addition) *ChecksumCalculator {
cc := ChecksumCalculator{gitAdditions: gitAdditions}
return &cc
}

//SuggestTalismanRC returns the suggestion for .talismanrc format
func (cc *ChecksumCalculator) SuggestTalismanRC() string {
wd, _ := os.Getwd()
repo := gitrepo.RepoLocatedAt(wd)
gitTrackedFilesAsAdditions := repo.TrackedFilesAsAdditions()
//Adding staged files for calculation
gitTrackedFilesAsAdditions = append(gitTrackedFilesAsAdditions, repo.StagedAdditions()...)
func (cc *ChecksumCalculator) SuggestTalismanRC(fileNamePatterns []string) string {
var fileIgnoreConfigs []talismanrc.FileIgnoreConfig
result := ""
for _, pattern := range cc.fileNamePatterns {
collectiveChecksum := cc.calculateCollectiveChecksumForPattern(pattern, gitTrackedFilesAsAdditions)
for _, pattern := range fileNamePatterns {
collectiveChecksum := cc.CalculateCollectiveChecksumForPattern(pattern)
if collectiveChecksum != "" {
fileIgnoreConfig := talismanrc.FileIgnoreConfig{FileName: pattern, Checksum: collectiveChecksum, IgnoreDetectors: []string{}}
fileIgnoreConfigs = append(fileIgnoreConfigs, fileIgnoreConfig)
Expand All @@ -45,18 +39,18 @@ func (cc *ChecksumCalculator) SuggestTalismanRC() string {
return result
}

func (cc *ChecksumCalculator) calculateCollectiveChecksumForPattern(fileNamePattern string, additions []gitrepo.Addition) string {
var patternpaths []string
func (cc *ChecksumCalculator) CalculateCollectiveChecksumForPattern(fileNamePattern string) string {
var patternPaths []string
currentCollectiveChecksum := ""
for _, addition := range additions {
for _, addition := range cc.gitAdditions {
if addition.Matches(fileNamePattern) {
patternpaths = append(patternpaths, string(addition.Path))
patternPaths = append(patternPaths, string(addition.Path))
}
}
// Calculate current collective checksum
patternpaths = utility.UniqueItems(patternpaths)
if len(patternpaths) != 0 {
currentCollectiveChecksum = utility.CollectiveSHA256Hash(patternpaths)
patternPaths = utility.UniqueItems(patternPaths)
if len(patternPaths) != 0 {
currentCollectiveChecksum = utility.CollectiveSHA256Hash(patternPaths)
}
return currentCollectiveChecksum
}
33 changes: 0 additions & 33 deletions detector/checksum_compare.go
Expand Up @@ -25,39 +25,6 @@ func (cc *ChecksumCompare) IsScanNotRequired(addition gitrepo.Addition) bool {
currentCollectiveChecksum = utility.CollectiveSHA256Hash([]string{ignore.FileName})
declaredCheckSum = ignore.Checksum
}

}
return currentCollectiveChecksum == declaredCheckSum

}

//FilterIgnoresBasedOnChecksums filters the file ignores from the talismanrc.TalismanRC which doesn't have any checksum value or having mismatched checksum value from the .talsimanrc
func (cc *ChecksumCompare) FilterIgnoresBasedOnChecksums() talismanrc.TalismanRC {
finalIgnores := []talismanrc.FileIgnoreConfig{}
for _, ignore := range cc.ignoreConfig.FileIgnoreConfig {
currentCollectiveChecksum := cc.calculateCollectiveChecksumForPattern(ignore.FileName, cc.additions)
// Compare with previous checksum from talismanrc.FileIgnoreConfig
if ignore.Checksum == currentCollectiveChecksum {
finalIgnores = append(finalIgnores, ignore)
}
}
rc := talismanrc.TalismanRC{}
rc.FileIgnoreConfig = finalIgnores
return rc
}

func (cc *ChecksumCompare) calculateCollectiveChecksumForPattern(fileNamePattern string, additions []gitrepo.Addition) string {
var patternpaths []string
currentCollectiveChecksum := ""
for _, addition := range additions {
if addition.Matches(fileNamePattern) {
patternpaths = append(patternpaths, string(addition.Path))
}
}
// Calculate current collective checksum
patternpaths = utility.UniqueItems(patternpaths)
if len(patternpaths) != 0 {
currentCollectiveChecksum = utility.CollectiveSHA256Hash(patternpaths)
}
return currentCollectiveChecksum
}
73 changes: 0 additions & 73 deletions detector/checksum_compare_test.go
@@ -1,85 +1,12 @@
package detector

import (
"talisman/gitrepo"
"talisman/talismanrc"
"talisman/utility"
"testing"

"github.com/stretchr/testify/assert"
)

var talismanRCWithInCorrectChecksum = `
fileignoreconfig:
- filename : 'some_file.pem'
checksum : '87139cc4d975333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac'
ignore_detectors : []
`

var talismanRCWithCorrectChecksum = `
fileignoreconfig:
- filename : 'some_file.pem'
checksum : '87139cc4d975333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac'
ignore_detectors : []
- filename : 'test/some_file.pem'
checksum : '25bd31a28bf9d4e06327f1c4a5cab2260574ae508803f66adcc393350e994866'
ignore_detectors : []
`

var talismanRCWithOneCorrectChecksum = `
fileignoreconfig:
- filename : 'some_file.pem'
checksum : '87139cc4d975333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac'
ignore_detectors : []
- filename : 'test/some1_file.pem'
checksum : '87139cc4d975333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac'
ignore_detectors : []
`

func TestShouldConsiderBothFilesForDetection(t *testing.T) {
rc := talismanrc.NewTalismanRC([]byte(talismanRCWithInCorrectChecksum))
addition1 := gitrepo.NewAddition("some_file.pem", make([]byte, 0))
addition2 := gitrepo.NewAddition("test/some_file.pem", make([]byte, 0))
cc := NewChecksumCompare([]gitrepo.Addition{addition1, addition2}, rc)

filteredRC := cc.FilterIgnoresBasedOnChecksums()

assert.Len(t, filteredRC.FileIgnoreConfig, 0, "Should return empty ignores and detectors should scan both files")
}

func TestShouldNotConsiderBothFilesForDetection(t *testing.T) {
addition1 := gitrepo.NewAddition("some_file.pem", make([]byte, 0))
addition2 := gitrepo.NewAddition("test/some_file.pem", make([]byte, 0))
rc := talismanrc.NewTalismanRC([]byte(talismanRCWithCorrectChecksum))
cc := NewChecksumCompare([]gitrepo.Addition{addition1, addition2}, rc)

filteredRC := cc.FilterIgnoresBasedOnChecksums()

assert.Len(t, filteredRC.FileIgnoreConfig, 1, "Should return 1 ignore/s (some_file.pem) which detectors should honor")
}

func TestShouldConsiderOneFileForDetection(t *testing.T) {
addition1 := gitrepo.NewAddition("some_file.pem", make([]byte, 0))
addition2 := gitrepo.NewAddition("test/some1_file.pem", make([]byte, 0))
rc := talismanrc.NewTalismanRC([]byte(talismanRCWithOneCorrectChecksum))
cc := NewChecksumCompare([]gitrepo.Addition{addition1, addition2}, rc)

filteredRC := cc.FilterIgnoresBasedOnChecksums()

assert.Len(t, filteredRC.FileIgnoreConfig, 1, "Should return 1 ignore and detectors should scan that file")
}

func TestShouldConsiderBothFilesForDetectionIfTalismanRCIsEmpty(t *testing.T) {
addition1 := gitrepo.NewAddition("some_file.pem", make([]byte, 0))
addition2 := gitrepo.NewAddition("test/some_file.pem", make([]byte, 0))
rc := talismanrc.NewTalismanRC([]byte{})
cc := NewChecksumCompare([]gitrepo.Addition{addition1, addition2}, rc)

filteredRC := cc.FilterIgnoresBasedOnChecksums()

assert.Len(t, filteredRC.FileIgnoreConfig, 0, "Should return empty ignores and detectors should scan both files")
}

func TestShouldReturnCorrectFileHash(t *testing.T) {
checksumSomeFile := utility.CollectiveSHA256Hash([]string{"some_file.pem"})
checksumTestSomeFile := utility.CollectiveSHA256Hash([]string{"test/some_file.pem"})
Expand Down
5 changes: 0 additions & 5 deletions detector/detector.go
@@ -1,7 +1,6 @@
package detector

import (
"os"
"talisman/gitrepo"
"talisman/talismanrc"
)
Expand Down Expand Up @@ -44,10 +43,6 @@ func (dc *Chain) AddDetector(d Detector) *Chain {
//Test validates the additions against each detector in the chain.
//The results are passed in from detector to detector and thus collect all errors from all detectors
func (dc *Chain) Test(additions []gitrepo.Addition, ignoreConfig *talismanrc.TalismanRC, result *DetectionResults) {
wd, _ := os.Getwd()
repo := gitrepo.RepoLocatedAt(wd)
gitTrackedFilesAsAdditions := repo.TrackedFilesAsAdditions()
gitTrackedFilesAsAdditions = append(gitTrackedFilesAsAdditions, additions...)
for _, v := range dc.detectors {
v.Test(additions, ignoreConfig, result)
}
Expand Down
10 changes: 8 additions & 2 deletions runner.go
Expand Up @@ -3,6 +3,7 @@ package main
import (
"fmt"
"log"
"os"
"talisman/checksumcalculator"
"talisman/detector"
"talisman/gitrepo"
Expand Down Expand Up @@ -65,8 +66,13 @@ func (r *Runner) Scan(reportDirectory string) int {
//RunChecksumCalculator runs the checksum calculator against the patterns given as input
func (r *Runner) RunChecksumCalculator(fileNamePatterns []string) int {
exitStatus := 1
cc := checksumcalculator.NewChecksumCalculator(fileNamePatterns)
rcSuggestion := cc.SuggestTalismanRC()
wd, _ := os.Getwd()
repo := gitrepo.RepoLocatedAt(wd)
gitTrackedFilesAsAdditions := repo.TrackedFilesAsAdditions()
//Adding staged files for calculation
gitTrackedFilesAsAdditions = append(gitTrackedFilesAsAdditions, repo.StagedAdditions()...)
cc := checksumcalculator.NewChecksumCalculator(gitTrackedFilesAsAdditions)
rcSuggestion := cc.SuggestTalismanRC(fileNamePatterns)
if rcSuggestion != "" {
fmt.Print(rcSuggestion)
exitStatus = 0
Expand Down

0 comments on commit f745747

Please sign in to comment.