Forráskód Böngészése

Routing: Add regexp syntax support to UserMatcher (#3799)

vnxme 1 éve
szülő
commit
3a8c5f38e8
1 módosított fájl, 17 hozzáadás és 2 törlés
  1. 17 2
      app/router/condition.go

+ 17 - 2
app/router/condition.go

@@ -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
 }