|
|
@@ -79,7 +79,7 @@ type RegexTime struct {
|
|
|
|
|
|
// Metadata is a struct used to communicate metadata about an audit like timings and total commit counts.
|
|
|
type Metadata struct {
|
|
|
- mux sync.Mutex
|
|
|
+ mux *sync.Mutex
|
|
|
data map[string]interface{}
|
|
|
|
|
|
timings chan interface{}
|
|
|
@@ -103,6 +103,42 @@ func init() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// NewManager accepts options and returns a manager struct. The manager is a container for gitleaks configurations,
|
|
|
+// options and channel receivers.
|
|
|
+func NewManager(opts options.Options, cfg config.Config) (*Manager, error) {
|
|
|
+ cloneOpts, err := opts.CloneOptions()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ m := &Manager{
|
|
|
+ Opts: opts,
|
|
|
+ Config: cfg,
|
|
|
+ CloneOptions: cloneOpts,
|
|
|
+
|
|
|
+ stopChan: make(chan os.Signal, 1),
|
|
|
+ leakChan: make(chan Leak),
|
|
|
+ leakWG: &sync.WaitGroup{},
|
|
|
+ leakCache: make(map[string]bool),
|
|
|
+ metaWG: &sync.WaitGroup{},
|
|
|
+ metadata: Metadata{
|
|
|
+ RegexTime: make(map[string]int64),
|
|
|
+ timings: make(chan interface{}),
|
|
|
+ data: make(map[string]interface{}),
|
|
|
+ mux: new(sync.Mutex),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ signal.Notify(m.stopChan, os.Interrupt)
|
|
|
+
|
|
|
+ // start receiving leaks and metadata
|
|
|
+ go m.receiveLeaks()
|
|
|
+ go m.receiveMetadata()
|
|
|
+ go m.receiveInterrupt()
|
|
|
+
|
|
|
+ return m, nil
|
|
|
+}
|
|
|
+
|
|
|
// GetLeaks returns all available leaks
|
|
|
func (manager *Manager) GetLeaks() []Leak {
|
|
|
// need to wait for any straggling leaks
|
|
|
@@ -195,41 +231,6 @@ func (manager *Manager) RecordTime(t interface{}) {
|
|
|
manager.metadata.timings <- t
|
|
|
}
|
|
|
|
|
|
-// NewManager accepts options and returns a manager struct. The manager is a container for gitleaks configurations,
|
|
|
-// options and channel receivers.
|
|
|
-func NewManager(opts options.Options, cfg config.Config) (*Manager, error) {
|
|
|
- cloneOpts, err := opts.CloneOptions()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- m := &Manager{
|
|
|
- Opts: opts,
|
|
|
- Config: cfg,
|
|
|
- CloneOptions: cloneOpts,
|
|
|
-
|
|
|
- stopChan: make(chan os.Signal, 1),
|
|
|
- leakChan: make(chan Leak),
|
|
|
- leakWG: &sync.WaitGroup{},
|
|
|
- leakCache: make(map[string]bool),
|
|
|
- metaWG: &sync.WaitGroup{},
|
|
|
- metadata: Metadata{
|
|
|
- RegexTime: make(map[string]int64),
|
|
|
- timings: make(chan interface{}),
|
|
|
- data: make(map[string]interface{}),
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
- signal.Notify(m.stopChan, os.Interrupt)
|
|
|
-
|
|
|
- // start receiving leaks and metadata
|
|
|
- go m.receiveLeaks()
|
|
|
- go m.receiveMetadata()
|
|
|
- go m.receiveInterrupt()
|
|
|
-
|
|
|
- return m, nil
|
|
|
-}
|
|
|
-
|
|
|
// DebugOutput logs metadata and other messages that occurred during a gitleaks audit
|
|
|
func (manager *Manager) DebugOutput() {
|
|
|
log.Debugf("-------------------------\n")
|