Просмотр исходного кода

Merge pull request #39 from zricethezav/since_commit

Since commit
Zachary Rice 8 лет назад
Родитель
Сommit
9393f06d19
3 измененных файлов с 36 добавлено и 26 удалено
  1. 11 10
      README.md
  2. 7 5
      leaks.go
  3. 18 11
      options.go

+ 11 - 10
README.md

@@ -38,18 +38,19 @@ Gitleaks scans all lines of all commits and checks if there are any regular expr
 
 #### Help
 ```
-usage: gitleaks [options] <git url>
+usage: gitleaks [options] <url>
 
 Options:
-	-c 			Concurrency factor (default is 10)
-	-u --user 		Git user url
-	-r --repo 		Git repo url
-	-o --org 		Git organization url
-	-s --strict 		Strict mode uses stopwords in config.yml
-	-b --b64Entropy 	Base64 entropy cutoff (default is 70)
-	-x --hexEntropy  	Hex entropy cutoff (default is 40)
-	-e --entropy	        Enable entropy
-	-h --help 		Display this message
+ -c                     Concurrency factor (default is 10)
+ -u --user              Git user url
+ -r --repo              Git repo url
+ -o --org               Git organization url
+ -s --since             Scan until this commit (SHA)
+ -b --b64Entropy        Base64 entropy cutoff (default is 70)
+ -x --hexEntropy        Hex entropy cutoff (default is 40)
+ -e --entropy           Enable entropy
+ --strict               Enables stopwords
+ -h --help              Display this message
 ```
 NOTE: your mileage may vary so if you aren't getting the results you expected try updating the regexes to fit your needs or try tweaking the entropy cutoffs and stopwords. Entropy cutoff for base64 alphabets seemed to give good results around 70 and hex alphabets seemed to give good results around 40. Entropy is calculated using [Shannon entropy](http://www.bearcave.com/misl/misl_tech/wavelets/compression/shannon.html).
 

+ 7 - 5
leaks.go

@@ -108,19 +108,21 @@ func getLeaks(repoName string, opts *Options) []LeakElem {
 	}
 
 	commits := bytes.Split(out, []byte("\n"))
-	commitWG.Add(len(commits))
 	for _, currCommitB := range commits {
 		currCommit := string(currCommitB)
+		if currCommit == "" {
+			continue
+		}
+		if currCommit == opts.SinceCommit {
+			break
+		}
 
+		commitWG.Add(1)
 		go func(currCommit string, repoName string, commitWG *sync.WaitGroup,
 			gitLeakReceiverWG *sync.WaitGroup) {
 
 			defer commitWG.Done()
 
-			if currCommit == "" {
-				return
-			}
-
 			if err := os.Chdir(fmt.Sprintf("%s/%s", appRoot, repoName)); err != nil {
 				log.Fatal(err)
 			}

+ 18 - 11
options.go

@@ -9,15 +9,16 @@ import (
 const usage = `usage: gitleaks [options] <url>
 
 Options:
-	-c 			Concurrency factor (default is 10)
-	-u --user 		Git user url
-	-r --repo 		Git repo url
-	-o --org 		Git organization url
-	-s --strict 		Strict mode uses stopwords in config.yml 
-	-b --b64Entropy 	Base64 entropy cutoff (default is 70)
-	-x --hexEntropy  	Hex entropy cutoff (default is 40)
-	-e --entropy	Enable entropy		
-	-h --help 		Display this message
+ -c 			Concurrency factor (default is 10)
+ -u --user 		Git user url
+ -r --repo 		Git repo url
+ -o --org 		Git organization url
+ -s --since 		Commit to stop at
+ -b --b64Entropy 	Base64 entropy cutoff (default is 70)
+ -x --hexEntropy  	Hex entropy cutoff (default is 40)
+ -e --entropy		Enable entropy		
+ -h --help 		Display this message
+ --strict 		Enables stopwords
 `
 
 // Options for gitleaks
@@ -30,6 +31,7 @@ type Options struct {
 	RepoURL          string
 	Strict           bool
 	Entropy          bool
+	SinceCommit      string
 }
 
 // help prints the usage string and exits
@@ -73,10 +75,16 @@ func parseOptions(args []string) *Options {
 		Entropy:          false,
 	}
 
+	if len(args) == 0 {
+		help()
+	}
+
 	for i := 0; i < len(args); i++ {
 		arg := args[i]
 		switch arg {
-		case "-s", "--strict":
+		case "-s", "--since":
+			opts.SinceCommit = optionsNextString(args, &i)
+		case "--strict":
 			opts.Strict = true
 		case "-b", "--b64Entropy":
 			opts.B64EntropyCutoff = optionsNextInt(args, &i)
@@ -102,7 +110,6 @@ func parseOptions(args []string) *Options {
 			} else {
 				fmt.Printf("Uknown option %s\n\n", arg)
 				help()
-				return nil
 			}
 		}
 	}