|
|
|
@ -193,17 +193,27 @@ func (v NetworkMatcher) Apply(ctx routing.Context) bool {
|
|
|
|
|
|
|
|
|
|
type UserMatcher struct {
|
|
|
|
|
user []string
|
|
|
|
|
pattern []*regexp.Regexp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewUserMatcher(users []string) *UserMatcher {
|
|
|
|
|
usersCopy := make([]string, 0, len(users))
|
|
|
|
|
patternsCopy := make([]*regexp.Regexp, 0, len(users))
|
|
|
|
|
for _, user := range users {
|
|
|
|
|
if len(user) > 0 {
|
|
|
|
|
if len(user) > 7 && strings.HasPrefix(user, "regexp:") {
|
|
|
|
|
if re, err := regexp.Compile(user[7:]); err != nil {
|
|
|
|
|
patternsCopy = append(patternsCopy, re)
|
|
|
|
|
}
|
|
|
|
|
// Items of users slice with an invalid regexp syntax are ignored.
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
usersCopy = append(usersCopy, user)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return &UserMatcher{
|
|
|
|
|
user: usersCopy,
|
|
|
|
|
pattern: patternsCopy,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -218,6 +228,11 @@ func (v *UserMatcher) Apply(ctx routing.Context) bool {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for _, re := range v.pattern {
|
|
|
|
|
if re.MatchString(user) {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|