diff --git a/pkg/serverconfigs/regionconfigs/china.go b/pkg/serverconfigs/regionconfigs/china.go index c10df3c..9f1b9f6 100644 --- a/pkg/serverconfigs/regionconfigs/china.go +++ b/pkg/serverconfigs/regionconfigs/china.go @@ -39,3 +39,20 @@ func CheckRegionProvinceIsInChinaMainland(regionProvinceId RegionProvinceId) boo regionProvinceId != RegionChinaProvinceIdMO && regionProvinceId != RegionChinaProvinceIdTW } + +func MatchUserRegion(userCountryId int64, userProvinceId int64, regionId int64) bool { + if userCountryId == RegionChinaId { + switch regionId { + case RegionChinaIdMainland: // china.mainland + return CheckRegionProvinceIsInChinaMainland(userProvinceId) + case RegionChinaIdHK: // china.hk + return userProvinceId == RegionChinaProvinceIdHK + case RegionChinaIdMO: // china.mo + return userProvinceId == RegionChinaProvinceIdMO + case RegionChinaIdTW: // china.tw + return userProvinceId == RegionChinaProvinceIdTW + } + } + + return userCountryId == regionId +} diff --git a/pkg/serverconfigs/regionconfigs/china_test.go b/pkg/serverconfigs/regionconfigs/china_test.go new file mode 100644 index 0000000..402e6fa --- /dev/null +++ b/pkg/serverconfigs/regionconfigs/china_test.go @@ -0,0 +1,20 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package regionconfigs_test + +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/regionconfigs" + "github.com/iwind/TeaGo/assert" + "testing" +) + +func TestMatchUserRegion(t *testing.T) { + var a = assert.NewAssertion(t) + a.IsTrue(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, 1, 1)) + a.IsTrue(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, 1, regionconfigs.RegionChinaIdMainland)) + a.IsTrue(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, regionconfigs.RegionChinaProvinceIdHK, regionconfigs.RegionChinaIdHK)) + a.IsTrue(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, regionconfigs.RegionChinaProvinceIdMO, regionconfigs.RegionChinaIdMO)) + a.IsTrue(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, regionconfigs.RegionChinaProvinceIdTW, regionconfigs.RegionChinaIdTW)) + a.IsFalse(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, 0, regionconfigs.RegionChinaIdHK)) + a.IsFalse(regionconfigs.MatchUserRegion(regionconfigs.RegionChinaId, 1, regionconfigs.RegionChinaIdHK)) +}