mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 15:51:54 +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,
							 | 
						|||
| 
								 | 
							
									},
							 | 
						|||
| 
								 | 
							
								}
							 |