diff --git a/internal/web/actions/default/servers/components/waf/ipadmin/lists.go b/internal/web/actions/default/servers/components/waf/ipadmin/lists.go index 5155ce48..631355d2 100644 --- a/internal/web/actions/default/servers/components/waf/ipadmin/lists.go +++ b/internal/web/actions/default/servers/components/waf/ipadmin/lists.go @@ -39,8 +39,8 @@ func (this *ListsAction) RunGet(params struct { this.ErrorPage(err) return } - count := countResp.Count - page := this.NewPage(count) + var count = countResp.Count + var page = this.NewPage(count) this.Data["page"] = page.AsHTML() // 列表 @@ -53,9 +53,9 @@ func (this *ListsAction) RunGet(params struct { this.ErrorPage(err) return } - itemMaps := []maps.Map{} + var itemMaps = []maps.Map{} for _, item := range itemsResp.IpItems { - expiredTime := "" + var expiredTime = "" if item.ExpiredAt > 0 { expiredTime = timeutil.FormatTime("Y-m-d H:i:s", item.ExpiredAt) } diff --git a/internal/web/actions/default/servers/iplists/bindHTTPFirewallPopup.go b/internal/web/actions/default/servers/iplists/bindHTTPFirewallPopup.go index 7c6eac32..8ef7c123 100644 --- a/internal/web/actions/default/servers/iplists/bindHTTPFirewallPopup.go +++ b/internal/web/actions/default/servers/iplists/bindHTTPFirewallPopup.go @@ -42,6 +42,9 @@ func (this *BindHTTPFirewallPopupAction) RunGet(params struct { for _, ref := range inboundConfig.PublicDenyListRefs { selectedIds = append(selectedIds, ref.ListId) } + for _, ref := range inboundConfig.PublicGreyListRefs { + selectedIds = append(selectedIds, ref.ListId) + } } // 公共的名单 diff --git a/internal/web/actions/default/servers/iplists/createIPPopup.go b/internal/web/actions/default/servers/iplists/createIPPopup.go index c38695b7..bd48eabc 100644 --- a/internal/web/actions/default/servers/iplists/createIPPopup.go +++ b/internal/web/actions/default/servers/iplists/createIPPopup.go @@ -60,7 +60,7 @@ func (this *CreateIPPopupAction) RunPost(params struct { CSRF *actionutils.CSRF }) { // 校验IPList - if params.ListId != firewallconfigs.GlobalListId { + if !firewallconfigs.IsGlobalListId(params.ListId) { existsResp, err := this.RPC().IPListRPC().ExistsEnabledIPList(this.AdminContext(), &pb.ExistsEnabledIPListRequest{IpListId: params.ListId}) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/iplists/httpFirewall.go b/internal/web/actions/default/servers/iplists/httpFirewall.go index 511b5f90..a023c68d 100644 --- a/internal/web/actions/default/servers/iplists/httpFirewall.go +++ b/internal/web/actions/default/servers/iplists/httpFirewall.go @@ -34,9 +34,11 @@ func (this *HttpFirewallAction) RunPost(params struct { refs = inboundConfig.PublicDenyListRefs case ipconfigs.IPListTypeWhite: refs = inboundConfig.PublicAllowListRefs + case ipconfigs.IPListTypeGrey: + refs = inboundConfig.PublicGreyListRefs } - listMaps := []maps.Map{} + var listMaps = []maps.Map{} for _, ref := range refs { listResp, err := this.RPC().IPListRPC().FindEnabledIPList(this.AdminContext(), &pb.FindEnabledIPListRequest{IpListId: ref.ListId}) if err != nil { diff --git a/internal/web/actions/default/servers/iplists/index.go b/internal/web/actions/default/servers/iplists/index.go index c6f38987..2ad38581 100644 --- a/internal/web/actions/default/servers/iplists/index.go +++ b/internal/web/actions/default/servers/iplists/index.go @@ -84,7 +84,7 @@ func (this *IndexAction) RunGet(params struct { var itemMaps = []maps.Map{} for _, result := range itemsResp.Results { var item = result.IpItem - expiredTime := "" + var expiredTime = "" if item.ExpiredAt > 0 { expiredTime = timeutil.FormatTime("Y-m-d H:i:s", item.ExpiredAt) } diff --git a/internal/web/actions/default/servers/iplists/utils.go b/internal/web/actions/default/servers/iplists/utils.go index fcc13183..774d5f88 100644 --- a/internal/web/actions/default/servers/iplists/utils.go +++ b/internal/web/actions/default/servers/iplists/utils.go @@ -7,6 +7,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ipconfigs" "github.com/iwind/TeaGo/maps" ) @@ -26,10 +27,12 @@ func InitIPList(action *actionutils.ParentAction, listId int64) error { var typeName = "" switch list.Type { - case "black": + case ipconfigs.IPListTypeBlack: typeName = "黑名单" - case "white": + case ipconfigs.IPListTypeWhite: typeName = "白名单" + case ipconfigs.IPListTypeGrey: + typeName = "灰名单" } // IP数量 diff --git a/internal/web/actions/default/servers/server/settings/waf/init.go b/internal/web/actions/default/servers/server/settings/waf/init.go index 8a26e942..7a1a1962 100644 --- a/internal/web/actions/default/servers/server/settings/waf/init.go +++ b/internal/web/actions/default/servers/server/settings/waf/init.go @@ -17,6 +17,7 @@ func init() { GetPost("", new(IndexAction)). Get("/ipadmin/allowList", new(ipadmin.AllowListAction)). Get("/ipadmin/denyList", new(ipadmin.DenyListAction)). + Get("/ipadmin/greyList", new(ipadmin.GreyListAction)). GetPost("/ipadmin/countries", new(ipadmin.CountriesAction)). Get("/ipadmin/selectCountriesPopup", new(ipadmin.SelectCountriesPopupAction)). Get("/ipadmin/selectProvincesPopup", new(ipadmin.SelectProvincesPopupAction)). diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/allowList.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/allowList.go index b2e9d1ee..95e709cf 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/allowList.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/allowList.go @@ -5,6 +5,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ipconfigs" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" "time" @@ -34,7 +35,7 @@ func (this *AllowListAction) RunGet(params struct { // 创建 if listId == 0 { - listId, err = dao.SharedIPListDAO.CreateIPListForServerId(this.AdminContext(), params.ServerId, "white") + listId, err = dao.SharedIPListDAO.CreateIPListForServerId(this.AdminContext(), params.ServerId, ipconfigs.IPListTypeWhite) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go index f5ee29e2..69e0b691 100644 --- a/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/denyList.go @@ -5,6 +5,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ipconfigs" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" "time" @@ -34,7 +35,7 @@ func (this *DenyListAction) RunGet(params struct { // 创建 if listId == 0 { - listId, err = dao.SharedIPListDAO.CreateIPListForServerId(this.AdminContext(), params.ServerId, "black") + listId, err = dao.SharedIPListDAO.CreateIPListForServerId(this.AdminContext(), params.ServerId, ipconfigs.IPListTypeBlack) if err != nil { this.ErrorPage(err) return diff --git a/internal/web/actions/default/servers/server/settings/waf/ipadmin/greyList.go b/internal/web/actions/default/servers/server/settings/waf/ipadmin/greyList.go new file mode 100644 index 00000000..1293d004 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/waf/ipadmin/greyList.go @@ -0,0 +1,140 @@ +package ipadmin + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ipconfigs" + "github.com/iwind/TeaGo/maps" + timeutil "github.com/iwind/TeaGo/utils/time" + "time" +) + +type GreyListAction struct { + actionutils.ParentAction +} + +func (this *GreyListAction) Init() { + this.Nav("", "setting", "greyList") + this.SecondMenu("waf") +} + +func (this *GreyListAction) RunGet(params struct { + FirewallPolicyId int64 + ServerId int64 +}) { + this.Data["featureIsOn"] = true + this.Data["firewallPolicyId"] = params.FirewallPolicyId + + listId, err := dao.SharedIPListDAO.FindGreyIPListIdWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + + // 创建 + if listId == 0 { + listId, err = dao.SharedIPListDAO.CreateIPListForServerId(this.AdminContext(), params.ServerId, ipconfigs.IPListTypeGrey) + if err != nil { + this.ErrorPage(err) + return + } + } + + this.Data["listId"] = listId + + // 数量 + countResp, err := this.RPC().IPItemRPC().CountIPItemsWithListId(this.AdminContext(), &pb.CountIPItemsWithListIdRequest{IpListId: listId}) + if err != nil { + this.ErrorPage(err) + return + } + var count = countResp.Count + var page = this.NewPage(count) + this.Data["page"] = page.AsHTML() + + // 列表 + itemsResp, err := this.RPC().IPItemRPC().ListIPItemsWithListId(this.AdminContext(), &pb.ListIPItemsWithListIdRequest{ + IpListId: listId, + Offset: page.Offset, + Size: page.Size, + }) + if err != nil { + this.ErrorPage(err) + return + } + var itemMaps = []maps.Map{} + for _, item := range itemsResp.IpItems { + var expiredTime = "" + if item.ExpiredAt > 0 { + expiredTime = timeutil.FormatTime("Y-m-d H:i:s", item.ExpiredAt) + } + + // policy + var sourcePolicyMap = maps.Map{"id": 0} + if item.SourceHTTPFirewallPolicy != nil { + sourcePolicyMap = maps.Map{ + "id": item.SourceHTTPFirewallPolicy.Id, + "name": item.SourceHTTPFirewallPolicy.Name, + "serverId": item.SourceHTTPFirewallPolicy.ServerId, + } + } + + // group + var sourceGroupMap = maps.Map{"id": 0} + if item.SourceHTTPFirewallRuleGroup != nil { + sourceGroupMap = maps.Map{ + "id": item.SourceHTTPFirewallRuleGroup.Id, + "name": item.SourceHTTPFirewallRuleGroup.Name, + } + } + + // set + var sourceSetMap = maps.Map{"id": 0} + if item.SourceHTTPFirewallRuleSet != nil { + sourceSetMap = maps.Map{ + "id": item.SourceHTTPFirewallRuleSet.Id, + "name": item.SourceHTTPFirewallRuleSet.Name, + } + } + + // server + var sourceServerMap = maps.Map{"id": 0} + if item.SourceServer != nil { + sourceServerMap = maps.Map{ + "id": item.SourceServer.Id, + "name": item.SourceServer.Name, + } + } + + itemMaps = append(itemMaps, maps.Map{ + "id": item.Id, + "value": item.Value, + "ipFrom": item.IpFrom, + "ipTo": item.IpTo, + "createdTime": timeutil.FormatTime("Y-m-d", item.CreatedAt), + "expiredTime": expiredTime, + "lifeSeconds": item.ExpiredAt - time.Now().Unix(), + "reason": item.Reason, + "type": item.Type, + "isExpired": item.ExpiredAt > 0 && item.ExpiredAt < time.Now().Unix(), + "eventLevelName": firewallconfigs.FindFirewallEventLevelName(item.EventLevel), + "sourcePolicy": sourcePolicyMap, + "sourceGroup": sourceGroupMap, + "sourceSet": sourceSetMap, + "sourceServer": sourceServerMap, + }) + } + this.Data["items"] = itemMaps + + // WAF是否启用 + webConfig, err := dao.SharedHTTPWebDAO.FindWebConfigWithServerId(this.AdminContext(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["wafIsOn"] = webConfig.FirewallRef != nil && webConfig.FirewallRef.IsOn + + this.Show() +} diff --git a/web/public/js/components/iplist/ip-list-table.js b/web/public/js/components/iplist/ip-list-table.js index dab64808..dd469835 100644 --- a/web/public/js/components/iplist/ip-list-table.js +++ b/web/public/js/components/iplist/ip-list-table.js @@ -154,7 +154,7 @@ Vue.component("ip-list-table", {
选中后自动在响应Header中增加
选中后自动在响应报头中增加