mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			220 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package waf
 | 
						||
 | 
						||
type RuleOperator = string
 | 
						||
type RuleCaseInsensitive = string
 | 
						||
 | 
						||
const (
 | 
						||
	RuleOperatorGt           RuleOperator = "gt"
 | 
						||
	RuleOperatorGte          RuleOperator = "gte"
 | 
						||
	RuleOperatorLt           RuleOperator = "lt"
 | 
						||
	RuleOperatorLte          RuleOperator = "lte"
 | 
						||
	RuleOperatorEq           RuleOperator = "eq"
 | 
						||
	RuleOperatorNeq          RuleOperator = "neq"
 | 
						||
	RuleOperatorEqString     RuleOperator = "eq string"
 | 
						||
	RuleOperatorNeqString    RuleOperator = "neq string"
 | 
						||
	RuleOperatorMatch        RuleOperator = "match"
 | 
						||
	RuleOperatorNotMatch     RuleOperator = "not match"
 | 
						||
	RuleOperatorContains     RuleOperator = "contains"
 | 
						||
	RuleOperatorNotContains  RuleOperator = "not contains"
 | 
						||
	RuleOperatorPrefix       RuleOperator = "prefix"
 | 
						||
	RuleOperatorSuffix       RuleOperator = "suffix"
 | 
						||
	RuleOperatorHasKey       RuleOperator = "has key" // has key in slice or map
 | 
						||
	RuleOperatorVersionGt    RuleOperator = "version gt"
 | 
						||
	RuleOperatorVersionLt    RuleOperator = "version lt"
 | 
						||
	RuleOperatorVersionRange RuleOperator = "version range"
 | 
						||
 | 
						||
	// ip
 | 
						||
	RuleOperatorEqIP       RuleOperator = "eq ip"
 | 
						||
	RuleOperatorGtIP       RuleOperator = "gt ip"
 | 
						||
	RuleOperatorGteIP      RuleOperator = "gte ip"
 | 
						||
	RuleOperatorLtIP       RuleOperator = "lt ip"
 | 
						||
	RuleOperatorLteIP      RuleOperator = "lte ip"
 | 
						||
	RuleOperatorIPRange    RuleOperator = "ip range"
 | 
						||
	RuleOperatorNotIPRange RuleOperator = "not ip range"
 | 
						||
	RuleOperatorIPMod10    RuleOperator = "ip mod 10"
 | 
						||
	RuleOperatorIPMod100   RuleOperator = "ip mod 100"
 | 
						||
	RuleOperatorIPMod      RuleOperator = "ip mod"
 | 
						||
 | 
						||
	RuleCaseInsensitiveNone = "none"
 | 
						||
	RuleCaseInsensitiveYes  = "yes"
 | 
						||
	RuleCaseInsensitiveNo   = "no"
 | 
						||
)
 | 
						||
 | 
						||
type RuleOperatorDefinition struct {
 | 
						||
	Name            string
 | 
						||
	Code            string
 | 
						||
	Description     string
 | 
						||
	CaseInsensitive RuleCaseInsensitive // default caseInsensitive setting
 | 
						||
}
 | 
						||
 | 
						||
var AllRuleOperators = []*RuleOperatorDefinition{
 | 
						||
	{
 | 
						||
		Name:            "数值大于",
 | 
						||
		Code:            RuleOperatorGt,
 | 
						||
		Description:     "使用数值对比大于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "数值大于等于",
 | 
						||
		Code:            RuleOperatorGte,
 | 
						||
		Description:     "使用数值对比大于等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "数值小于",
 | 
						||
		Code:            RuleOperatorLt,
 | 
						||
		Description:     "使用数值对比小于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "数值小于等于",
 | 
						||
		Code:            RuleOperatorLte,
 | 
						||
		Description:     "使用数值对比小于等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "数值等于",
 | 
						||
		Code:            RuleOperatorEq,
 | 
						||
		Description:     "使用数值对比等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "数值不等于",
 | 
						||
		Code:            RuleOperatorNeq,
 | 
						||
		Description:     "使用数值对比不等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNone,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "字符串等于",
 | 
						||
		Code:            RuleOperatorEqString,
 | 
						||
		Description:     "使用字符串对比等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "字符串不等于",
 | 
						||
		Code:            RuleOperatorNeqString,
 | 
						||
		Description:     "使用字符串对比不等于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "正则匹配",
 | 
						||
		Code:            RuleOperatorMatch,
 | 
						||
		Description:     "使用正则表达式匹配,在头部使用(?i)表示不区分大小写,<a href=\"http://teaos.cn/doc/regexp/Regexp.md\" target=\"_blank\">正则表达式语法 »</a>",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveYes,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "正则不匹配",
 | 
						||
		Code:            RuleOperatorNotMatch,
 | 
						||
		Description:     "使用正则表达式不匹配,在头部使用(?i)表示不区分大小写,<a href=\"http://teaos.cn/doc/regexp/Regexp.md\" target=\"_blank\">正则表达式语法 »</a>",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveYes,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "包含字符串",
 | 
						||
		Code:            RuleOperatorContains,
 | 
						||
		Description:     "包含某个字符串",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "不包含字符串",
 | 
						||
		Code:            RuleOperatorNotContains,
 | 
						||
		Description:     "不包含某个字符串",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "包含前缀",
 | 
						||
		Code:            RuleOperatorPrefix,
 | 
						||
		Description:     "包含某个前缀",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "包含后缀",
 | 
						||
		Code:            RuleOperatorSuffix,
 | 
						||
		Description:     "包含某个后缀",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "包含索引",
 | 
						||
		Code:            RuleOperatorHasKey,
 | 
						||
		Description:     "对于一组数据拥有某个键值或者索引",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "版本号大于",
 | 
						||
		Code:            RuleOperatorVersionGt,
 | 
						||
		Description:     "对比版本号大于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "版本号小于",
 | 
						||
		Code:            RuleOperatorVersionLt,
 | 
						||
		Description:     "对比版本号小于",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "版本号范围",
 | 
						||
		Code:            RuleOperatorVersionRange,
 | 
						||
		Description:     "判断版本号在某个范围内,格式为version1,version2",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP等于",
 | 
						||
		Code:            RuleOperatorEqIP,
 | 
						||
		Description:     "将参数转换为IP进行对比",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP大于",
 | 
						||
		Code:            RuleOperatorGtIP,
 | 
						||
		Description:     "将参数转换为IP进行对比",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP大于等于",
 | 
						||
		Code:            RuleOperatorGteIP,
 | 
						||
		Description:     "将参数转换为IP进行对比",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP小于",
 | 
						||
		Code:            RuleOperatorLtIP,
 | 
						||
		Description:     "将参数转换为IP进行对比",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP小于等于",
 | 
						||
		Code:            RuleOperatorLteIP,
 | 
						||
		Description:     "将参数转换为IP进行对比",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP范围",
 | 
						||
		Code:            RuleOperatorIPRange,
 | 
						||
		Description:     "IP在某个范围之内,范围格式可以是英文逗号分隔的ip1,ip2,或者CIDR格式的ip/bits",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "不在IP范围",
 | 
						||
		Code:            RuleOperatorNotIPRange,
 | 
						||
		Description:     "IP不在某个范围之内,范围格式可以是英文逗号分隔的ip1,ip2,或者CIDR格式的ip/bits",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP取模10",
 | 
						||
		Code:            RuleOperatorIPMod10,
 | 
						||
		Description:     "对IP参数值取模,除数为10,对比值为余数",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP取模100",
 | 
						||
		Code:            RuleOperatorIPMod100,
 | 
						||
		Description:     "对IP参数值取模,除数为100,对比值为余数",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
	{
 | 
						||
		Name:            "IP取模",
 | 
						||
		Code:            RuleOperatorIPMod,
 | 
						||
		Description:     "对IP参数值取模,对比值格式为:除数,余数,比如10,1",
 | 
						||
		CaseInsensitive: RuleCaseInsensitiveNo,
 | 
						||
	},
 | 
						||
}
 |