main.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package main
  2. import (
  3. "os"
  4. "regexp"
  5. )
  6. // ExitClean : no leaks have been found
  7. const ExitClean = 0
  8. // ExitFailure : gitleaks has encountered an error or SIGINT
  9. const ExitFailure = 1
  10. // ExitLeaks : leaks are present in scanned repos
  11. const ExitLeaks = 2
  12. // package globals
  13. var (
  14. regexes map[string]*regexp.Regexp
  15. externalRegex []*regexp.Regexp
  16. stopWords []string
  17. base64Chars string
  18. hexChars string
  19. assignRegex *regexp.Regexp
  20. fileDiffRegex *regexp.Regexp
  21. opts *Options
  22. pwd string
  23. )
  24. func init() {
  25. base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
  26. hexChars = "1234567890abcdefABCDEF"
  27. stopWords = []string{"setting", "info", "env", "environment"}
  28. fileDiffRegex = regexp.MustCompile("diff --git a.+b/")
  29. assignRegex = regexp.MustCompile(`(=|:|:=|<-)`)
  30. regexes = map[string]*regexp.Regexp{
  31. "PKCS8": regexp.MustCompile("-----BEGIN PRIVATE KEY-----"),
  32. "RSA": regexp.MustCompile("-----BEGIN RSA PRIVATE KEY-----"),
  33. "DSA": regexp.MustCompile("-----BEGIN DSA PRIVATE KEY-----"),
  34. "SSH": regexp.MustCompile("-----BEGIN OPENSSH PRIVATE KEY-----"),
  35. "Facebook": regexp.MustCompile("(?i)facebook.*['\"][0-9a-f]{32}['\"]"),
  36. "Twitter": regexp.MustCompile("(?i)twitter.*['\"][0-9a-zA-Z]{35,44}['\"]"),
  37. "Github": regexp.MustCompile("(?i)github.*['\"][0-9a-zA-Z]{35,40}['\"]"),
  38. "AWS": regexp.MustCompile("AKIA[0-9A-Z]{16}"),
  39. "Reddit": regexp.MustCompile("(?i)reddit.*['\"][0-9a-zA-Z]{14}['\"]"),
  40. "Heroku": regexp.MustCompile("(?i)heroku.*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}"),
  41. }
  42. }
  43. func main() {
  44. args := os.Args[1:]
  45. opts = newOpts(args)
  46. owner := newOwner()
  47. os.Exit(owner.auditRepos())
  48. }