2020-10-08 11:11:37 +08:00
|
|
|
package waf
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
2020-12-23 09:52:31 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
2020-10-08 11:11:37 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs"
|
|
|
|
|
"github.com/iwind/TeaGo/lists"
|
|
|
|
|
"github.com/iwind/TeaGo/maps"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type GroupAction struct {
|
|
|
|
|
actionutils.ParentAction
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *GroupAction) Init() {
|
|
|
|
|
this.Nav("", "", this.ParamString("type"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *GroupAction) RunGet(params struct {
|
|
|
|
|
FirewallPolicyId int64
|
|
|
|
|
GroupId int64
|
|
|
|
|
Type string
|
|
|
|
|
}) {
|
|
|
|
|
this.Data["type"] = params.Type
|
|
|
|
|
|
|
|
|
|
// policy
|
2020-12-23 09:52:31 +08:00
|
|
|
firewallPolicy, err := dao.SharedHTTPFirewallPolicyDAO.FindEnabledHTTPFirewallPolicyConfig(this.AdminContext(), params.FirewallPolicyId)
|
2020-10-08 11:11:37 +08:00
|
|
|
if err != nil {
|
|
|
|
|
this.ErrorPage(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if firewallPolicy == nil {
|
|
|
|
|
this.NotFound("firewallPolicy", params.FirewallPolicyId)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// group config
|
2020-12-23 09:52:31 +08:00
|
|
|
groupConfig, err := dao.SharedHTTPFirewallRuleGroupDAO.FindRuleGroupConfig(this.AdminContext(), params.GroupId)
|
2020-10-08 11:11:37 +08:00
|
|
|
if err != nil {
|
|
|
|
|
this.ErrorPage(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if groupConfig == nil {
|
|
|
|
|
this.NotFound("firewallRuleGroup", params.GroupId)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.Data["group"] = groupConfig
|
|
|
|
|
|
|
|
|
|
// rule sets
|
|
|
|
|
this.Data["sets"] = lists.Map(groupConfig.Sets, func(k int, v interface{}) interface{} {
|
|
|
|
|
set := v.(*firewallconfigs.HTTPFirewallRuleSet)
|
|
|
|
|
|
|
|
|
|
// 动作说明
|
2021-07-14 22:45:52 +08:00
|
|
|
var actionMaps = []maps.Map{}
|
|
|
|
|
for _, action := range set.Actions {
|
|
|
|
|
def := firewallconfigs.FindActionDefinition(action.Code)
|
|
|
|
|
if def == nil {
|
|
|
|
|
continue
|
2020-10-08 11:11:37 +08:00
|
|
|
}
|
|
|
|
|
|
2021-07-14 22:45:52 +08:00
|
|
|
actionMaps = append(actionMaps, maps.Map{
|
|
|
|
|
"code": strings.ToUpper(action.Code),
|
|
|
|
|
"name": def.Name,
|
|
|
|
|
"category": def.Category,
|
|
|
|
|
"options": action.Options,
|
|
|
|
|
})
|
2020-10-08 11:11:37 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return maps.Map{
|
|
|
|
|
"id": set.Id,
|
|
|
|
|
"name": set.Name,
|
|
|
|
|
"rules": lists.Map(set.Rules, func(k int, v interface{}) interface{} {
|
|
|
|
|
rule := v.(*firewallconfigs.HTTPFirewallRule)
|
2021-09-27 10:11:37 +08:00
|
|
|
|
|
|
|
|
// 校验
|
|
|
|
|
var errString = ""
|
|
|
|
|
var err = rule.Init()
|
|
|
|
|
if err != nil {
|
|
|
|
|
errString = err.Error()
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-08 11:11:37 +08:00
|
|
|
return maps.Map{
|
|
|
|
|
"param": rule.Param,
|
2020-11-21 20:43:45 +08:00
|
|
|
"paramFilters": rule.ParamFilters,
|
2020-10-08 11:11:37 +08:00
|
|
|
"operator": rule.Operator,
|
|
|
|
|
"value": rule.Value,
|
|
|
|
|
"isCaseInsensitive": rule.IsCaseInsensitive,
|
2022-01-10 10:28:23 +08:00
|
|
|
"description": rule.Description,
|
2020-11-18 19:35:32 +08:00
|
|
|
"isComposed": firewallconfigs.CheckCheckpointIsComposed(rule.Prefix()),
|
2021-07-19 10:48:53 +08:00
|
|
|
"checkpointOptions": rule.CheckpointOptions,
|
2021-09-27 10:11:37 +08:00
|
|
|
"err": errString,
|
2020-10-08 11:11:37 +08:00
|
|
|
}
|
|
|
|
|
}),
|
2021-07-14 22:45:52 +08:00
|
|
|
"isOn": set.IsOn,
|
|
|
|
|
"actions": actionMaps,
|
|
|
|
|
"connector": strings.ToUpper(set.Connector),
|
2020-10-08 11:11:37 +08:00
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.Show()
|
|
|
|
|
}
|