protect.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package cmd
  2. import (
  3. "time"
  4. "github.com/rs/zerolog/log"
  5. "github.com/spf13/cobra"
  6. "github.com/zricethezav/gitleaks/v8/detect"
  7. "github.com/zricethezav/gitleaks/v8/report"
  8. )
  9. func init() {
  10. protectCmd.Flags().Bool("staged", false, "detect secrets in a --staged state")
  11. rootCmd.AddCommand(protectCmd)
  12. }
  13. var protectCmd = &cobra.Command{
  14. Use: "protect",
  15. Short: "protect secrets in code",
  16. Run: runProtect,
  17. }
  18. func runProtect(cmd *cobra.Command, args []string) {
  19. initConfig()
  20. var err error
  21. // setup config (aka, the thing that defines rules)
  22. cfg := Config(cmd)
  23. exitCode, _ := cmd.Flags().GetInt("exit-code")
  24. staged, _ := cmd.Flags().GetBool("staged")
  25. source, err := cmd.Flags().GetString("source")
  26. if err != nil {
  27. log.Fatal().Err(err).Msg("")
  28. }
  29. start := time.Now()
  30. detector := Detector(cmd, cfg, source)
  31. // get log options for git scan
  32. logOpts, err := cmd.Flags().GetString("log-opts")
  33. if err != nil {
  34. log.Fatal().Err(err).Msg("")
  35. }
  36. // start git scan
  37. var findings []report.Finding
  38. if staged {
  39. findings, err = detector.DetectGit(source, logOpts, detect.ProtectStagedType)
  40. } else {
  41. findings, err = detector.DetectGit(source, logOpts, detect.ProtectType)
  42. }
  43. findingSummaryAndExit(findings, cmd, cfg, exitCode, start, err)
  44. }