From a03e5e6f8d1098b28a719852b8d34c6d361b174c Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 24 Dec 2023 10:51:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=97=E5=87=BAIP=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E4=B8=AD=E7=9A=84IP=20ID=E5=88=97=E8=A1=A8=E7=9A=84AP?= =?UTF-8?q?I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/ip_item_dao.go | 56 ++++++++++++++++++++++++ internal/rpc/services/service_ip_item.go | 23 ++++++++++ 2 files changed, 79 insertions(+) diff --git a/internal/db/models/ip_item_dao.go b/internal/db/models/ip_item_dao.go index a6e79126..7c9ba85f 100644 --- a/internal/db/models/ip_item_dao.go +++ b/internal/db/models/ip_item_dao.go @@ -582,6 +582,62 @@ func (this *IPItemDAO) ListAllEnabledIPItems(tx *dbs.Tx, sourceUserId int64, key return } +// ListAllIPItemIds 搜索所有IP Id列表 +func (this *IPItemDAO) ListAllIPItemIds(tx *dbs.Tx, sourceUserId int64, keyword string, ip string, listId int64, unread bool, eventLevel string, listType string, offset int64, size int64) (itemIds []int64, err error) { + var query = this.Query(tx) + if sourceUserId > 0 { + if listId <= 0 { + query.Where("((listId=" + types.String(firewallconfigs.GlobalListId) + " AND sourceUserId=:sourceUserId) OR listId IN (SELECT id FROM " + SharedIPListDAO.Table + " WHERE userId=:sourceUserId AND state=1))") + query.Param("sourceUserId", sourceUserId) + } else if listId == firewallconfigs.GlobalListId { + query.Attr("sourceUserId", sourceUserId) + query.UseIndex("sourceUserId") + } + } + if len(keyword) > 0 { + if net.ParseIP(keyword) != nil { // 是一个IP地址 + query.Attr("ipFrom", keyword) + } else { + query.Like("ipFrom", dbutils.QuoteLike(keyword)) + } + } + if len(ip) > 0 { + query.Attr("ipFrom", ip) + } + if listId > 0 { + query.Attr("listId", listId) + } else { + if len(listType) > 0 { + query.Where("(listId=" + types.String(firewallconfigs.GlobalListId) + " OR listId IN (SELECT id FROM " + SharedIPListDAO.Table + " WHERE state=1 AND type=:listType))") + query.Param("listType", listType) + } else { + query.Where("(listId=" + types.String(firewallconfigs.GlobalListId) + " OR listId IN (SELECT id FROM " + SharedIPListDAO.Table + " WHERE state=1))") + } + } + if unread { + query.Attr("isRead", 0) + } + if len(eventLevel) > 0 { + query.Attr("eventLevel", eventLevel) + } + result, err := query. + ResultPk(). + State(IPItemStateEnabled). + Where("(expiredAt=0 OR expiredAt>:expiredAt)"). + Param("expiredAt", time.Now().Unix()). + DescPk(). + Offset(offset). + Size(size). + FindAll() + if err != nil { + return nil, err + } + for _, itemOne := range result { + itemIds = append(itemIds, int64(itemOne.(*IPItem).Id)) + } + return +} + // UpdateItemsRead 设置所有未已读 func (this *IPItemDAO) UpdateItemsRead(tx *dbs.Tx, sourceUserId int64) error { var query = this.Query(tx). diff --git a/internal/rpc/services/service_ip_item.go b/internal/rpc/services/service_ip_item.go index 48fe82fd..e1e2f03e 100644 --- a/internal/rpc/services/service_ip_item.go +++ b/internal/rpc/services/service_ip_item.go @@ -768,6 +768,29 @@ func (this *IPItemService) ListAllEnabledIPItems(ctx context.Context, req *pb.Li return &pb.ListAllEnabledIPItemsResponse{Results: results}, nil } +// 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 +} + // UpdateIPItemsRead 设置所有为已读 func (this *IPItemService) UpdateIPItemsRead(ctx context.Context, req *pb.UpdateIPItemsReadRequest) (*pb.RPCSuccess, error) { _, userId, err := this.ValidateAdminAndUser(ctx, true)