|
|
@@ -20,6 +20,7 @@ type LeakElem struct {
|
|
|
Commit string `json:"commit"`
|
|
|
}
|
|
|
|
|
|
+// start clones and determines if there are any leaks
|
|
|
func start(opts *Options) {
|
|
|
fmt.Printf("\nEvaluating \x1b[37;1m%s\x1b[0m...\n", opts.RepoURL)
|
|
|
c := make(chan os.Signal, 2)
|
|
|
@@ -40,7 +41,7 @@ func start(opts *Options) {
|
|
|
os.Exit(1)
|
|
|
}()
|
|
|
|
|
|
- report := getLeaks(repoName)
|
|
|
+ report := getLeaks(repoName, opts.Concurrency)
|
|
|
if len(report) == 0 {
|
|
|
fmt.Printf("No Leaks detected for \x1b[35;2m%s\x1b[0m...\n\n", opts.RepoURL)
|
|
|
}
|
|
|
@@ -63,6 +64,7 @@ func getLocalRepoName(url string) string {
|
|
|
return name
|
|
|
}
|
|
|
|
|
|
+// cleanup deletes the repo
|
|
|
func cleanup(repoName string) {
|
|
|
if err := os.Chdir(appRoot); err != nil {
|
|
|
log.Fatalf("failed cleaning up repo. Does the repo exist? %v", err)
|
|
|
@@ -73,18 +75,22 @@ func cleanup(repoName string) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func getLeaks(repoName string) []LeakElem {
|
|
|
+// getLeaks will attempt to find gitleaks
|
|
|
+func getLeaks(repoName string, concurrency int) []LeakElem {
|
|
|
var (
|
|
|
out []byte
|
|
|
err error
|
|
|
commitWG sync.WaitGroup
|
|
|
gitLeakReceiverWG sync.WaitGroup
|
|
|
- concurrent = 100
|
|
|
- semaphoreChan = make(chan struct{}, concurrent)
|
|
|
gitLeaks = make(chan LeakElem)
|
|
|
report []LeakElem
|
|
|
)
|
|
|
|
|
|
+ if concurrency == 0 {
|
|
|
+ concurrency = 100
|
|
|
+ }
|
|
|
+ semaphoreChan := make(chan struct{}, concurrency)
|
|
|
+
|
|
|
go func(commitWG *sync.WaitGroup, gitLeakReceiverWG *sync.WaitGroup) {
|
|
|
for gitLeak := range gitLeaks {
|
|
|
fmt.Println(gitLeak)
|