WAF操作符元数据中增加数据类型选项,以便于优化交互界面

This commit is contained in:
刘祥超
2023-08-13 10:01:24 +08:00
parent 15708ec1bb
commit 51f8fd0f31

View File

@@ -51,206 +51,240 @@ type RuleOperatorDefinition struct {
Code string `json:"code"` Code string `json:"code"`
Description string `json:"description"` Description string `json:"description"`
CaseInsensitive HTTPFirewallRuleCaseInsensitive `json:"caseInsensitive"` // default caseInsensitive setting CaseInsensitive HTTPFirewallRuleCaseInsensitive `json:"caseInsensitive"` // default caseInsensitive setting
DataType string `json:"dataType"`
} }
var AllRuleOperators = []*RuleOperatorDefinition{ var AllRuleOperators = []*RuleOperatorDefinition{
{
Name: "字符串等于",
Code: HTTPFirewallRuleOperatorEqString,
Description: "使用字符串对比等于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
},
{
Name: "字符串不等于",
Code: HTTPFirewallRuleOperatorNeqString,
Description: "使用字符串对比不等于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
},
{ {
Name: "正则匹配", Name: "正则匹配",
Code: HTTPFirewallRuleOperatorMatch, Code: HTTPFirewallRuleOperatorMatch,
Description: "使用正则表达式匹配,在头部使用(?i)表示不区分大小写,<a href=\"https://goedge.cn/docs/Appendix/Regexp/Index.md\" target=\"_blank\">正则表达式语法 &raquo;</a>", Description: "使用正则表达式匹配,在头部使用(?i)表示不区分大小写,<a href=\"https://goedge.cn/docs/Appendix/Regexp/Index.md\" target=\"_blank\">正则表达式语法 &raquo;</a>",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes,
DataType: "regexp",
}, },
{ {
Name: "正则不匹配", Name: "正则不匹配",
Code: HTTPFirewallRuleOperatorNotMatch, Code: HTTPFirewallRuleOperatorNotMatch,
Description: "使用正则表达式不匹配,在头部使用(?i)表示不区分大小写,<a href=\"https://goedge.cn/docs/Appendix/Regexp/Index.md\" target=\"_blank\">正则表达式语法 &raquo;</a>", Description: "使用正则表达式不匹配,在头部使用(?i)表示不区分大小写,<a href=\"https://goedge.cn/docs/Appendix/Regexp/Index.md\" target=\"_blank\">正则表达式语法 &raquo;</a>",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveYes,
DataType: "regexp",
},
{
Name: "字符串等于",
Code: HTTPFirewallRuleOperatorEqString,
Description: "使用字符串对比等于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
},
{
Name: "字符串不等于",
Code: HTTPFirewallRuleOperatorNeqString,
Description: "使用字符串对比不等于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "包含字符串", Name: "包含字符串",
Code: HTTPFirewallRuleOperatorContains, Code: HTTPFirewallRuleOperatorContains,
Description: "包含某个字符串比如Hello World包含了World", Description: "包含某个字符串比如Hello World包含了World",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "不包含字符串", Name: "不包含字符串",
Code: HTTPFirewallRuleOperatorNotContains, Code: HTTPFirewallRuleOperatorNotContains,
Description: "不包含某个字符串比如Hello字符串中不包含Hi", Description: "不包含某个字符串比如Hello字符串中不包含Hi",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "包含任一字符串", Name: "包含任一字符串",
Code: HTTPFirewallRuleOperatorContainsAny, Code: HTTPFirewallRuleOperatorContainsAny,
Description: "包含字符串列表中的任意一个,比如/hello/world包含/hello和/hi中的/hello每行一个字符串", Description: "包含字符串列表中的任意一个,比如/hello/world包含/hello和/hi中的/hello对比值中每行一个字符串",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "strings",
}, },
{ {
Name: "包含所有字符串", Name: "包含所有字符串",
Code: HTTPFirewallRuleOperatorContainsAll, Code: HTTPFirewallRuleOperatorContainsAll,
Description: "包含字符串列表中的所有字符串,比如/hello/world必须包含/hello和/world每行一个字符串", Description: "包含字符串列表中的所有字符串,比如/hello/world必须包含/hello和/world对比值中每行一个字符串",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "strings",
}, },
{ {
Name: "包含前缀", Name: "包含前缀",
Code: HTTPFirewallRuleOperatorPrefix, Code: HTTPFirewallRuleOperatorPrefix,
Description: "包含字符串前缀部分,比如/hello前缀会匹配/hello, /hello/world等", Description: "包含字符串前缀部分,比如/hello前缀会匹配/hello, /hello/world等",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "包含后缀", Name: "包含后缀",
Code: HTTPFirewallRuleOperatorSuffix, Code: HTTPFirewallRuleOperatorSuffix,
Description: "包含字符串后缀部分,比如/hello后缀会匹配/hello, /hi/hello等", Description: "包含字符串后缀部分,比如/hello后缀会匹配/hello, /hi/hello等",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "包含二进制数据", Name: "包含二进制数据",
Code: HTTPFirewallRuleOperatorContainsBinary, Code: HTTPFirewallRuleOperatorContainsBinary,
Description: "包含一组二进制数据", Description: "包含一组二进制数据",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "不包含二进制数据", Name: "不包含二进制数据",
Code: HTTPFirewallRuleOperatorNotContainsBinary, Code: HTTPFirewallRuleOperatorNotContainsBinary,
Description: "不包含一组二进制数据", Description: "不包含一组二进制数据",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string",
}, },
{ {
Name: "数值大于", Name: "数值大于",
Code: HTTPFirewallRuleOperatorGt, Code: HTTPFirewallRuleOperatorGt,
Description: "使用数值对比大于,对比值需要是一个数字", Description: "使用数值对比大于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "数值大于等于", Name: "数值大于等于",
Code: HTTPFirewallRuleOperatorGte, Code: HTTPFirewallRuleOperatorGte,
Description: "使用数值对比大于等于,对比值需要是一个数字", Description: "使用数值对比大于等于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "数值小于", Name: "数值小于",
Code: HTTPFirewallRuleOperatorLt, Code: HTTPFirewallRuleOperatorLt,
Description: "使用数值对比小于,对比值需要是一个数字", Description: "使用数值对比小于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "数值小于等于", Name: "数值小于等于",
Code: HTTPFirewallRuleOperatorLte, Code: HTTPFirewallRuleOperatorLte,
Description: "使用数值对比小于等于,对比值需要是一个数字", Description: "使用数值对比小于等于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "数值等于", Name: "数值等于",
Code: HTTPFirewallRuleOperatorEq, Code: HTTPFirewallRuleOperatorEq,
Description: "使用数值对比等于,对比值需要是一个数字", Description: "使用数值对比等于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "数值不等于", Name: "数值不等于",
Code: HTTPFirewallRuleOperatorNeq, Code: HTTPFirewallRuleOperatorNeq,
Description: "使用数值对比不等于,对比值需要是一个数字", Description: "使用数值对比不等于,对比值需要是一个数字",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "包含索引", Name: "包含索引",
Code: HTTPFirewallRuleOperatorHasKey, Code: HTTPFirewallRuleOperatorHasKey,
Description: "对于一组数据拥有某个键值或者索引", Description: "对于一组数据拥有某个键值或者索引",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo,
DataType: "string|number",
}, },
{ {
Name: "版本号大于", Name: "版本号大于",
Code: HTTPFirewallRuleOperatorVersionGt, Code: HTTPFirewallRuleOperatorVersionGt,
Description: "对比版本号大于", Description: "对比版本号大于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "version",
}, },
{ {
Name: "版本号小于", Name: "版本号小于",
Code: HTTPFirewallRuleOperatorVersionLt, Code: HTTPFirewallRuleOperatorVersionLt,
Description: "对比版本号小于", Description: "对比版本号小于",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "version",
}, },
{ {
Name: "版本号范围", Name: "版本号范围",
Code: HTTPFirewallRuleOperatorVersionRange, Code: HTTPFirewallRuleOperatorVersionRange,
Description: "判断版本号在某个范围内格式为version1,version2", Description: "判断版本号在某个范围内格式为version1,version2",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNo, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "version",
}, },
{ {
Name: "IP等于", Name: "IP等于",
Code: HTTPFirewallRuleOperatorEqIP, Code: HTTPFirewallRuleOperatorEqIP,
Description: "将参数转换为IP进行对比只能对比单个IP", Description: "将参数转换为IP进行对比只能对比单个IP",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ip",
}, },
{ {
Name: "在一组IP中", Name: "在一组IP中",
Code: HTTPFirewallRuleOperatorInIPList, Code: HTTPFirewallRuleOperatorInIPList,
Description: "判断参数IP在一组IP内每行一个IP", Description: "判断参数IP在一组IP内对比值中每行一个IP",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ips",
}, },
{ {
Name: "IP大于", Name: "IP大于",
Code: HTTPFirewallRuleOperatorGtIP, Code: HTTPFirewallRuleOperatorGtIP,
Description: "将参数转换为IP进行对比", Description: "将参数转换为IP进行对比",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ip",
}, },
{ {
Name: "IP大于等于", Name: "IP大于等于",
Code: HTTPFirewallRuleOperatorGteIP, Code: HTTPFirewallRuleOperatorGteIP,
Description: "将参数转换为IP进行对比", Description: "将参数转换为IP进行对比",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ip",
}, },
{ {
Name: "IP小于", Name: "IP小于",
Code: HTTPFirewallRuleOperatorLtIP, Code: HTTPFirewallRuleOperatorLtIP,
Description: "将参数转换为IP进行对比", Description: "将参数转换为IP进行对比",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ip",
}, },
{ {
Name: "IP小于等于", Name: "IP小于等于",
Code: HTTPFirewallRuleOperatorLteIP, Code: HTTPFirewallRuleOperatorLteIP,
Description: "将参数转换为IP进行对比", Description: "将参数转换为IP进行对比",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ip",
}, },
{ {
Name: "IP范围", Name: "IP范围",
Code: HTTPFirewallRuleOperatorIPRange, Code: HTTPFirewallRuleOperatorIPRange,
Description: "IP在某个范围之内范围格式可以是英文逗号分隔的<code-label>开始IP,结束IP</code-label>,比如<code-label>192.168.1.100,192.168.2.200</code-label>或者CIDR格式的ip/bits比如<code-label>192.168.2.1/24</code-label>或者单个IP。可以填写多行每行一个IP范围。", Description: "IP在某个范围之内范围格式可以是英文逗号分隔的<code-label>开始IP,结束IP</code-label>,比如<code-label>192.168.1.100,192.168.2.200</code-label>或者CIDR格式的ip/bits比如<code-label>192.168.2.1/24</code-label>或者单个IP。可以填写多行每行一个IP范围。",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ips",
}, },
{ {
Name: "不在IP范围", Name: "不在IP范围",
Code: HTTPFirewallRuleOperatorNotIPRange, Code: HTTPFirewallRuleOperatorNotIPRange,
Description: "IP不在某个范围之内范围格式可以是英文逗号分隔的<code-label>开始IP,结束IP</code-label>,比如<code-label>192.168.1.100,192.168.2.200</code-label>或者CIDR格式的ip/bits比如<code-label>192.168.2.1/24</code-label>或者单个IP。可以填写多行每行一个IP范围。", Description: "IP不在某个范围之内范围格式可以是英文逗号分隔的<code-label>开始IP,结束IP</code-label>,比如<code-label>192.168.1.100,192.168.2.200</code-label>或者CIDR格式的ip/bits比如<code-label>192.168.2.1/24</code-label>或者单个IP。可以填写多行每行一个IP范围。",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "ips",
}, },
{ {
Name: "IP取模10", Name: "IP取模10",
Code: HTTPFirewallRuleOperatorIPMod10, Code: HTTPFirewallRuleOperatorIPMod10,
Description: "对IP参数值取模除数为10对比值为余数", Description: "对IP参数值取模除数为10对比值为余数",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "IP取模100", Name: "IP取模100",
Code: HTTPFirewallRuleOperatorIPMod100, Code: HTTPFirewallRuleOperatorIPMod100,
Description: "对IP参数值取模除数为100对比值为余数", Description: "对IP参数值取模除数为100对比值为余数",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
{ {
Name: "IP取模", Name: "IP取模",
Code: HTTPFirewallRuleOperatorIPMod, Code: HTTPFirewallRuleOperatorIPMod,
Description: "对IP参数值取模对比值格式为除数,余数比如10,1", Description: "对IP参数值取模对比值格式为除数,余数比如10,1",
CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone, CaseInsensitive: HTTPFirewallRuleCaseInsensitiveNone,
DataType: "number",
}, },
} }