2020-11-07 19:40:24 +08:00
|
|
|
|
package services
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"context"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
2021-01-03 21:37:47 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
2020-11-07 19:40:24 +08:00
|
|
|
|
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
|
2021-06-23 13:12:54 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
2020-11-07 19:40:24 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
2021-11-17 20:25:36 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs"
|
2021-01-03 21:37:47 +08:00
|
|
|
|
"net"
|
2021-11-21 08:43:26 +08:00
|
|
|
|
"time"
|
2020-11-07 19:40:24 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// IPItemService IP条目相关服务
|
2020-11-07 19:40:24 +08:00
|
|
|
|
type IPItemService struct {
|
2020-11-24 15:02:44 +08:00
|
|
|
|
BaseService
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// CreateIPItem 创建IP
|
2020-11-07 19:40:24 +08:00
|
|
|
|
func (this *IPItemService) CreateIPItem(ctx context.Context, req *pb.CreateIPItemRequest) (*pb.CreateIPItemResponse, error) {
|
|
|
|
|
|
// 校验请求
|
2021-07-18 15:52:34 +08:00
|
|
|
|
userType, _, userId, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeUser, rpcutils.UserTypeNode, rpcutils.UserTypeDNS)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-01-03 21:37:47 +08:00
|
|
|
|
if len(req.IpFrom) == 0 {
|
|
|
|
|
|
return nil, errors.New("'ipFrom' should not be empty")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-31 21:42:15 +08:00
|
|
|
|
var ipFrom = net.ParseIP(req.IpFrom)
|
2021-01-03 21:37:47 +08:00
|
|
|
|
if ipFrom == nil {
|
|
|
|
|
|
return nil, errors.New("invalid 'ipFrom'")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(req.IpTo) > 0 {
|
|
|
|
|
|
ipTo := net.ParseIP(req.IpTo)
|
|
|
|
|
|
if ipTo == nil {
|
|
|
|
|
|
return nil, errors.New("invalid 'ipTo'")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2021-07-18 15:52:34 +08:00
|
|
|
|
if userType == rpcutils.UserTypeUser {
|
|
|
|
|
|
if userId <= 0 {
|
|
|
|
|
|
return nil, errors.New("invalid userId")
|
|
|
|
|
|
} else {
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, req.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2021-01-03 20:18:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-02 15:25:40 +08:00
|
|
|
|
if len(req.Type) == 0 {
|
|
|
|
|
|
req.Type = models.IPItemTypeIPv4
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
2020-11-10 09:22:10 +08:00
|
|
|
|
|
2021-07-18 15:52:34 +08:00
|
|
|
|
// 删除以前的
|
2021-12-10 11:12:34 +08:00
|
|
|
|
err = models.SharedIPItemDAO.DeleteOldItem(tx, req.IpListId, req.IpFrom, req.IpTo)
|
2021-07-18 15:52:34 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-31 21:42:15 +08:00
|
|
|
|
itemId, err := models.SharedIPItemDAO.CreateIPItem(tx, req.IpListId, req.IpFrom, req.IpTo, req.ExpiredAt, req.Reason, req.Type, req.EventLevel, req.NodeId, req.ServerId, req.SourceNodeId, req.SourceServerId, req.SourceHTTPFirewallPolicyId, req.SourceHTTPFirewallRuleGroupId, req.SourceHTTPFirewallRuleSetId, true)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-11-07 19:40:24 +08:00
|
|
|
|
return &pb.CreateIPItemResponse{IpItemId: itemId}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-31 21:42:15 +08:00
|
|
|
|
// CreateIPItems 创建一组IP
|
|
|
|
|
|
func (this *IPItemService) CreateIPItems(ctx context.Context, req *pb.CreateIPItemsRequest) (*pb.CreateIPItemsResponse, error) {
|
|
|
|
|
|
// 校验请求
|
|
|
|
|
|
userType, _, userId, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeUser, rpcutils.UserTypeNode, rpcutils.UserTypeDNS)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
|
|
|
|
|
|
// 校验
|
|
|
|
|
|
for _, item := range req.IpItems {
|
|
|
|
|
|
if len(item.IpFrom) == 0 {
|
|
|
|
|
|
return nil, errors.New("'ipFrom' should not be empty")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var ipFrom = net.ParseIP(item.IpFrom)
|
|
|
|
|
|
if ipFrom == nil {
|
|
|
|
|
|
return nil, errors.New("invalid 'ipFrom'")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(item.IpTo) > 0 {
|
|
|
|
|
|
ipTo := net.ParseIP(item.IpTo)
|
|
|
|
|
|
if ipTo == nil {
|
|
|
|
|
|
return nil, errors.New("invalid 'ipTo'")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if userType == rpcutils.UserTypeUser {
|
|
|
|
|
|
if userId <= 0 {
|
|
|
|
|
|
return nil, errors.New("invalid userId")
|
|
|
|
|
|
} else {
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, item.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(item.Type) == 0 {
|
|
|
|
|
|
item.Type = models.IPItemTypeIPv4
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建
|
|
|
|
|
|
// TODO 需要区分不同的用户
|
|
|
|
|
|
var ipItemIds = []int64{}
|
|
|
|
|
|
for index, item := range req.IpItems {
|
|
|
|
|
|
var shouldNotify = index == len(req.IpItems)-1
|
|
|
|
|
|
|
|
|
|
|
|
// 删除以前的
|
|
|
|
|
|
err = models.SharedIPItemDAO.DeleteOldItem(tx, item.IpListId, item.IpFrom, item.IpTo)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
itemId, err := models.SharedIPItemDAO.CreateIPItem(tx, item.IpListId, item.IpFrom, item.IpTo, item.ExpiredAt, item.Reason, item.Type, item.EventLevel, item.NodeId, item.ServerId, item.SourceNodeId, item.SourceServerId, item.SourceHTTPFirewallPolicyId, item.SourceHTTPFirewallRuleGroupId, item.SourceHTTPFirewallRuleSetId, shouldNotify)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
ipItemIds = append(ipItemIds, itemId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.CreateIPItemsResponse{
|
|
|
|
|
|
IpItemIds: ipItemIds,
|
|
|
|
|
|
}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// UpdateIPItem 修改IP
|
2020-11-13 18:22:22 +08:00
|
|
|
|
func (this *IPItemService) UpdateIPItem(ctx context.Context, req *pb.UpdateIPItemRequest) (*pb.RPCSuccess, error) {
|
2020-11-07 19:40:24 +08:00
|
|
|
|
// 校验请求
|
2022-09-17 16:07:37 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2021-01-03 20:18:07 +08:00
|
|
|
|
if userId > 0 {
|
|
|
|
|
|
listId, err := models.SharedIPItemDAO.FindItemListId(tx, req.IpItemId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, listId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-02 15:25:40 +08:00
|
|
|
|
if len(req.Type) == 0 {
|
|
|
|
|
|
req.Type = models.IPItemTypeIPv4
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
2021-01-17 16:48:00 +08:00
|
|
|
|
|
2021-02-06 17:38:04 +08:00
|
|
|
|
err = models.SharedIPItemDAO.UpdateIPItem(tx, req.IpItemId, req.IpFrom, req.IpTo, req.ExpiredAt, req.Reason, req.Type, req.EventLevel)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-11-24 15:02:44 +08:00
|
|
|
|
return this.Success()
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// DeleteIPItem 删除IP
|
2020-11-13 18:22:22 +08:00
|
|
|
|
func (this *IPItemService) DeleteIPItem(ctx context.Context, req *pb.DeleteIPItemRequest) (*pb.RPCSuccess, error) {
|
2020-11-07 19:40:24 +08:00
|
|
|
|
// 校验请求
|
2022-09-17 16:07:37 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-10 15:11:48 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2022-05-10 15:11:48 +08:00
|
|
|
|
// 如果是使用IPItemId删除
|
|
|
|
|
|
if req.IpItemId > 0 {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
err = models.SharedIPItemDAO.DisableIPItem(tx, req.IpItemId, userId)
|
2021-01-03 20:18:07 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-10 15:11:48 +08:00
|
|
|
|
// 如果是使用ipFrom+ipTo删除
|
|
|
|
|
|
if len(req.IpFrom) > 0 {
|
|
|
|
|
|
// 检查IP列表
|
2023-04-03 10:02:17 +08:00
|
|
|
|
if req.IpListId > 0 && userId > 0 && req.IpListId != firewallconfigs.GlobalListId {
|
2022-05-10 15:11:48 +08:00
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, req.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = models.SharedIPItemDAO.DisableIPItemsWithIP(tx, req.IpFrom, req.IpTo, userId, req.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
2021-01-17 16:48:00 +08:00
|
|
|
|
|
2020-11-24 15:02:44 +08:00
|
|
|
|
return this.Success()
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-21 09:42:57 +08:00
|
|
|
|
// DeleteIPItems 批量删除IP
|
|
|
|
|
|
func (this *IPItemService) DeleteIPItems(ctx context.Context, req *pb.DeleteIPItemsRequest) (*pb.RPCSuccess, error) {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2021-11-21 09:42:57 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-11-21 09:42:57 +08:00
|
|
|
|
for _, itemId := range req.IpItemIds {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
err = models.SharedIPItemDAO.DisableIPItem(tx, itemId, userId)
|
2021-11-21 09:42:57 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.Success()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// CountIPItemsWithListId 计算IP数量
|
2020-11-12 14:41:28 +08:00
|
|
|
|
func (this *IPItemService) CountIPItemsWithListId(ctx context.Context, req *pb.CountIPItemsWithListIdRequest) (*pb.RPCCountResponse, error) {
|
2020-11-07 19:40:24 +08:00
|
|
|
|
// 校验请求
|
2022-09-17 16:07:37 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2021-01-03 20:18:07 +08:00
|
|
|
|
if userId > 0 {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
// 检查用户所属名单
|
|
|
|
|
|
if req.IpListId != firewallconfigs.GlobalListId {
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, req.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2021-01-03 20:18:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-03 10:02:17 +08:00
|
|
|
|
count, err := models.SharedIPItemDAO.CountIPItemsWithListId(tx, req.IpListId, userId, req.Keyword, req.IpFrom, req.IpTo, req.EventLevel)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2020-11-24 17:36:47 +08:00
|
|
|
|
return this.SuccessCount(count)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// ListIPItemsWithListId 列出单页的IP
|
2020-11-07 19:40:24 +08:00
|
|
|
|
func (this *IPItemService) ListIPItemsWithListId(ctx context.Context, req *pb.ListIPItemsWithListIdRequest) (*pb.ListIPItemsWithListIdResponse, error) {
|
|
|
|
|
|
// 校验请求
|
2022-09-17 16:07:37 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2021-01-03 20:18:07 +08:00
|
|
|
|
if userId > 0 {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
// 检查用户所属名单
|
|
|
|
|
|
if req.IpListId != firewallconfigs.GlobalListId {
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, req.IpListId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2021-01-03 20:18:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-03 10:02:17 +08:00
|
|
|
|
items, err := models.SharedIPItemDAO.ListIPItemsWithListId(tx, req.IpListId, userId, req.Keyword, req.IpFrom, req.IpTo, req.EventLevel, req.Offset, req.Size)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
result := []*pb.IPItem{}
|
|
|
|
|
|
for _, item := range items {
|
2021-02-02 15:25:40 +08:00
|
|
|
|
if len(item.Type) == 0 {
|
|
|
|
|
|
item.Type = models.IPItemTypeIPv4
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-16 16:10:48 +08:00
|
|
|
|
// server
|
|
|
|
|
|
var pbSourceServer *pb.Server
|
|
|
|
|
|
if item.SourceServerId > 0 {
|
|
|
|
|
|
serverName, err := models.SharedServerDAO.FindEnabledServerName(tx, int64(item.SourceServerId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceServer = &pb.Server{
|
|
|
|
|
|
Id: int64(item.SourceServerId),
|
|
|
|
|
|
Name: serverName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF策略
|
|
|
|
|
|
var pbSourcePolicy *pb.HTTPFirewallPolicy
|
|
|
|
|
|
if item.SourceHTTPFirewallPolicyId > 0 {
|
|
|
|
|
|
policy, err := models.SharedHTTPFirewallPolicyDAO.FindEnabledHTTPFirewallPolicyBasic(tx, int64(item.SourceHTTPFirewallPolicyId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if policy != nil {
|
|
|
|
|
|
pbSourcePolicy = &pb.HTTPFirewallPolicy{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallPolicyId),
|
|
|
|
|
|
Name: policy.Name,
|
|
|
|
|
|
ServerId: int64(policy.ServerId),
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF分组
|
|
|
|
|
|
var pbSourceGroup *pb.HTTPFirewallRuleGroup
|
|
|
|
|
|
if item.SourceHTTPFirewallRuleGroupId > 0 {
|
|
|
|
|
|
groupName, err := models.SharedHTTPFirewallRuleGroupDAO.FindHTTPFirewallRuleGroupName(tx, int64(item.SourceHTTPFirewallRuleGroupId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceGroup = &pb.HTTPFirewallRuleGroup{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallRuleGroupId),
|
|
|
|
|
|
Name: groupName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF规则集
|
|
|
|
|
|
var pbSourceSet *pb.HTTPFirewallRuleSet
|
|
|
|
|
|
if item.SourceHTTPFirewallRuleSetId > 0 {
|
|
|
|
|
|
setName, err := models.SharedHTTPFirewallRuleSetDAO.FindHTTPFirewallRuleSetName(tx, int64(item.SourceHTTPFirewallRuleSetId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceSet = &pb.HTTPFirewallRuleSet{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallRuleSetId),
|
|
|
|
|
|
Name: setName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-11-07 19:40:24 +08:00
|
|
|
|
result = append(result, &pb.IPItem{
|
2021-11-16 16:10:48 +08:00
|
|
|
|
Id: int64(item.Id),
|
|
|
|
|
|
IpFrom: item.IpFrom,
|
|
|
|
|
|
IpTo: item.IpTo,
|
|
|
|
|
|
Version: int64(item.Version),
|
|
|
|
|
|
CreatedAt: int64(item.CreatedAt),
|
|
|
|
|
|
ExpiredAt: int64(item.ExpiredAt),
|
|
|
|
|
|
Reason: item.Reason,
|
|
|
|
|
|
Type: item.Type,
|
|
|
|
|
|
EventLevel: item.EventLevel,
|
|
|
|
|
|
NodeId: int64(item.NodeId),
|
|
|
|
|
|
ServerId: int64(item.ServerId),
|
|
|
|
|
|
SourceNodeId: int64(item.SourceNodeId),
|
|
|
|
|
|
SourceServerId: int64(item.SourceServerId),
|
|
|
|
|
|
SourceHTTPFirewallPolicyId: int64(item.SourceHTTPFirewallPolicyId),
|
|
|
|
|
|
SourceHTTPFirewallRuleGroupId: int64(item.SourceHTTPFirewallRuleGroupId),
|
|
|
|
|
|
SourceHTTPFirewallRuleSetId: int64(item.SourceHTTPFirewallRuleSetId),
|
|
|
|
|
|
SourceServer: pbSourceServer,
|
|
|
|
|
|
SourceHTTPFirewallPolicy: pbSourcePolicy,
|
|
|
|
|
|
SourceHTTPFirewallRuleGroup: pbSourceGroup,
|
|
|
|
|
|
SourceHTTPFirewallRuleSet: pbSourceSet,
|
2022-03-22 22:11:32 +08:00
|
|
|
|
IsRead: item.IsRead,
|
2020-11-07 19:40:24 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.ListIPItemsWithListIdResponse{IpItems: result}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// FindEnabledIPItem 查找单个IP
|
2020-11-07 19:40:24 +08:00
|
|
|
|
func (this *IPItemService) FindEnabledIPItem(ctx context.Context, req *pb.FindEnabledIPItemRequest) (*pb.FindEnabledIPItemResponse, error) {
|
|
|
|
|
|
// 校验请求
|
2022-09-17 16:07:37 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
|
|
|
|
|
item, err := models.SharedIPItemDAO.FindEnabledIPItem(tx, req.IpItemId)
|
2020-11-07 19:40:24 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if item == nil {
|
|
|
|
|
|
return &pb.FindEnabledIPItemResponse{IpItem: nil}, nil
|
|
|
|
|
|
}
|
2021-01-03 20:18:07 +08:00
|
|
|
|
|
|
|
|
|
|
if userId > 0 {
|
|
|
|
|
|
err = models.SharedIPListDAO.CheckUserIPList(tx, userId, int64(item.ListId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-02 15:25:40 +08:00
|
|
|
|
if len(item.Type) == 0 {
|
|
|
|
|
|
item.Type = models.IPItemTypeIPv4
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-11-07 19:40:24 +08:00
|
|
|
|
return &pb.FindEnabledIPItemResponse{IpItem: &pb.IPItem{
|
2021-02-06 17:38:04 +08:00
|
|
|
|
Id: int64(item.Id),
|
|
|
|
|
|
IpFrom: item.IpFrom,
|
|
|
|
|
|
IpTo: item.IpTo,
|
|
|
|
|
|
Version: int64(item.Version),
|
2021-11-15 11:31:27 +08:00
|
|
|
|
CreatedAt: int64(item.CreatedAt),
|
2021-02-06 17:38:04 +08:00
|
|
|
|
ExpiredAt: int64(item.ExpiredAt),
|
|
|
|
|
|
Reason: item.Reason,
|
|
|
|
|
|
Type: item.Type,
|
|
|
|
|
|
EventLevel: item.EventLevel,
|
2021-11-16 16:10:48 +08:00
|
|
|
|
NodeId: int64(item.NodeId),
|
|
|
|
|
|
ServerId: int64(item.ServerId),
|
2020-11-07 19:40:24 +08:00
|
|
|
|
}}, nil
|
|
|
|
|
|
}
|
2020-11-09 10:44:00 +08:00
|
|
|
|
|
2021-06-23 13:12:54 +08:00
|
|
|
|
// ListIPItemsAfterVersion 根据版本列出一组IP
|
2020-11-09 10:44:00 +08:00
|
|
|
|
func (this *IPItemService) ListIPItemsAfterVersion(ctx context.Context, req *pb.ListIPItemsAfterVersionRequest) (*pb.ListIPItemsAfterVersionResponse, error) {
|
|
|
|
|
|
// 校验请求
|
2021-07-11 18:05:57 +08:00
|
|
|
|
_, _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin, rpcutils.UserTypeNode)
|
2020-11-09 10:44:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
|
2020-11-09 10:44:00 +08:00
|
|
|
|
result := []*pb.IPItem{}
|
2021-01-01 23:31:30 +08:00
|
|
|
|
items, err := models.SharedIPItemDAO.ListIPItemsAfterVersion(tx, req.Version, req.Size)
|
2020-11-09 10:44:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, item := range items {
|
2021-11-21 08:43:26 +08:00
|
|
|
|
// 是否已过期
|
|
|
|
|
|
if item.ExpiredAt > 0 && int64(item.ExpiredAt) <= time.Now().Unix() {
|
|
|
|
|
|
item.State = models.IPItemStateDisabled
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-02 15:25:40 +08:00
|
|
|
|
if len(item.Type) == 0 {
|
|
|
|
|
|
item.Type = models.IPItemTypeIPv4
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-02-06 17:38:04 +08:00
|
|
|
|
// List类型
|
2021-11-17 16:14:55 +08:00
|
|
|
|
list, err := models.SharedIPListDAO.FindIPListCacheable(tx, int64(item.ListId))
|
2021-02-06 17:38:04 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2021-11-17 16:14:55 +08:00
|
|
|
|
if list == nil {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果已经删除
|
|
|
|
|
|
if list.State != models.IPListStateEnabled {
|
|
|
|
|
|
item.State = models.IPItemStateDisabled
|
|
|
|
|
|
}
|
2021-02-06 17:38:04 +08:00
|
|
|
|
|
2020-11-09 10:44:00 +08:00
|
|
|
|
result = append(result, &pb.IPItem{
|
2021-02-06 17:38:04 +08:00
|
|
|
|
Id: int64(item.Id),
|
|
|
|
|
|
IpFrom: item.IpFrom,
|
|
|
|
|
|
IpTo: item.IpTo,
|
|
|
|
|
|
Version: int64(item.Version),
|
2021-11-15 11:31:27 +08:00
|
|
|
|
CreatedAt: int64(item.CreatedAt),
|
2021-02-06 17:38:04 +08:00
|
|
|
|
ExpiredAt: int64(item.ExpiredAt),
|
|
|
|
|
|
Reason: "", // 这里我们不需要这个数据
|
|
|
|
|
|
ListId: int64(item.ListId),
|
|
|
|
|
|
IsDeleted: item.State == 0,
|
|
|
|
|
|
Type: item.Type,
|
|
|
|
|
|
EventLevel: item.EventLevel,
|
2021-11-17 16:14:55 +08:00
|
|
|
|
ListType: list.Type,
|
2022-03-22 22:11:32 +08:00
|
|
|
|
IsGlobal: list.IsPublic && list.IsGlobal,
|
2021-11-16 16:10:48 +08:00
|
|
|
|
NodeId: int64(item.NodeId),
|
|
|
|
|
|
ServerId: int64(item.ServerId),
|
2020-11-09 10:44:00 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.ListIPItemsAfterVersionResponse{IpItems: result}, nil
|
|
|
|
|
|
}
|
2021-06-23 13:12:54 +08:00
|
|
|
|
|
|
|
|
|
|
// CheckIPItemStatus 检查IP状态
|
|
|
|
|
|
func (this *IPItemService) CheckIPItemStatus(ctx context.Context, req *pb.CheckIPItemStatusRequest) (*pb.CheckIPItemStatusResponse, error) {
|
2022-07-22 14:35:17 +08:00
|
|
|
|
_, err := this.ValidateAdmin(ctx)
|
2021-06-23 13:12:54 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 校验IP
|
|
|
|
|
|
ip := net.ParseIP(req.Ip)
|
|
|
|
|
|
if len(ip) == 0 {
|
|
|
|
|
|
return &pb.CheckIPItemStatusResponse{
|
|
|
|
|
|
IsOk: false,
|
|
|
|
|
|
Error: "请输入正确的IP",
|
|
|
|
|
|
}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
ipLong := utils.IP2Long(req.Ip)
|
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-06-23 13:12:54 +08:00
|
|
|
|
|
|
|
|
|
|
// 名单类型
|
2021-11-17 19:51:00 +08:00
|
|
|
|
list, err := models.SharedIPListDAO.FindEnabledIPList(tx, req.IpListId, nil)
|
2021-06-23 13:12:54 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if list == nil {
|
|
|
|
|
|
return &pb.CheckIPItemStatusResponse{
|
|
|
|
|
|
IsOk: false,
|
|
|
|
|
|
Error: "IP名单不存在",
|
|
|
|
|
|
}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
var isAllowed = list.Type == "white"
|
|
|
|
|
|
|
|
|
|
|
|
// 检查IP名单
|
|
|
|
|
|
item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, req.IpListId, ipLong)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if item != nil {
|
|
|
|
|
|
return &pb.CheckIPItemStatusResponse{
|
|
|
|
|
|
IsOk: true,
|
|
|
|
|
|
Error: "",
|
|
|
|
|
|
IsFound: true,
|
|
|
|
|
|
IsAllowed: isAllowed,
|
|
|
|
|
|
IpItem: &pb.IPItem{
|
|
|
|
|
|
Id: int64(item.Id),
|
|
|
|
|
|
IpFrom: item.IpFrom,
|
|
|
|
|
|
IpTo: item.IpTo,
|
2021-11-15 11:31:27 +08:00
|
|
|
|
CreatedAt: int64(item.CreatedAt),
|
2021-06-23 13:12:54 +08:00
|
|
|
|
ExpiredAt: int64(item.ExpiredAt),
|
|
|
|
|
|
Reason: item.Reason,
|
|
|
|
|
|
Type: item.Type,
|
|
|
|
|
|
EventLevel: item.EventLevel,
|
|
|
|
|
|
},
|
|
|
|
|
|
}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.CheckIPItemStatusResponse{
|
|
|
|
|
|
IsOk: true,
|
|
|
|
|
|
Error: "",
|
|
|
|
|
|
IsFound: false,
|
|
|
|
|
|
IsAllowed: false,
|
|
|
|
|
|
IpItem: nil,
|
|
|
|
|
|
}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ExistsEnabledIPItem 检查IP是否存在
|
|
|
|
|
|
func (this *IPItemService) ExistsEnabledIPItem(ctx context.Context, req *pb.ExistsEnabledIPItemRequest) (*pb.ExistsEnabledIPItemResponse, error) {
|
2022-07-22 14:35:17 +08:00
|
|
|
|
_, err := this.ValidateAdmin(ctx)
|
2021-06-23 13:12:54 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
b, err := models.SharedIPItemDAO.ExistsEnabledItem(tx, req.IpItemId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return &pb.ExistsEnabledIPItemResponse{Exists: b}, nil
|
|
|
|
|
|
}
|
2021-11-17 19:51:00 +08:00
|
|
|
|
|
|
|
|
|
|
// CountAllEnabledIPItems 计算所有IP数量
|
|
|
|
|
|
func (this *IPItemService) CountAllEnabledIPItems(ctx context.Context, req *pb.CountAllEnabledIPItemsRequest) (*pb.RPCCountResponse, error) {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
adminId, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-03 10:02:17 +08:00
|
|
|
|
if adminId > 0 {
|
|
|
|
|
|
userId = req.UserId
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-17 19:51:00 +08:00
|
|
|
|
var tx = this.NullTx()
|
2021-11-17 20:25:36 +08:00
|
|
|
|
var listId int64 = 0
|
|
|
|
|
|
if req.GlobalOnly {
|
|
|
|
|
|
listId = firewallconfigs.GlobalListId
|
|
|
|
|
|
}
|
2023-04-03 10:02:17 +08:00
|
|
|
|
count, err := models.SharedIPItemDAO.CountAllEnabledIPItems(tx, userId, req.Keyword, req.Ip, listId, req.Unread, req.EventLevel, req.ListType)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.SuccessCount(count)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ListAllEnabledIPItems 搜索IP
|
|
|
|
|
|
func (this *IPItemService) ListAllEnabledIPItems(ctx context.Context, req *pb.ListAllEnabledIPItemsRequest) (*pb.ListAllEnabledIPItemsResponse, error) {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
adminId, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-03 10:02:17 +08:00
|
|
|
|
if adminId > 0 {
|
|
|
|
|
|
userId = req.UserId
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-17 19:51:00 +08:00
|
|
|
|
var results = []*pb.ListAllEnabledIPItemsResponse_Result{}
|
|
|
|
|
|
var tx = this.NullTx()
|
2021-11-17 20:25:36 +08:00
|
|
|
|
var listId int64 = 0
|
|
|
|
|
|
if req.GlobalOnly {
|
|
|
|
|
|
listId = firewallconfigs.GlobalListId
|
|
|
|
|
|
}
|
2023-04-03 10:02:17 +08:00
|
|
|
|
items, err := models.SharedIPItemDAO.ListAllEnabledIPItems(tx, userId, req.Keyword, req.Ip, listId, req.Unread, req.EventLevel, req.ListType, req.Offset, req.Size)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var cacheMap = utils.NewCacheMap()
|
|
|
|
|
|
for _, item := range items {
|
|
|
|
|
|
// server
|
|
|
|
|
|
var pbSourceServer *pb.Server
|
|
|
|
|
|
if item.SourceServerId > 0 {
|
|
|
|
|
|
serverName, err := models.SharedServerDAO.FindEnabledServerName(tx, int64(item.SourceServerId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceServer = &pb.Server{
|
|
|
|
|
|
Id: int64(item.SourceServerId),
|
|
|
|
|
|
Name: serverName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF策略
|
|
|
|
|
|
var pbSourcePolicy *pb.HTTPFirewallPolicy
|
|
|
|
|
|
if item.SourceHTTPFirewallPolicyId > 0 {
|
|
|
|
|
|
policy, err := models.SharedHTTPFirewallPolicyDAO.FindEnabledHTTPFirewallPolicyBasic(tx, int64(item.SourceHTTPFirewallPolicyId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if policy != nil {
|
|
|
|
|
|
pbSourcePolicy = &pb.HTTPFirewallPolicy{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallPolicyId),
|
|
|
|
|
|
Name: policy.Name,
|
|
|
|
|
|
ServerId: int64(policy.ServerId),
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF分组
|
|
|
|
|
|
var pbSourceGroup *pb.HTTPFirewallRuleGroup
|
|
|
|
|
|
if item.SourceHTTPFirewallRuleGroupId > 0 {
|
|
|
|
|
|
groupName, err := models.SharedHTTPFirewallRuleGroupDAO.FindHTTPFirewallRuleGroupName(tx, int64(item.SourceHTTPFirewallRuleGroupId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceGroup = &pb.HTTPFirewallRuleGroup{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallRuleGroupId),
|
|
|
|
|
|
Name: groupName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// WAF规则集
|
|
|
|
|
|
var pbSourceSet *pb.HTTPFirewallRuleSet
|
|
|
|
|
|
if item.SourceHTTPFirewallRuleSetId > 0 {
|
|
|
|
|
|
setName, err := models.SharedHTTPFirewallRuleSetDAO.FindHTTPFirewallRuleSetName(tx, int64(item.SourceHTTPFirewallRuleSetId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pbSourceSet = &pb.HTTPFirewallRuleSet{
|
|
|
|
|
|
Id: int64(item.SourceHTTPFirewallRuleSetId),
|
|
|
|
|
|
Name: setName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-10 19:54:37 +08:00
|
|
|
|
// 节点
|
|
|
|
|
|
var pbSourceNode *pb.Node
|
|
|
|
|
|
if item.SourceNodeId > 0 {
|
|
|
|
|
|
node, err := models.SharedNodeDAO.FindEnabledBasicNode(tx, int64(item.SourceNodeId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if node != nil {
|
|
|
|
|
|
pbSourceNode = &pb.Node{
|
|
|
|
|
|
Id: int64(node.Id),
|
|
|
|
|
|
Name: node.Name,
|
|
|
|
|
|
NodeCluster: &pb.NodeCluster{Id: int64(node.ClusterId)},
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-17 19:51:00 +08:00
|
|
|
|
var pbItem = &pb.IPItem{
|
|
|
|
|
|
Id: int64(item.Id),
|
|
|
|
|
|
IpFrom: item.IpFrom,
|
|
|
|
|
|
IpTo: item.IpTo,
|
|
|
|
|
|
Version: int64(item.Version),
|
|
|
|
|
|
CreatedAt: int64(item.CreatedAt),
|
|
|
|
|
|
ExpiredAt: int64(item.ExpiredAt),
|
|
|
|
|
|
Reason: item.Reason,
|
|
|
|
|
|
Type: item.Type,
|
|
|
|
|
|
EventLevel: item.EventLevel,
|
|
|
|
|
|
NodeId: int64(item.NodeId),
|
|
|
|
|
|
ServerId: int64(item.ServerId),
|
|
|
|
|
|
SourceNodeId: int64(item.SourceNodeId),
|
|
|
|
|
|
SourceServerId: int64(item.SourceServerId),
|
|
|
|
|
|
SourceHTTPFirewallPolicyId: int64(item.SourceHTTPFirewallPolicyId),
|
|
|
|
|
|
SourceHTTPFirewallRuleGroupId: int64(item.SourceHTTPFirewallRuleGroupId),
|
|
|
|
|
|
SourceHTTPFirewallRuleSetId: int64(item.SourceHTTPFirewallRuleSetId),
|
|
|
|
|
|
SourceServer: pbSourceServer,
|
|
|
|
|
|
SourceHTTPFirewallPolicy: pbSourcePolicy,
|
|
|
|
|
|
SourceHTTPFirewallRuleGroup: pbSourceGroup,
|
|
|
|
|
|
SourceHTTPFirewallRuleSet: pbSourceSet,
|
2022-01-10 19:54:37 +08:00
|
|
|
|
SourceNode: pbSourceNode,
|
2022-03-22 22:11:32 +08:00
|
|
|
|
IsRead: item.IsRead,
|
2021-11-17 19:51:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 所属名单
|
|
|
|
|
|
list, err := models.SharedIPListDAO.FindEnabledIPList(tx, int64(item.ListId), cacheMap)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if list == nil {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
err = models.SharedIPItemDAO.DisableIPItem(tx, int64(item.Id), 0)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
var pbList = &pb.IPList{
|
|
|
|
|
|
Id: int64(list.Id),
|
|
|
|
|
|
Name: list.Name,
|
|
|
|
|
|
Type: list.Type,
|
2022-03-22 22:11:32 +08:00
|
|
|
|
IsPublic: list.IsPublic,
|
|
|
|
|
|
IsGlobal: list.IsGlobal,
|
2021-11-17 19:51:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 所属服务(注意同SourceServer不同)
|
|
|
|
|
|
var pbFirewallServer *pb.Server
|
|
|
|
|
|
|
|
|
|
|
|
// 所属策略(注意同SourceHTTPFirewallPolicy不同)
|
|
|
|
|
|
var pbFirewallPolicy *pb.HTTPFirewallPolicy
|
2022-03-22 22:11:32 +08:00
|
|
|
|
if !list.IsPublic {
|
2021-11-17 19:51:00 +08:00
|
|
|
|
policy, err := models.SharedHTTPFirewallPolicyDAO.FindEnabledFirewallPolicyWithIPListId(tx, int64(list.Id))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if policy == nil {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
err = models.SharedIPItemDAO.DisableIPItem(tx, int64(item.Id), 0)
|
2021-11-17 19:51:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pbFirewallPolicy = &pb.HTTPFirewallPolicy{
|
|
|
|
|
|
Id: int64(policy.Id),
|
|
|
|
|
|
Name: policy.Name,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if policy.ServerId > 0 {
|
|
|
|
|
|
serverName, err := models.SharedServerDAO.FindEnabledServerName(tx, int64(policy.ServerId))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(serverName) == 0 {
|
|
|
|
|
|
serverName = "[已删除]"
|
|
|
|
|
|
}
|
|
|
|
|
|
pbFirewallServer = &pb.Server{
|
|
|
|
|
|
Id: int64(policy.ServerId),
|
|
|
|
|
|
Name: serverName,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
results = append(results, &pb.ListAllEnabledIPItemsResponse_Result{
|
|
|
|
|
|
IpList: pbList,
|
|
|
|
|
|
IpItem: pbItem,
|
|
|
|
|
|
Server: pbFirewallServer,
|
|
|
|
|
|
HttpFirewallPolicy: pbFirewallPolicy,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.ListAllEnabledIPItemsResponse{Results: results}, nil
|
|
|
|
|
|
}
|
2022-01-08 16:48:17 +08:00
|
|
|
|
|
2023-12-24 10:51:29 +08:00
|
|
|
|
// ListAllIPItemIds 列出所有名单中的IP ID
|
|
|
|
|
|
func (this *IPItemService) ListAllIPItemIds(ctx context.Context, req *pb.ListAllIPItemIdsRequest) (*pb.ListAllIPItemIdsResponse, error) {
|
|
|
|
|
|
adminId, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if adminId > 0 {
|
|
|
|
|
|
userId = req.UserId
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
var listId int64 = 0
|
|
|
|
|
|
if req.GlobalOnly {
|
|
|
|
|
|
listId = firewallconfigs.GlobalListId
|
|
|
|
|
|
}
|
|
|
|
|
|
itemIds, err := models.SharedIPItemDAO.ListAllIPItemIds(tx, userId, req.Keyword, req.Ip, listId, req.Unread, req.EventLevel, req.ListType, req.Offset, req.Size)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return &pb.ListAllIPItemIdsResponse{IpItemIds: itemIds}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-08 16:48:17 +08:00
|
|
|
|
// UpdateIPItemsRead 设置所有为已读
|
|
|
|
|
|
func (this *IPItemService) UpdateIPItemsRead(ctx context.Context, req *pb.UpdateIPItemsReadRequest) (*pb.RPCSuccess, error) {
|
2023-04-03 10:02:17 +08:00
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2022-01-08 16:48:17 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
2023-04-03 10:02:17 +08:00
|
|
|
|
err = models.SharedIPItemDAO.UpdateItemsRead(tx, userId)
|
2022-01-08 16:48:17 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.Success()
|
|
|
|
|
|
}
|
2023-12-20 15:08:05 +08:00
|
|
|
|
|
|
|
|
|
|
// FindServerIdWithIPItemId 查找IP对应的名单所属网站ID
|
|
|
|
|
|
func (this *IPItemService) FindServerIdWithIPItemId(ctx context.Context, req *pb.FindServerIdWithIPItemIdRequest) (*pb.FindServerIdWithIPItemIdResponse, error) {
|
|
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
listId, err := models.SharedIPItemDAO.FindItemListId(tx, req.IpItemId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if listId > 0 {
|
|
|
|
|
|
var serverId int64
|
|
|
|
|
|
serverId, err = models.SharedIPListDAO.FindServerIdWithListId(tx, listId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if serverId > 0 {
|
|
|
|
|
|
// check user
|
|
|
|
|
|
if userId > 0 {
|
|
|
|
|
|
err = models.SharedServerDAO.CheckUserServer(tx, userId, serverId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return &pb.FindServerIdWithIPItemIdResponse{ServerId: serverId}, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return &pb.FindServerIdWithIPItemIdResponse{ServerId: 0}, nil
|
|
|
|
|
|
}
|