From 62ae07484d061b8364d644ad2adf5cce3874feb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Thu, 5 Nov 2020 11:51:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=97=A5=E5=BF=97=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=8C=BA=E5=9F=9F=E5=92=8CISP=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/region_city_dao.go | 71 +++++++++++++++++++ internal/db/models/region_city_dao_test.go | 5 ++ internal/db/models/region_city_model.go | 22 ++++++ internal/db/models/region_city_model_ext.go | 1 + internal/db/models/region_country_dao.go | 71 +++++++++++++++++++ internal/db/models/region_country_dao_test.go | 5 ++ internal/db/models/region_country_model.go | 20 ++++++ .../db/models/region_country_model_ext.go | 1 + internal/db/models/region_provider_dao.go | 71 +++++++++++++++++++ .../db/models/region_provider_dao_test.go | 5 ++ internal/db/models/region_provider_model.go | 20 ++++++ .../db/models/region_provider_model_ext.go | 1 + internal/db/models/region_province_dao.go | 71 +++++++++++++++++++ .../db/models/region_province_dao_test.go | 5 ++ internal/db/models/region_province_model.go | 22 ++++++ .../db/models/region_province_model_ext.go | 1 + internal/iplibrary/library_ip2region.go | 16 +++++ internal/rpc/services/service_ip_library.go | 25 +++++++ 18 files changed, 433 insertions(+) create mode 100644 internal/db/models/region_city_dao.go create mode 100644 internal/db/models/region_city_dao_test.go create mode 100644 internal/db/models/region_city_model.go create mode 100644 internal/db/models/region_city_model_ext.go create mode 100644 internal/db/models/region_country_dao.go create mode 100644 internal/db/models/region_country_dao_test.go create mode 100644 internal/db/models/region_country_model.go create mode 100644 internal/db/models/region_country_model_ext.go create mode 100644 internal/db/models/region_provider_dao.go create mode 100644 internal/db/models/region_provider_dao_test.go create mode 100644 internal/db/models/region_provider_model.go create mode 100644 internal/db/models/region_provider_model_ext.go create mode 100644 internal/db/models/region_province_dao.go create mode 100644 internal/db/models/region_province_dao_test.go create mode 100644 internal/db/models/region_province_model.go create mode 100644 internal/db/models/region_province_model_ext.go diff --git a/internal/db/models/region_city_dao.go b/internal/db/models/region_city_dao.go new file mode 100644 index 00000000..6b710b5c --- /dev/null +++ b/internal/db/models/region_city_dao.go @@ -0,0 +1,71 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + RegionCityStateEnabled = 1 // 已启用 + RegionCityStateDisabled = 0 // 已禁用 +) + +type RegionCityDAO dbs.DAO + +func NewRegionCityDAO() *RegionCityDAO { + return dbs.NewDAO(&RegionCityDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeRegionCities", + Model: new(RegionCity), + PkName: "id", + }, + }).(*RegionCityDAO) +} + +var SharedRegionCityDAO *RegionCityDAO + +func init() { + dbs.OnReady(func() { + SharedRegionCityDAO = NewRegionCityDAO() + }) +} + +// 启用条目 +func (this *RegionCityDAO) EnableRegionCity(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionCityStateEnabled). + Update() + return err +} + +// 禁用条目 +func (this *RegionCityDAO) DisableRegionCity(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionCityStateDisabled). + Update() + return err +} + +// 查找启用中的条目 +func (this *RegionCityDAO) FindEnabledRegionCity(id uint32) (*RegionCity, error) { + result, err := this.Query(). + Pk(id). + Attr("state", RegionCityStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*RegionCity), err +} + +// 根据主键查找名称 +func (this *RegionCityDAO) FindRegionCityName(id uint32) (string, error) { + return this.Query(). + Pk(id). + Result("name"). + FindStringCol("") +} diff --git a/internal/db/models/region_city_dao_test.go b/internal/db/models/region_city_dao_test.go new file mode 100644 index 00000000..97c24b56 --- /dev/null +++ b/internal/db/models/region_city_dao_test.go @@ -0,0 +1,5 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" +) diff --git a/internal/db/models/region_city_model.go b/internal/db/models/region_city_model.go new file mode 100644 index 00000000..87d18b1a --- /dev/null +++ b/internal/db/models/region_city_model.go @@ -0,0 +1,22 @@ +package models + +// +type RegionCity struct { + Id uint32 `field:"id"` // ID + ProvinceId uint32 `field:"provinceId"` // 省份ID + Name string `field:"name"` // 名称 + Codes string `field:"codes"` // 代号 + State uint8 `field:"state"` // 状态 +} + +type RegionCityOperator struct { + Id interface{} // ID + ProvinceId interface{} // 省份ID + Name interface{} // 名称 + Codes interface{} // 代号 + State interface{} // 状态 +} + +func NewRegionCityOperator() *RegionCityOperator { + return &RegionCityOperator{} +} diff --git a/internal/db/models/region_city_model_ext.go b/internal/db/models/region_city_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/region_city_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/region_country_dao.go b/internal/db/models/region_country_dao.go new file mode 100644 index 00000000..43fbd28e --- /dev/null +++ b/internal/db/models/region_country_dao.go @@ -0,0 +1,71 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + RegionCountryStateEnabled = 1 // 已启用 + RegionCountryStateDisabled = 0 // 已禁用 +) + +type RegionCountryDAO dbs.DAO + +func NewRegionCountryDAO() *RegionCountryDAO { + return dbs.NewDAO(&RegionCountryDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeRegionCountries", + Model: new(RegionCountry), + PkName: "id", + }, + }).(*RegionCountryDAO) +} + +var SharedRegionCountryDAO *RegionCountryDAO + +func init() { + dbs.OnReady(func() { + SharedRegionCountryDAO = NewRegionCountryDAO() + }) +} + +// 启用条目 +func (this *RegionCountryDAO) EnableRegionCountry(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionCountryStateEnabled). + Update() + return err +} + +// 禁用条目 +func (this *RegionCountryDAO) DisableRegionCountry(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionCountryStateDisabled). + Update() + return err +} + +// 查找启用中的条目 +func (this *RegionCountryDAO) FindEnabledRegionCountry(id uint32) (*RegionCountry, error) { + result, err := this.Query(). + Pk(id). + Attr("state", RegionCountryStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*RegionCountry), err +} + +// 根据主键查找名称 +func (this *RegionCountryDAO) FindRegionCountryName(id uint32) (string, error) { + return this.Query(). + Pk(id). + Result("name"). + FindStringCol("") +} diff --git a/internal/db/models/region_country_dao_test.go b/internal/db/models/region_country_dao_test.go new file mode 100644 index 00000000..97c24b56 --- /dev/null +++ b/internal/db/models/region_country_dao_test.go @@ -0,0 +1,5 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" +) diff --git a/internal/db/models/region_country_model.go b/internal/db/models/region_country_model.go new file mode 100644 index 00000000..a587bffb --- /dev/null +++ b/internal/db/models/region_country_model.go @@ -0,0 +1,20 @@ +package models + +// +type RegionCountry struct { + Id uint32 `field:"id"` // ID + Name string `field:"name"` // 名称 + Codes string `field:"codes"` // 代号 + State uint8 `field:"state"` // 状态 +} + +type RegionCountryOperator struct { + Id interface{} // ID + Name interface{} // 名称 + Codes interface{} // 代号 + State interface{} // 状态 +} + +func NewRegionCountryOperator() *RegionCountryOperator { + return &RegionCountryOperator{} +} diff --git a/internal/db/models/region_country_model_ext.go b/internal/db/models/region_country_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/region_country_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/region_provider_dao.go b/internal/db/models/region_provider_dao.go new file mode 100644 index 00000000..a7831c68 --- /dev/null +++ b/internal/db/models/region_provider_dao.go @@ -0,0 +1,71 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + RegionProviderStateEnabled = 1 // 已启用 + RegionProviderStateDisabled = 0 // 已禁用 +) + +type RegionProviderDAO dbs.DAO + +func NewRegionProviderDAO() *RegionProviderDAO { + return dbs.NewDAO(&RegionProviderDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeRegionProviders", + Model: new(RegionProvider), + PkName: "id", + }, + }).(*RegionProviderDAO) +} + +var SharedRegionProviderDAO *RegionProviderDAO + +func init() { + dbs.OnReady(func() { + SharedRegionProviderDAO = NewRegionProviderDAO() + }) +} + +// 启用条目 +func (this *RegionProviderDAO) EnableRegionProvider(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionProviderStateEnabled). + Update() + return err +} + +// 禁用条目 +func (this *RegionProviderDAO) DisableRegionProvider(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionProviderStateDisabled). + Update() + return err +} + +// 查找启用中的条目 +func (this *RegionProviderDAO) FindEnabledRegionProvider(id uint32) (*RegionProvider, error) { + result, err := this.Query(). + Pk(id). + Attr("state", RegionProviderStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*RegionProvider), err +} + +// 根据主键查找名称 +func (this *RegionProviderDAO) FindRegionProviderName(id uint32) (string, error) { + return this.Query(). + Pk(id). + Result("name"). + FindStringCol("") +} diff --git a/internal/db/models/region_provider_dao_test.go b/internal/db/models/region_provider_dao_test.go new file mode 100644 index 00000000..97c24b56 --- /dev/null +++ b/internal/db/models/region_provider_dao_test.go @@ -0,0 +1,5 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" +) diff --git a/internal/db/models/region_provider_model.go b/internal/db/models/region_provider_model.go new file mode 100644 index 00000000..f490675d --- /dev/null +++ b/internal/db/models/region_provider_model.go @@ -0,0 +1,20 @@ +package models + +// +type RegionProvider struct { + Id uint32 `field:"id"` // ID + Name string `field:"name"` // 名称 + Codes string `field:"codes"` // 代号 + State uint8 `field:"state"` // 状态 +} + +type RegionProviderOperator struct { + Id interface{} // ID + Name interface{} // 名称 + Codes interface{} // 代号 + State interface{} // 状态 +} + +func NewRegionProviderOperator() *RegionProviderOperator { + return &RegionProviderOperator{} +} diff --git a/internal/db/models/region_provider_model_ext.go b/internal/db/models/region_provider_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/region_provider_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/region_province_dao.go b/internal/db/models/region_province_dao.go new file mode 100644 index 00000000..97789fb3 --- /dev/null +++ b/internal/db/models/region_province_dao.go @@ -0,0 +1,71 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +const ( + RegionProvinceStateEnabled = 1 // 已启用 + RegionProvinceStateDisabled = 0 // 已禁用 +) + +type RegionProvinceDAO dbs.DAO + +func NewRegionProvinceDAO() *RegionProvinceDAO { + return dbs.NewDAO(&RegionProvinceDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeRegionProvinces", + Model: new(RegionProvince), + PkName: "id", + }, + }).(*RegionProvinceDAO) +} + +var SharedRegionProvinceDAO *RegionProvinceDAO + +func init() { + dbs.OnReady(func() { + SharedRegionProvinceDAO = NewRegionProvinceDAO() + }) +} + +// 启用条目 +func (this *RegionProvinceDAO) EnableRegionProvince(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionProvinceStateEnabled). + Update() + return err +} + +// 禁用条目 +func (this *RegionProvinceDAO) DisableRegionProvince(id uint32) error { + _, err := this.Query(). + Pk(id). + Set("state", RegionProvinceStateDisabled). + Update() + return err +} + +// 查找启用中的条目 +func (this *RegionProvinceDAO) FindEnabledRegionProvince(id uint32) (*RegionProvince, error) { + result, err := this.Query(). + Pk(id). + Attr("state", RegionProvinceStateEnabled). + Find() + if result == nil { + return nil, err + } + return result.(*RegionProvince), err +} + +// 根据主键查找名称 +func (this *RegionProvinceDAO) FindRegionProvinceName(id uint32) (string, error) { + return this.Query(). + Pk(id). + Result("name"). + FindStringCol("") +} diff --git a/internal/db/models/region_province_dao_test.go b/internal/db/models/region_province_dao_test.go new file mode 100644 index 00000000..97c24b56 --- /dev/null +++ b/internal/db/models/region_province_dao_test.go @@ -0,0 +1,5 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" +) diff --git a/internal/db/models/region_province_model.go b/internal/db/models/region_province_model.go new file mode 100644 index 00000000..e59a883f --- /dev/null +++ b/internal/db/models/region_province_model.go @@ -0,0 +1,22 @@ +package models + +// +type RegionProvince struct { + Id uint32 `field:"id"` // ID + CountryId uint32 `field:"countryId"` // 国家ID + Name string `field:"name"` // 名称 + Codes string `field:"codes"` // 代号 + State uint8 `field:"state"` // 状态 +} + +type RegionProvinceOperator struct { + Id interface{} // ID + CountryId interface{} // 国家ID + Name interface{} // 名称 + Codes interface{} // 代号 + State interface{} // 状态 +} + +func NewRegionProvinceOperator() *RegionProvinceOperator { + return &RegionProvinceOperator{} +} diff --git a/internal/db/models/region_province_model_ext.go b/internal/db/models/region_province_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/region_province_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/iplibrary/library_ip2region.go b/internal/iplibrary/library_ip2region.go index c898c5ed..8c9690f4 100644 --- a/internal/iplibrary/library_ip2region.go +++ b/internal/iplibrary/library_ip2region.go @@ -39,6 +39,22 @@ func (this *IP2RegionLibrary) Lookup(ip string) (*Result, error) { return nil, err } + if info.Country == "0" { + info.Country = "" + } + if info.Region == "0" { + info.Region = "" + } + if info.Province == "0" { + info.Province = "" + } + if info.City == "0" { + info.City = "" + } + if info.ISP == "0" { + info.ISP = "" + } + return &Result{ CityId: info.CityId, Country: info.Country, diff --git a/internal/rpc/services/service_ip_library.go b/internal/rpc/services/service_ip_library.go index 0ea9d58a..80ffa88d 100644 --- a/internal/rpc/services/service_ip_library.go +++ b/internal/rpc/services/service_ip_library.go @@ -3,6 +3,7 @@ package services import ( "context" "github.com/TeaOSLab/EdgeAPI/internal/db/models" + "github.com/TeaOSLab/EdgeAPI/internal/iplibrary" rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" ) @@ -161,3 +162,27 @@ func (this *IPLibraryService) DeleteIPLibrary(ctx context.Context, req *pb.Delet } return rpcutils.RPCDeleteSuccess() } + +// 查询某个IP信息 +func (this *IPLibraryService) LookupIPRegion(ctx context.Context, req *pb.LookupIPRegionRequest) (*pb.LookupIPRegionResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) + if err != nil { + return nil, err + } + + result, err := iplibrary.SharedLibrary.Lookup(req.Ip) + if err != nil { + return nil, err + } + if result == nil { + return &pb.LookupIPRegionResponse{Region: nil}, nil + } + return &pb.LookupIPRegionResponse{Region: &pb.IPRegion{ + Country: result.Country, + Region: result.Region, + Province: result.Province, + City: result.City, + Isp: result.ISP, + }}, nil +}