forked from quay/claircore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
registry.go
71 lines (62 loc) · 1.51 KB
/
registry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Package matchers holds a registry of default matchers.
package registry
import (
"context"
"errors"
"net/http"
"strings"
"sync"
"github.com/Panzer1119/claircore/libvuln/driver"
)
var pkg = struct {
sync.Mutex
fs map[string]driver.MatcherFactory
}{
fs: make(map[string]driver.MatcherFactory),
}
// Register registers an MatcherFactory.
//
// Register will panic if the same name is used twice.
func Register(name string, f driver.MatcherFactory) {
pkg.Lock()
defer pkg.Unlock()
if _, ok := pkg.fs[name]; ok {
panic("")
}
pkg.fs[name] = f
}
// Registered returns a new map populated with the registered MatcherFactories.
func Registered() map[string]driver.MatcherFactory {
pkg.Lock()
defer pkg.Unlock()
r := make(map[string]driver.MatcherFactory, len(pkg.fs))
for k, v := range pkg.fs {
r[k] = v
}
return r
}
// Configure calls the Configure method on all the passed-in
// MatcherFactories.
func Configure(ctx context.Context, fs map[string]driver.MatcherFactory, cfg map[string]driver.MatcherConfigUnmarshaler, c *http.Client) error {
if c == nil {
return errors.New("invalid *http.Client")
}
errd := false
var b strings.Builder
b.WriteString("matchers: errors configuring factories:")
for name, fac := range fs {
f, fOK := fac.(driver.MatcherConfigurable)
cf, cfOK := cfg[name]
if fOK && cfOK {
if err := f.Configure(ctx, cf, c); err != nil {
errd = true
b.WriteString("\n\t")
b.WriteString(err.Error())
}
}
}
if errd {
return errors.New(b.String())
}
return nil
}