增加通过IP来搜索IP名单的API

This commit is contained in:
GoEdgeLab
2021-08-15 15:42:32 +08:00
parent f6717bfe8f
commit 20c8ce9df4
2 changed files with 60 additions and 0 deletions

View File

@@ -240,6 +240,20 @@ func (this *IPItemDAO) FindEnabledItemContainsIP(tx *dbs.Tx, listId int64, ip ui
return one.(*IPItem), nil 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是否存在 // ExistsEnabledItem 检查IP是否存在
func (this *IPItemDAO) ExistsEnabledItem(tx *dbs.Tx, itemId int64) (bool, error) { func (this *IPItemDAO) ExistsEnabledItem(tx *dbs.Tx, itemId int64) (bool, error) {
return this.Query(tx). return this.Query(tx).

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/lists"
) )
// IPListService IP名单相关服务 // IPListService IP名单相关服务
@@ -145,3 +146,48 @@ func (this *IPListService) ExistsEnabledIPList(ctx context.Context, req *pb.Exis
} }
return &pb.ExistsEnabledIPListResponse{Exists: b}, nil 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
}