diff options
Diffstat (limited to 'modules/matchlist/matchlist.go')
-rw-r--r-- | modules/matchlist/matchlist.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/modules/matchlist/matchlist.go b/modules/matchlist/matchlist.go new file mode 100644 index 0000000000..b65ed909dc --- /dev/null +++ b/modules/matchlist/matchlist.go @@ -0,0 +1,46 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package matchlist + +import ( + "strings" + + "github.com/gobwas/glob" +) + +// Matchlist represents a block or allow list +type Matchlist struct { + ruleGlobs []glob.Glob +} + +// NewMatchlist creates a new block or allow list +func NewMatchlist(rules ...string) (*Matchlist, error) { + for i := range rules { + rules[i] = strings.ToLower(rules[i]) + } + list := Matchlist{ + ruleGlobs: make([]glob.Glob, 0, len(rules)), + } + + for _, rule := range rules { + rg, err := glob.Compile(rule) + if err != nil { + return nil, err + } + list.ruleGlobs = append(list.ruleGlobs, rg) + } + + return &list, nil +} + +// Match will matches +func (b *Matchlist) Match(u string) bool { + for _, r := range b.ruleGlobs { + if r.Match(u) { + return true + } + } + return false +} |