From 20c8ce9df4578d887b52c19af11deb74e9a00f1d Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 15 Aug 2021 15:42:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=80=9A=E8=BF=87IP=E6=9D=A5?= =?UTF-8?q?=E6=90=9C=E7=B4=A2IP=E5=90=8D=E5=8D=95=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/ip_item_dao.go | 14 ++++++++ internal/rpc/services/service_ip_list.go | 46 ++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/internal/db/models/ip_item_dao.go b/internal/db/models/ip_item_dao.go index ec21b4d7..603b2a5c 100644 --- a/internal/db/models/ip_item_dao.go +++ b/internal/db/models/ip_item_dao.go @@ -240,6 +240,20 @@ func (this *IPItemDAO) FindEnabledItemContainsIP(tx *dbs.Tx, listId int64, ip ui return one.(*IPItem), nil } +// FindEnabledItemsWithIP 根据IP查找Item +func (this *IPItemDAO) FindEnabledItemsWithIP(tx *dbs.Tx, ip string) (result []*IPItem, err error) { + _, err = this.Query(tx). + Attr("ipFrom", ip). + Attr("ipTo", ""). + Where("(expiredAt=0 OR expiredAt>:nowTime)"). + Param("nowTime", time.Now().Unix()). + Where("listId IN (SELECT id FROM " + SharedIPListDAO.Table + " WHERE state=1)"). + AscPk(). + Slice(&result). + FindAll() + return +} + // ExistsEnabledItem 检查IP是否存在 func (this *IPItemDAO) ExistsEnabledItem(tx *dbs.Tx, itemId int64) (bool, error) { return this.Query(tx). diff --git a/internal/rpc/services/service_ip_list.go b/internal/rpc/services/service_ip_list.go index a5a26292..3768da20 100644 --- a/internal/rpc/services/service_ip_list.go +++ b/internal/rpc/services/service_ip_list.go @@ -4,6 +4,7 @@ import ( "context" "github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/lists" ) // IPListService IP名单相关服务 @@ -145,3 +146,48 @@ func (this *IPListService) ExistsEnabledIPList(ctx context.Context, req *pb.Exis } return &pb.ExistsEnabledIPListResponse{Exists: b}, nil } + +// FindEnabledIPListContainsIP 根据IP来搜索IP名单 +func (this *IPListService) FindEnabledIPListContainsIP(ctx context.Context, req *pb.FindEnabledIPListContainsIPRequest) (*pb.FindEnabledIPListContainsIPResponse, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + items, err := models.SharedIPItemDAO.FindEnabledItemsWithIP(tx, req.Ip) + if err != nil { + return nil, err + } + + var pbLists = []*pb.IPList{} + var listIds = []int64{} + for _, item := range items { + if lists.ContainsInt64(listIds, int64(item.ListId)) { + continue + } + + list, err := models.SharedIPListDAO.FindEnabledIPList(tx, int64(item.ListId)) + if err != nil { + return nil, err + } + if list == nil { + continue + } + if list.IsPublic != 1 { + continue + } + pbLists = append(pbLists, &pb.IPList{ + Id: int64(list.Id), + IsOn: list.IsOn == 1, + Type: list.Type, + Name: list.Name, + Code: list.Code, + IsPublic: list.IsPublic == 1, + Description: "", + }) + + listIds = append(listIds, int64(item.ListId)) + } + return &pb.FindEnabledIPListContainsIPResponse{IpLists: pbLists}, nil +}