leaks.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. // TODO https://medium.com/@sebdah/go-best-practices-error-handling-2d15e1f0c5ee
  3. // implement better error handling
  4. // Commit is so and so
  5. /*
  6. // start kicks off the audit
  7. func start(repos []Repo, owner *Owner, opts *Options) error {
  8. var (
  9. report []Leak
  10. err error
  11. )
  12. defer rmTmpDirs(owner, opts)
  13. // interrupt handling
  14. c := make(chan os.Signal, 2)
  15. signal.Notify(c, os.Interrupt, syscall.SIGTERM)
  16. go func() {
  17. <-c
  18. rmTmpDirs(owner, opts)
  19. os.Exit(1)
  20. }()
  21. // run checks on repos
  22. for _, repo := range repos {
  23. dotGitPath := filepath.Join(repo.path, ".git")
  24. if _, err := os.Stat(dotGitPath); err == nil {
  25. if err := os.Chdir(fmt.Sprintf(repo.path)); err != nil {
  26. log.Fatal(err)
  27. }
  28. // use pre-cloned repo
  29. fmt.Printf("Checking \x1b[37;1m%s\x1b[0m...\n", repo.url)
  30. err = exec.Command("git", "fetch").Run()
  31. } else {
  32. // no repo present, clone it
  33. if err := os.Chdir(fmt.Sprintf(owner.path)); err != nil {
  34. log.Fatal(err)
  35. }
  36. fmt.Printf("Cloning \x1b[37;1m%s\x1b[0m...\n", repo.url)
  37. err = exec.Command("git", "clone", repo.url).Run()
  38. }
  39. if err != nil {
  40. log.Printf("failed to fetch repo %v", err)
  41. return nil
  42. }
  43. report, err = audit(&repo, opts)
  44. if err != nil {
  45. return nil
  46. }
  47. if len(report) == 0 {
  48. fmt.Printf("No Leaks detected for \x1b[35;2m%s\x1b[0m...\n", repo.url)
  49. }
  50. if opts.EnableJSON && len(report) != 0 {
  51. writeReport(report, repo)
  52. }
  53. }
  54. return nil
  55. }
  56. */
  57. // Used by start, writeReport will generate a report and write it out to
  58. // $GITLEAKS_HOME/report/<owner>/<repo>. No report will be generated if
  59. // no leaks have been found