mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 05:00:25 +08:00 
			
		
		
		
	waf/ip名单有变更立即发送通知
This commit is contained in:
		@@ -2,6 +2,7 @@ package ipadmin
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/waf/ipadmin/ipadminutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/models"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
@@ -32,11 +33,12 @@ func (this *CreateIPPopupAction) RunGet(params struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *CreateIPPopupAction) RunPost(params struct {
 | 
			
		||||
	ListId    int64
 | 
			
		||||
	IpFrom    string
 | 
			
		||||
	IpTo      string
 | 
			
		||||
	ExpiredAt int64
 | 
			
		||||
	Reason    string
 | 
			
		||||
	FirewallPolicyId int64
 | 
			
		||||
	ListId           int64
 | 
			
		||||
	IpFrom           string
 | 
			
		||||
	IpTo             string
 | 
			
		||||
	ExpiredAt        int64
 | 
			
		||||
	Reason           string
 | 
			
		||||
 | 
			
		||||
	Must *actions.Must
 | 
			
		||||
	CSRF *actionutils.CSRF
 | 
			
		||||
@@ -60,5 +62,12 @@ func (this *CreateIPPopupAction) RunPost(params struct {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 发送通知
 | 
			
		||||
	err = ipadminutils.NotifyUpdateToClustersWithFirewallPolicyId(this.AdminContext(), params.FirewallPolicyId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package ipadmin
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/waf/ipadmin/ipadminutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -10,7 +11,8 @@ type DeleteIPAction struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *DeleteIPAction) RunPost(params struct {
 | 
			
		||||
	ItemId int64
 | 
			
		||||
	FirewallPolicyId int64
 | 
			
		||||
	ItemId           int64
 | 
			
		||||
}) {
 | 
			
		||||
	// TODO 判断权限
 | 
			
		||||
 | 
			
		||||
@@ -20,5 +22,12 @@ func (this *DeleteIPAction) RunPost(params struct {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 发送通知
 | 
			
		||||
	err = ipadminutils.NotifyUpdateToClustersWithFirewallPolicyId(this.AdminContext(), params.FirewallPolicyId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,35 @@
 | 
			
		||||
package ipadminutils
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/nodes/nodeutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/messageconfigs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/lists"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 通知使用此WAF策略的集群更新
 | 
			
		||||
func NotifyUpdateToClustersWithFirewallPolicyId(ctx context.Context, firewallPolicyId int64) error {
 | 
			
		||||
	client, err := rpc.SharedRPC()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	resp, err := client.ServerRPC().FindAllEnabledServersWithHTTPFirewallPolicyId(ctx, &pb.FindAllEnabledServersWithHTTPFirewallPolicyIdRequest{FirewallPolicyId: firewallPolicyId})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	clusterIds := []int64{}
 | 
			
		||||
	for _, server := range resp.Servers {
 | 
			
		||||
		if !lists.ContainsInt64(clusterIds, server.Cluster.Id) {
 | 
			
		||||
			clusterIds = append(clusterIds, server.Cluster.Id)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for _, clusterId := range clusterIds {
 | 
			
		||||
		_, err = nodeutils.SendMessageToCluster(ctx, clusterId, messageconfigs.MessageCodeIPListChanged, &messageconfigs.IPListChangedMessage{}, 3)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
@@ -2,6 +2,7 @@ package ipadmin
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/waf/ipadmin/ipadminutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
@@ -41,7 +42,8 @@ func (this *UpdateIPPopupAction) RunGet(params struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *UpdateIPPopupAction) RunPost(params struct {
 | 
			
		||||
	ItemId int64
 | 
			
		||||
	FirewallPolicyId int64
 | 
			
		||||
	ItemId           int64
 | 
			
		||||
 | 
			
		||||
	IpFrom    string
 | 
			
		||||
	IpTo      string
 | 
			
		||||
@@ -70,5 +72,12 @@ func (this *UpdateIPPopupAction) RunPost(params struct {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 发送通知
 | 
			
		||||
	err = ipadminutils.NotifyUpdateToClustersWithFirewallPolicyId(this.AdminContext(), params.FirewallPolicyId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,7 @@ func (this *UserMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam
 | 
			
		||||
	action.Data["teaTabbar"] = []map[string]interface{}{}
 | 
			
		||||
	action.Data["teaVersion"] = teaconst.Version
 | 
			
		||||
	action.Data["teaIsSuper"] = false
 | 
			
		||||
	action.Data["teaDemoEnabled"] = teaconst.IsDemo
 | 
			
		||||
 | 
			
		||||
	// 菜单
 | 
			
		||||
	action.Data["firstMenuItem"] = ""
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ Tea.context(function () {
 | 
			
		||||
	this.moreOptionsVisible = false
 | 
			
		||||
	this.globalChangedClusters = []
 | 
			
		||||
	this.globalMessageBadge = 0
 | 
			
		||||
	this.teaDemoEnabled = false
 | 
			
		||||
 | 
			
		||||
	if (typeof this.leftMenuItemIsDisabled == "undefined") {
 | 
			
		||||
		this.leftMenuItemIsDisabled = false
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
<h3 v-if="type == 'black'">添加IP到黑名单</h3>
 | 
			
		||||
 | 
			
		||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
			
		||||
	<input type="hidden" name="firewallPolicyId" :value="firewallPolicyId"/>
 | 
			
		||||
	<input type="hidden" name="listId" :value="listId"/>
 | 
			
		||||
	<csrf-token></csrf-token>
 | 
			
		||||
	<table class="ui table definition selectable">
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
Tea.context(function () {
 | 
			
		||||
	this.updateItem = function (itemId) {
 | 
			
		||||
		teaweb.popup(Tea.url(".updateIPPopup", {itemId: itemId}), {
 | 
			
		||||
		teaweb.popup(Tea.url(".updateIPPopup?firewallPolicyId=" + this.firewallPolicyId, {itemId: itemId}), {
 | 
			
		||||
			height: "23em",
 | 
			
		||||
			callback: function () {
 | 
			
		||||
				teaweb.success("保存成功", function () {
 | 
			
		||||
@@ -15,6 +15,7 @@ Tea.context(function () {
 | 
			
		||||
		teaweb.confirm("确定要删除这个IP吗?", function () {
 | 
			
		||||
			that.$post(".deleteIP")
 | 
			
		||||
				.params({
 | 
			
		||||
					"firewallPolicyId": this.firewallPolicyId,
 | 
			
		||||
					"itemId": itemId
 | 
			
		||||
				})
 | 
			
		||||
				.refresh()
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
<h3>修改IP</h3>
 | 
			
		||||
 | 
			
		||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
			
		||||
	<input type="hidden" name="firewallPolicyId" :value="firewallPolicyId"/>
 | 
			
		||||
	<input type="hidden" name="itemId" :value="item.id"/>
 | 
			
		||||
	<csrf-token></csrf-token>
 | 
			
		||||
	<table class="ui table definition selectable">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user