|
|
|
@ -192,18 +192,28 @@ func (v NetworkMatcher) Apply(ctx routing.Context) bool {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type UserMatcher struct { |
|
|
|
|
user []string |
|
|
|
|
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, |
|
|
|
|
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 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|