diff --git a/internal/web/actions/default/servers/components/waf/createSetPopup.go b/internal/web/actions/default/servers/components/waf/createSetPopup.go index 438c4d8a..88bfca03 100644 --- a/internal/web/actions/default/servers/components/waf/createSetPopup.go +++ b/internal/web/actions/default/servers/components/waf/createSetPopup.go @@ -9,7 +9,6 @@ import ( "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" "strconv" - "strings" ) type CreateSetPopupAction struct { @@ -53,6 +52,7 @@ func (this *CreateSetPopupAction) RunGet(params struct { }, } + // 所有可选的动作 actionMaps := []maps.Map{} for _, action := range firewallconfigs.AllActions { actionMaps = append(actionMaps, maps.Map{ @@ -69,10 +69,10 @@ func (this *CreateSetPopupAction) RunGet(params struct { func (this *CreateSetPopupAction) RunPost(params struct { GroupId int64 - Name string - RulesJSON []byte - Connector string - Action string + Name string + RulesJSON []byte + Connector string + ActionsJSON []byte Must *actions.Must }) { @@ -96,32 +96,34 @@ func (this *CreateSetPopupAction) RunPost(params struct { err = json.Unmarshal(params.RulesJSON, &rules) if err != nil { this.ErrorPage(err) + return } if len(rules) == 0 { this.Fail("请添加至少一个规则") } - setConfig := &firewallconfigs.HTTPFirewallRuleSet{ - Id: 0, - IsOn: true, - Name: params.Name, - Code: "", - Description: "", - Connector: params.Connector, - RuleRefs: nil, - Rules: rules, - Action: params.Action, - ActionOptions: maps.Map{}, + var actionConfigs = []*firewallconfigs.HTTPFirewallActionConfig{} + if len(params.ActionsJSON) > 0 { + err = json.Unmarshal(params.ActionsJSON, &actionConfigs) + if err != nil { + this.ErrorPage(err) + return + } + } + if len(actionConfigs) == 0 { + this.Fail("请添加至少一个动作") } - for k, v := range this.ParamsMap { - if len(v) == 0 { - continue - } - index := strings.Index(k, "action_") - if index > -1 { - setConfig.ActionOptions[k[len("action_"):]] = v[0] - } + setConfig := &firewallconfigs.HTTPFirewallRuleSet{ + Id: 0, + IsOn: true, + Name: params.Name, + Code: "", + Description: "", + Connector: params.Connector, + RuleRefs: nil, + Rules: rules, + Actions: actionConfigs, } setConfigJSON, err := json.Marshal(setConfig) diff --git a/internal/web/actions/default/servers/components/waf/group.go b/internal/web/actions/default/servers/components/waf/group.go index c7277722..3a7daa9d 100644 --- a/internal/web/actions/default/servers/components/waf/group.go +++ b/internal/web/actions/default/servers/components/waf/group.go @@ -6,7 +6,6 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" "github.com/iwind/TeaGo/lists" "github.com/iwind/TeaGo/maps" - "strconv" "strings" ) @@ -54,31 +53,19 @@ func (this *GroupAction) RunGet(params struct { set := v.(*firewallconfigs.HTTPFirewallRuleSet) // 动作说明 - actionLinks := []maps.Map{} - if set.Action == firewallconfigs.HTTPFirewallActionGoGroup { - nextGroup := firewallPolicy.FindRuleGroup(set.ActionOptions.GetInt64("groupId")) - if nextGroup != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextGroup.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) + var actionMaps = []maps.Map{} + for _, action := range set.Actions { + def := firewallconfigs.FindActionDefinition(action.Code) + if def == nil { + continue } - } else if set.Action == firewallconfigs.HTTPFirewallActionGoSet { - nextGroup := firewallPolicy.FindRuleGroup(set.ActionOptions.GetInt64("groupId")) - if nextGroup != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextGroup.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) - nextSet := nextGroup.FindRuleSet(set.ActionOptions.GetInt64("setId")) - if nextSet != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextSet.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) - } - } + actionMaps = append(actionMaps, maps.Map{ + "code": strings.ToUpper(action.Code), + "name": def.Name, + "category": def.Category, + "options": action.Options, + }) } return maps.Map{ @@ -95,12 +82,9 @@ func (this *GroupAction) RunGet(params struct { "isComposed": firewallconfigs.CheckCheckpointIsComposed(rule.Prefix()), } }), - "isOn": set.IsOn, - "action": strings.ToUpper(set.Action), - "actionOptions": set.ActionOptions, - "actionName": firewallconfigs.FindActionName(set.Action), - "actionLinks": actionLinks, - "connector": strings.ToUpper(set.Connector), + "isOn": set.IsOn, + "actions": actionMaps, + "connector": strings.ToUpper(set.Connector), } }) diff --git a/internal/web/actions/default/servers/components/waf/updateSetPopup.go b/internal/web/actions/default/servers/components/waf/updateSetPopup.go index 34d2f80d..4029ccfa 100644 --- a/internal/web/actions/default/servers/components/waf/updateSetPopup.go +++ b/internal/web/actions/default/servers/components/waf/updateSetPopup.go @@ -9,7 +9,6 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" - "strings" ) type UpdateSetPopupAction struct { @@ -79,6 +78,14 @@ func (this *UpdateSetPopupAction) RunGet(params struct { } this.Data["setConfig"] = setConfig + // action configs + actionConfigs, err := dao.SharedHTTPFirewallPolicyDAO.FindHTTPFirewallActionConfigs(this.AdminContext(), setConfig.Actions) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["actionConfigs"] = actionConfigs + this.Show() } @@ -86,10 +93,10 @@ func (this *UpdateSetPopupAction) RunPost(params struct { GroupId int64 SetId int64 - Name string - RulesJSON []byte - Connector string - Action string + Name string + RulesJSON []byte + Connector string + ActionsJSON []byte Must *actions.Must }) { @@ -115,26 +122,28 @@ func (this *UpdateSetPopupAction) RunPost(params struct { err = json.Unmarshal(params.RulesJSON, &rules) if err != nil { this.ErrorPage(err) + return } if len(rules) == 0 { this.Fail("请添加至少一个规则") } + var actionConfigs = []*firewallconfigs.HTTPFirewallActionConfig{} + if len(params.ActionsJSON) > 0 { + err = json.Unmarshal(params.ActionsJSON, &actionConfigs) + if err != nil { + this.ErrorPage(err) + return + } + } + if len(actionConfigs) == 0 { + this.Fail("请添加至少一个动作") + } + setConfig.Name = params.Name setConfig.Connector = params.Connector setConfig.Rules = rules - setConfig.Action = params.Action - setConfig.ActionOptions = maps.Map{} - - for k, v := range this.ParamsMap { - if len(v) == 0 { - continue - } - index := strings.Index(k, "action_") - if index > -1 { - setConfig.ActionOptions[k[len("action_"):]] = v[0] - } - } + setConfig.Actions = actionConfigs setConfigJSON, err := json.Marshal(setConfig) if err != nil { diff --git a/internal/web/actions/default/servers/iplists/init.go b/internal/web/actions/default/servers/iplists/init.go index 62b1436e..ab71056c 100644 --- a/internal/web/actions/default/servers/iplists/init.go +++ b/internal/web/actions/default/servers/iplists/init.go @@ -23,6 +23,7 @@ func init() { GetPost("/test", new(TestAction)). GetPost("/update", new(UpdateAction)). Get("/items", new(ItemsAction)). + Get("/selectPopup", new(SelectPopupAction)). // IP相关 GetPost("/createIPPopup", new(CreateIPPopupAction)). @@ -34,6 +35,9 @@ func init() { Post("/unbindHTTPFirewall", new(UnbindHTTPFirewallAction)). Post("/httpFirewall", new(HttpFirewallAction)). + // 选项数据 + Post("/levelOptions", new(LevelOptionsAction)). + EndAll() }) } diff --git a/internal/web/actions/default/servers/iplists/levelOptions.go b/internal/web/actions/default/servers/iplists/levelOptions.go new file mode 100644 index 00000000..6d2c2229 --- /dev/null +++ b/internal/web/actions/default/servers/iplists/levelOptions.go @@ -0,0 +1,18 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package iplists + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" +) + +type LevelOptionsAction struct { + actionutils.ParentAction +} + +func (this *LevelOptionsAction) RunPost(params struct{}) { + this.Data["levels"] = firewallconfigs.FindAllFirewallEventLevels() + + this.Success() +} diff --git a/internal/web/actions/default/servers/iplists/selectPopup.go b/internal/web/actions/default/servers/iplists/selectPopup.go new file mode 100644 index 00000000..5aed4f1b --- /dev/null +++ b/internal/web/actions/default/servers/iplists/selectPopup.go @@ -0,0 +1,70 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package iplists + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" +) + +type SelectPopupAction struct { + actionutils.ParentAction +} + +func (this *SelectPopupAction) Init() { + this.Nav("", "", "") +} + +func (this *SelectPopupAction) RunGet(params struct { + Type string +}) { + // 公共的名单 + countResp, err := this.RPC().IPListRPC().CountAllEnabledIPLists(this.AdminContext(), &pb.CountAllEnabledIPListsRequest{ + Type: params.Type, + IsPublic: true, + Keyword: "", + }) + if err != nil { + this.ErrorPage(err) + return + } + count := countResp.Count + page := this.NewPage(count) + this.Data["page"] = page.AsHTML() + + listsResp, err := this.RPC().IPListRPC().ListEnabledIPLists(this.AdminContext(), &pb.ListEnabledIPListsRequest{ + Type: params.Type, + IsPublic: true, + Keyword: "", + Offset: page.Offset, + Size: page.Size, + }) + if err != nil { + this.ErrorPage(err) + return + } + + var listMaps = []maps.Map{} + for _, list := range listsResp.IpLists { + // 包含的IP数量 + countItemsResp, err := this.RPC().IPItemRPC().CountIPItemsWithListId(this.AdminContext(), &pb.CountIPItemsWithListIdRequest{IpListId: list.Id}) + if err != nil { + this.ErrorPage(err) + return + } + var countItems = countItemsResp.Count + + listMaps = append(listMaps, maps.Map{ + "id": list.Id, + "isOn": list.IsOn, + "name": list.Name, + "description": list.Description, + "countItems": countItems, + "type": list.Type, + }) + } + this.Data["lists"] = listMaps + + this.Show() +} diff --git a/internal/web/actions/default/servers/server/settings/waf/group.go b/internal/web/actions/default/servers/server/settings/waf/group.go index e0b322be..97ce1299 100644 --- a/internal/web/actions/default/servers/server/settings/waf/group.go +++ b/internal/web/actions/default/servers/server/settings/waf/group.go @@ -6,7 +6,6 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" "github.com/iwind/TeaGo/lists" "github.com/iwind/TeaGo/maps" - "strconv" "strings" ) @@ -55,32 +54,19 @@ func (this *GroupAction) RunGet(params struct { this.Data["sets"] = lists.Map(groupConfig.Sets, func(k int, v interface{}) interface{} { set := v.(*firewallconfigs.HTTPFirewallRuleSet) - // 动作说明 - actionLinks := []maps.Map{} - if set.Action == firewallconfigs.HTTPFirewallActionGoGroup { - nextGroup := firewallPolicy.FindRuleGroup(set.ActionOptions.GetInt64("groupId")) - if nextGroup != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextGroup.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) + var actionMaps = []maps.Map{} + for _, action := range set.Actions { + def := firewallconfigs.FindActionDefinition(action.Code) + if def == nil { + continue } - } else if set.Action == firewallconfigs.HTTPFirewallActionGoSet { - nextGroup := firewallPolicy.FindRuleGroup(set.ActionOptions.GetInt64("groupId")) - if nextGroup != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextGroup.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) - nextSet := nextGroup.FindRuleSet(set.ActionOptions.GetInt64("setId")) - if nextSet != nil { - actionLinks = append(actionLinks, maps.Map{ - "name": nextSet.Name, - "url": "/servers/components/waf/group?firewallPolicyId=" + strconv.FormatInt(params.FirewallPolicyId, 10) + "&type=" + params.Type + "&groupId=" + strconv.FormatInt(nextGroup.Id, 10), - }) - } - } + actionMaps = append(actionMaps, maps.Map{ + "code": strings.ToUpper(action.Code), + "name": def.Name, + "category": def.Category, + "options": action.Options, + }) } return maps.Map{ @@ -97,12 +83,9 @@ func (this *GroupAction) RunGet(params struct { "isComposed": firewallconfigs.CheckCheckpointIsComposed(rule.Prefix()), } }), - "isOn": set.IsOn, - "action": strings.ToUpper(set.Action), - "actionOptions": set.ActionOptions, - "actionName": firewallconfigs.FindActionName(set.Action), - "actionLinks": actionLinks, - "connector": strings.ToUpper(set.Connector), + "isOn": set.IsOn, + "actions": actionMaps, + "connector": strings.ToUpper(set.Connector), } }) diff --git a/web/public/js/components/common/values-box.js b/web/public/js/components/common/values-box.js index d5956bc2..435119df 100644 --- a/web/public/js/components/common/values-box.js +++ b/web/public/js/components/common/values-box.js @@ -52,6 +52,9 @@ Vue.component("values-box", { this.isUpdating = false; this.isAdding = false; this.value = ""; + }, + updateAll: function (values) { + this.vValeus = values } }, template: `
| 动作类型 * | +
+
+ {{action.description}} + |
+
| 封锁时间 | +
+
+
+ 秒
+
+ |
+
| 有效时间 | +
+
+
+ 秒
+
+ 验证通过后在这个时间内不再验证。 + |
+
| 有效时间 | +
+
+
+ 秒
+
+ 验证通过后在这个时间内不再验证。 + |
+
| 有效时间 | +
+
+
+ 秒
+
+ 验证通过后在这个时间内不再验证。 + |
+
| IP名单类型 * | ++ + | +
| 选择IP名单 | +
+
+
+ 如不选择,则自动添加到当前策略的IP名单中。 + |
+
| 级别 | ++ + | +
| 超时时间 | +
+
+
+ 秒
+
+ 0表示不超时。 + |
+
| 标签 * | +
+ |
+
| 下一个分组 * | ++ + | +
| 下一个分组 * | ++ + | +
| 下一个规则集 * | ++ + | +
{{selectedConnectorDescription}}
-匹配当前规则集后要执行的动作。
-当动作为"跳到下一个规则分组"时出现此选择。
-当动作为"跳到下一个规则集"时出现此选择。
-当动作为"跳到下一个规则集"时出现此选择。
-暂时还没有可用的公用IP名单。
+ +| ID | +名称 | +类型 | +备注 | +IP数量 | +操作 | +
|---|---|---|---|---|---|
| {{list.id}} | +{{list.name}} | ++ 黑名单 + 白名单 + | +{{list.description}} | ++ {{list.countItems}} + 0 + | ++ 选择 + | +