缓存条件类型增加“URL通配符”

This commit is contained in:
GoEdgeLab
2023-06-16 11:34:59 +08:00
parent 2df0a7d9cd
commit f62e96bdff
3 changed files with 153 additions and 37 deletions

View File

@@ -5,12 +5,10 @@ import (
"encoding/binary"
"encoding/json"
"errors"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/lists"
"github.com/iwind/TeaGo/types"
"github.com/iwind/TeaGo/utils/string"
"net"
"os"
"path/filepath"
"regexp"
"strings"
@@ -59,6 +57,20 @@ func (this *HTTPRequestCond) Init() error {
return err
}
this.regValue = reg
} else if lists.ContainsString([]string{
RequestCondOperatorWildcardMatch,
RequestCondOperatorWildcardNotMatch,
}, this.Operator) {
var pieces = strings.Split(this.Value, "*")
for index, piece := range pieces {
pieces[index] = regexp.QuoteMeta(piece)
}
var pattern = strings.Join(pieces, "(.*)")
reg, err := regexp.Compile("(?i)" /** 大小写不敏感 **/ + "^" + pattern + "$")
if err != nil {
return err
}
this.regValue = reg
} else if lists.ContainsString([]string{
RequestCondOperatorEqFloat,
RequestCondOperatorGtFloat,
@@ -162,6 +174,16 @@ func (this *HTTPRequestCond) match(formatter func(source string) string) bool {
return false
}
return !this.regValue.MatchString(paramValue)
case RequestCondOperatorWildcardMatch:
if this.regValue == nil {
return false
}
return this.regValue.MatchString(paramValue)
case RequestCondOperatorWildcardNotMatch:
if this.regValue == nil {
return false
}
return !this.regValue.MatchString(paramValue)
case RequestCondOperatorEqInt:
return this.isInt && paramValue == this.Value
case RequestCondOperatorEqFloat:
@@ -373,32 +395,32 @@ func (this *HTTPRequestCond) match(formatter func(source string) string) bool {
return this.ipToInt64(net.ParseIP(paramValue))%10 == types.Int64(this.Value)
case RequestCondOperatorIPMod100:
return this.ipToInt64(net.ParseIP(paramValue))%100 == types.Int64(this.Value)
case RequestCondOperatorFileExist:
index := strings.Index(paramValue, "?")
if index > -1 {
paramValue = paramValue[:index]
}
if len(paramValue) == 0 {
return false
}
if !filepath.IsAbs(paramValue) {
paramValue = Tea.Root + Tea.DS + paramValue
}
stat, err := os.Stat(paramValue)
return err == nil && !stat.IsDir()
case RequestCondOperatorFileNotExist:
index := strings.Index(paramValue, "?")
if index > -1 {
paramValue = paramValue[:index]
}
if len(paramValue) == 0 {
return true
}
if !filepath.IsAbs(paramValue) {
paramValue = Tea.Root + Tea.DS + paramValue
}
stat, err := os.Stat(paramValue)
return err != nil || stat.IsDir()
/**case RequestCondOperatorFileExist:
index := strings.Index(paramValue, "?")
if index > -1 {
paramValue = paramValue[:index]
}
if len(paramValue) == 0 {
return false
}
if !filepath.IsAbs(paramValue) {
paramValue = Tea.Root + Tea.DS + paramValue
}
stat, err := os.Stat(paramValue)
return err == nil && !stat.IsDir()
case RequestCondOperatorFileNotExist:
index := strings.Index(paramValue, "?")
if index > -1 {
paramValue = paramValue[:index]
}
if len(paramValue) == 0 {
return true
}
if !filepath.IsAbs(paramValue) {
paramValue = Tea.Root + Tea.DS + paramValue
}
stat, err := os.Stat(paramValue)
return err != nil || stat.IsDir()**/
}
return false