From a009a11b3be04e1a88d2c406ac5f71393cbb2a0d Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 13 Jan 2021 17:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2IP=E4=BF=A1=E6=81=AFAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/iplibrary/result.go | 19 +++++++++++ internal/rpc/services/service_ip_library.go | 36 +++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/internal/iplibrary/result.go b/internal/iplibrary/result.go index c0a62ec9..312d3893 100644 --- a/internal/iplibrary/result.go +++ b/internal/iplibrary/result.go @@ -1,5 +1,10 @@ package iplibrary +import ( + "github.com/iwind/TeaGo/lists" + "strings" +) + type Result struct { CityId int64 Country string @@ -8,3 +13,17 @@ type Result struct { City string ISP string } + +func (this *Result) Summary() string { + pieces := []string{} + if len(this.Country) > 0 { + pieces = append(pieces, this.Country) + } + if len(this.Province) > 0 && !lists.ContainsString(pieces, this.Province) { + pieces = append(pieces, this.Province) + } + if len(this.City) > 0 && !lists.ContainsString(pieces, this.City) && !lists.ContainsString(pieces, strings.TrimSuffix(this.Province, "市")) { + pieces = append(pieces, this.City) + } + return strings.Join(pieces, " ") +} diff --git a/internal/rpc/services/service_ip_library.go b/internal/rpc/services/service_ip_library.go index ab5dfb70..1556b347 100644 --- a/internal/rpc/services/service_ip_library.go +++ b/internal/rpc/services/service_ip_library.go @@ -187,7 +187,7 @@ func (this *IPLibraryService) LookupIPRegion(ctx context.Context, req *pb.Lookup return nil, err } if result == nil { - return &pb.LookupIPRegionResponse{Region: nil}, nil + return &pb.LookupIPRegionResponse{IpRegion: nil}, nil } tx := this.NullTx() @@ -202,7 +202,7 @@ func (this *IPLibraryService) LookupIPRegion(ctx context.Context, req *pb.Lookup return nil, err } - return &pb.LookupIPRegionResponse{Region: &pb.IPRegion{ + return &pb.LookupIPRegionResponse{IpRegion: &pb.IPRegion{ Country: result.Country, Region: result.Region, Province: result.Province, @@ -210,5 +210,37 @@ func (this *IPLibraryService) LookupIPRegion(ctx context.Context, req *pb.Lookup Isp: result.ISP, CountryId: countryId, ProvinceId: provinceId, + Summary: result.Summary(), }}, nil } + +// 查询一组IP信息 +func (this *IPLibraryService) LookupIPRegions(ctx context.Context, req *pb.LookupIPRegionsRequest) (*pb.LookupIPRegionsResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) + if err != nil { + return nil, err + } + + result := map[string]*pb.IPRegion{} + if len(req.IpList) > 0 { + for _, ip := range req.IpList { + info, err := iplibrary.SharedLibrary.Lookup(ip) + if err != nil { + return nil, err + } + if info != nil { + result[ip] = &pb.IPRegion{ + Country: info.Country, + Region: info.Region, + Province: info.Province, + City: info.City, + Isp: info.ISP, + Summary: info.Summary(), + } + } + } + } + + return &pb.LookupIPRegionsResponse{IpRegionMap: result}, nil +}