1.4.5.2
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package firewallconfigs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var namedParamReg = regexp.MustCompile(`^\${\s*(.+)\s*}$`)
|
||||
|
||||
type HTTPFirewallRule struct {
|
||||
Id int64 `yaml:"id" json:"id"`
|
||||
IsOn bool `yaml:"isOn" json:"isOn"`
|
||||
Param string `yaml:"param" json:"param"`
|
||||
ParamFilters []*ParamFilter `yaml:"paramFilters" json:"paramFilters"`
|
||||
Operator string `yaml:"operator" json:"operator"`
|
||||
Value string `yaml:"value" json:"value"`
|
||||
IsCaseInsensitive bool `yaml:"isCaseInsensitive" json:"isCaseInsensitive"`
|
||||
IsComposed bool `yaml:"isComposed" json:"isComposed"`
|
||||
CheckpointOptions map[string]interface{} `yaml:"checkpointOptions" json:"checkpointOptions"`
|
||||
Description string `yaml:"description" json:"description"`
|
||||
}
|
||||
|
||||
func (this *HTTPFirewallRule) Init() error {
|
||||
// TODO 执行更严谨的校验
|
||||
|
||||
switch this.Operator {
|
||||
case HTTPFirewallRuleOperatorMatch:
|
||||
_, err := regexp.Compile(this.Value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("regexp validate failed: %w, expression: %s", err, this.Value)
|
||||
}
|
||||
case HTTPFirewallRuleOperatorNotMatch:
|
||||
_, err := regexp.Compile(this.Value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("regexp validate failed: %w, expression: %s", err, this.Value)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *HTTPFirewallRule) Prefix() string {
|
||||
result := namedParamReg.FindStringSubmatch(this.Param)
|
||||
if len(result) > 0 {
|
||||
param := result[1]
|
||||
pieces := strings.Split(param, ".")
|
||||
return pieces[0]
|
||||
}
|
||||
return this.Param
|
||||
}
|
||||
|
||||
func (this *HTTPFirewallRule) Summary() string {
|
||||
return this.Param + " " + FindRuleOperatorName(this.Operator) + " " + this.Value
|
||||
}
|
||||
Reference in New Issue
Block a user