@@ -29,7 +29,9 @@ import (
2929
3030 "github.com/gitleaks/go-gitdiff/gitdiff"
3131 "github.com/rs/zerolog"
32+ "github.com/spf13/viper"
3233 "github.com/zricethezav/gitleaks/v8/cmd/scm"
34+ gitleaks_config "github.com/zricethezav/gitleaks/v8/config"
3335 gitleaks "github.com/zricethezav/gitleaks/v8/detect"
3436 gitleaks_log "github.com/zricethezav/gitleaks/v8/logging"
3537)
@@ -562,10 +564,10 @@ func preReceiveSecrets(ctx *preReceiveContext, oldCommitID, newCommitID string,
562564 if newCommitID == ctx .Repo .GetObjectFormat ().EmptyObjectID ().String () {
563565 return
564566 }
565-
566- detector , err := gitleaks . NewDetectorDefaultConfig ( )
567+ config , _ , _ := git . NewCommand ( "show" ). AddDynamicArguments ( repo . DefaultBranch + ":.gitleaks.toml" ). RunStdString ( ctx , & git. RunOpts { Dir : repo . RepoPath (), Env : ctx . env })
568+ detector , err := newDetector ( config )
567569 if err != nil {
568- ctx .Status (http .StatusTeapot )
570+ ctx .JSON (http .StatusTeapot , private. Response { Err : err . Error (), UserMsg : err . Error ()} )
569571 return
570572 }
571573
@@ -640,3 +642,26 @@ func (g *giteacmd) Wait() (err error) {
640642func init () {
641643 gitleaks_log .Logger = zerolog .Nop ()
642644}
645+
646+ func newDetector (config string ) (* gitleaks.Detector , error ) {
647+ viper .SetConfigType ("toml" )
648+ var err error
649+ if len (config ) > 0 {
650+ err = viper .ReadConfig (strings .NewReader (config ))
651+ } else {
652+ err = viper .ReadConfig (strings .NewReader (gitleaks_config .DefaultConfig ))
653+ }
654+ if err != nil {
655+ return nil , err
656+ }
657+ var vc gitleaks_config.ViperConfig
658+ err = viper .Unmarshal (& vc )
659+ if err != nil {
660+ return nil , err
661+ }
662+ cfg , err := vc .Translate ()
663+ if err != nil {
664+ return nil , err
665+ }
666+ return gitleaks .NewDetector (cfg ), nil
667+ }
0 commit comments