-
-
Notifications
You must be signed in to change notification settings - Fork 283
/
excludes.go
71 lines (58 loc) · 1.48 KB
/
excludes.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 config
import (
"regexp"
"strings"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func init() {
zerolog.SetGlobalLevel(zerolog.FatalLevel)
}
// RxMarker indicate exclude flag is a regular expression.
const rxMarker = "rx:"
// RegExp defined regex to check if exclude is a regex or plain string.
var regExp = regexp.MustCompile(`\A` + rxMarker)
type (
// Exclude represents a collection of excludes items.
// This can be a straight string match of regex using an rx: prefix.
Exclude []string
// Excludes represents a set of resources that should be excluded
// from the sanitizer.
Excludes map[string]Exclude
)
func newExcludes() Excludes {
return Excludes{}
}
// ShouldExclude checks if a given named resource should be excluded.
func (e Excludes) ShouldExclude(res, name string) bool {
// Not mentioned in config. Allow all
v, ok := e[res]
if !ok {
return false
}
return v.ShouldExclude(name)
}
// ShouldExclude checks if a given named should be excluded.
func (e Exclude) ShouldExclude(name string) bool {
for _, n := range e {
if !isRegex(n) {
if n == name {
return true
}
continue
}
rx, err := regexp.Compile(`\A` + strings.Replace(n, rxMarker, "", 1))
if err != nil {
log.Error().Err(err).Msgf("Invalid regexp `%s found in yaml. Skipping!", n)
continue
}
if rx.MatchString(name) {
return true
}
}
return false
}
// IsRegex check if rx matching is in effect.
func isRegex(f string) bool {
return regExp.MatchString(f)
}