From 5d5f0855bfbe98644ecb921cfb51c928a9ec7fcf Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 17 Apr 2024 15:10:36 +0800 Subject: [PATCH] =?UTF-8?q?UA=E5=90=8D=E5=8D=95=E5=8A=9F=E8=83=BD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E2=80=9C=E4=BE=8B=E5=A4=96URL=E2=80=9C=E5=92=8C?= =?UTF-8?q?=E2=80=9C=E9=99=90=E5=88=B6URL=E2=80=9D=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/serverconfigs/user_agent_config.go | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/pkg/serverconfigs/user_agent_config.go b/pkg/serverconfigs/user_agent_config.go index 2b83cd2..900fda7 100644 --- a/pkg/serverconfigs/user_agent_config.go +++ b/pkg/serverconfigs/user_agent_config.go @@ -3,6 +3,7 @@ package serverconfigs import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "net/http" "regexp" "strings" @@ -84,6 +85,9 @@ type UserAgentConfig struct { IsPrior bool `yaml:"isPrior" json:"isPrior"` IsOn bool `yaml:"isOn" json:"isOn"` Filters []*UserAgentFilter `yaml:"filters" json:"filters"` + + OnlyURLPatterns []*shared.URLPattern `yaml:"onlyURLPatterns" json:"onlyURLPatterns"` // 仅限的URL + ExceptURLPatterns []*shared.URLPattern `yaml:"exceptURLPatterns" json:"exceptURLPatterns"` // 排除的URL } func NewUserAgentConfig() *UserAgentConfig { @@ -91,12 +95,29 @@ func NewUserAgentConfig() *UserAgentConfig { } func (this *UserAgentConfig) Init() error { + // filters for _, filter := range this.Filters { err := filter.Init() if err != nil { return err } } + + // url patterns + for _, pattern := range this.ExceptURLPatterns { + err := pattern.Init() + if err != nil { + return err + } + } + + for _, pattern := range this.OnlyURLPatterns { + err := pattern.Init() + if err != nil { + return err + } + } + return nil } @@ -115,3 +136,26 @@ func (this *UserAgentConfig) AllowRequest(req *http.Request) bool { return true } + +func (this *UserAgentConfig) MatchURL(url string) bool { + // except + if len(this.ExceptURLPatterns) > 0 { + for _, pattern := range this.ExceptURLPatterns { + if pattern.Match(url) { + return false + } + } + } + + // only + if len(this.OnlyURLPatterns) > 0 { + for _, pattern := range this.OnlyURLPatterns { + if pattern.Match(url) { + return true + } + } + return false + } + + return true +}