From 7a139b43a9a31e45c659f0dd3bf4897e070090be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Wed, 9 Nov 2022 18:21:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=9F=E5=90=8D=E5=8C=B9=E9=85=8D=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=80=9A=E9=85=8D=E7=AC=A6=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/configutils/domain.go | 13 +++++++-- pkg/configutils/domain_test.go | 50 ++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/pkg/configutils/domain.go b/pkg/configutils/domain.go index 900d263..737cab2 100644 --- a/pkg/configutils/domain.go +++ b/pkg/configutils/domain.go @@ -50,8 +50,8 @@ func MatchDomain(pattern string, domain string) (isMatched bool) { } // 其他匹配 - patternPieces := strings.Split(pattern, ".") - domainPieces := strings.Split(domain, ".") + var patternPieces = strings.Split(pattern, ".") + var domainPieces = strings.Split(domain, ".") if len(patternPieces) != len(domainPieces) { return } @@ -60,6 +60,15 @@ func MatchDomain(pattern string, domain string) (isMatched bool) { if patternPiece == "" || patternPiece == "*" || patternPiece == domainPieces[index] { continue } + if strings.HasSuffix(patternPiece, ":*") { + var portIndex = strings.LastIndex(patternPiece, ":*") + if portIndex >= 0 { + var prefix = patternPiece[:portIndex] + if strings.HasPrefix(domainPieces[index], prefix+":") { + continue + } + } + } isMatched = false break } diff --git a/pkg/configutils/domain_test.go b/pkg/configutils/domain_test.go index 355960b..28ac60c 100644 --- a/pkg/configutils/domain_test.go +++ b/pkg/configutils/domain_test.go @@ -6,86 +6,102 @@ import ( ) func TestMatchDomain(t *testing.T) { - a := assert.NewAssertion(t) + var a = assert.NewAssertion(t) { - ok := MatchDomains([]string{}, "example.com") + var ok = MatchDomains([]string{}, "example.com") a.IsFalse(ok) } { - ok := MatchDomains([]string{"example.com"}, "example.com") + var ok = MatchDomains([]string{"example.com"}, "example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"www.example.com"}, "example.com") + var ok = MatchDomains([]string{"www.example.com"}, "example.com") a.IsFalse(ok) } { - ok := MatchDomains([]string{".example.com"}, "www.example.com") + var ok = MatchDomains([]string{".example.com"}, "www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{".example.com"}, "a.www.example.com") + var ok = MatchDomains([]string{".example.com"}, "a.www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{".example.com"}, "a.www.example123.com") + var ok = MatchDomains([]string{".example.com"}, "a.www.example123.com") a.IsFalse(ok) } { - ok := MatchDomains([]string{"*.example.com"}, "www.example.com") + var ok = MatchDomains([]string{"*.example.com"}, "www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"*.*.com"}, "www.example.com") + var ok = MatchDomains([]string{"*.*.com"}, "www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"www.*.com"}, "www.example.com") + var ok = MatchDomains([]string{"www.*.com"}, "www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"gallery.*.com"}, "www.example.com") + var ok = MatchDomains([]string{"gallery.*.com"}, "www.example.com") a.IsFalse(ok) } { - ok := MatchDomains([]string{"~\\w+.example.com"}, "www.example.com") + var ok = MatchDomains([]string{"~\\w+.example.com"}, "www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"~\\w+.example.com"}, "a.www.example.com") + var ok = MatchDomains([]string{"~\\w+.example.com"}, "a.www.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"~^\\d+.example.com$"}, "www.example.com") + var ok = MatchDomains([]string{"~^\\d+.example.com$"}, "www.example.com") a.IsFalse(ok) } { - ok := MatchDomains([]string{"~^\\d+.example.com$"}, "123.example.com") + var ok = MatchDomains([]string{"~^\\d+.example.com$"}, "123.example.com") a.IsTrue(ok) } { - ok := MatchDomains([]string{"*"}, "example.com") + var ok = MatchDomains([]string{"*"}, "example.com") a.IsTrue(ok) } // port { - ok := MatchDomains([]string{"example.com:8001"}, "example.com:8001") + var ok = MatchDomains([]string{"example.com:8001"}, "example.com:8001") a.IsTrue(ok) } + { + var ok = MatchDomains([]string{"example.com:8002"}, "example.com:8001") + a.IsFalse(ok) + } + { + var ok = MatchDomains([]string{"*.example.com:8001"}, "a.example.com:8001") + a.IsTrue(ok) + } + { + var ok = MatchDomains([]string{"*.example.com:*"}, "a.example.com:8001") + a.IsTrue(ok) + } + { + var ok = MatchDomains([]string{"*.example.com:8002"}, "a.example.com:8001") + a.IsFalse(ok) + } } func TestIsSpecialDomain(t *testing.T) {