75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/zricethezav/gitleaks/v8/logging"
|
|
"github.com/zricethezav/gitleaks/v8/sources"
|
|
)
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(directoryCmd)
|
|
directoryCmd.Flags().Bool("follow-symlinks", false, "scan files that are symlinks to other files")
|
|
}
|
|
|
|
var directoryCmd = &cobra.Command{
|
|
Use: "dir [flags] [path]",
|
|
Aliases: []string{"file", "directory"},
|
|
Short: "scan directories or files for secrets",
|
|
Run: runDirectory,
|
|
}
|
|
|
|
func runDirectory(cmd *cobra.Command, args []string) {
|
|
// grab source
|
|
source := "."
|
|
if len(args) == 1 {
|
|
source = args[0]
|
|
if source == "" {
|
|
source = "."
|
|
}
|
|
}
|
|
|
|
initConfig(source)
|
|
initDiagnostics()
|
|
var err error
|
|
|
|
// setup config (aka, the thing that defines rules)
|
|
cfg := Config(cmd)
|
|
|
|
// start timer
|
|
start := time.Now()
|
|
|
|
detector := Detector(cmd, cfg, source)
|
|
|
|
// set follow symlinks flag
|
|
if detector.FollowSymlinks, err = cmd.Flags().GetBool("follow-symlinks"); err != nil {
|
|
logging.Fatal().Err(err).Send()
|
|
}
|
|
|
|
// set exit code
|
|
exitCode, err := cmd.Flags().GetInt("exit-code")
|
|
if err != nil {
|
|
logging.Fatal().Err(err).Msg("could not get exit code")
|
|
}
|
|
|
|
findings, err := detector.DetectSource(
|
|
cmd.Context(),
|
|
&sources.Files{
|
|
Config: &cfg,
|
|
FollowSymlinks: detector.FollowSymlinks,
|
|
MaxFileSize: detector.MaxTargetMegaBytes * 1_000_000,
|
|
Path: source,
|
|
Sema: detector.Sema,
|
|
MaxArchiveDepth: detector.MaxArchiveDepth,
|
|
},
|
|
)
|
|
|
|
if err != nil {
|
|
logging.Error().Err(err).Msg("failed scan directory")
|
|
}
|
|
|
|
findingSummaryAndExit(detector, findings, exitCode, start, err)
|
|
}
|