域名匹配增加通配符端口

This commit is contained in:
刘祥超
2022-11-09 18:21:05 +08:00
parent 0d1108387d
commit 7a139b43a9
2 changed files with 44 additions and 19 deletions

View File

@@ -50,8 +50,8 @@ func MatchDomain(pattern string, domain string) (isMatched bool) {
} }
// 其他匹配 // 其他匹配
patternPieces := strings.Split(pattern, ".") var patternPieces = strings.Split(pattern, ".")
domainPieces := strings.Split(domain, ".") var domainPieces = strings.Split(domain, ".")
if len(patternPieces) != len(domainPieces) { if len(patternPieces) != len(domainPieces) {
return return
} }
@@ -60,6 +60,15 @@ func MatchDomain(pattern string, domain string) (isMatched bool) {
if patternPiece == "" || patternPiece == "*" || patternPiece == domainPieces[index] { if patternPiece == "" || patternPiece == "*" || patternPiece == domainPieces[index] {
continue 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 isMatched = false
break break
} }

View File

@@ -6,86 +6,102 @@ import (
) )
func TestMatchDomain(t *testing.T) { 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) a.IsFalse(ok)
} }
{ {
ok := MatchDomains([]string{"example.com"}, "example.com") var ok = MatchDomains([]string{"example.com"}, "example.com")
a.IsTrue(ok) a.IsTrue(ok)
} }
{ {
ok := MatchDomains([]string{"www.example.com"}, "example.com") var ok = MatchDomains([]string{"www.example.com"}, "example.com")
a.IsFalse(ok) a.IsFalse(ok)
} }
{ {
ok := MatchDomains([]string{".example.com"}, "www.example.com") var ok = MatchDomains([]string{".example.com"}, "www.example.com")
a.IsTrue(ok) 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) 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) a.IsFalse(ok)
} }
{ {
ok := MatchDomains([]string{"*.example.com"}, "www.example.com") var ok = MatchDomains([]string{"*.example.com"}, "www.example.com")
a.IsTrue(ok) a.IsTrue(ok)
} }
{ {
ok := MatchDomains([]string{"*.*.com"}, "www.example.com") var ok = MatchDomains([]string{"*.*.com"}, "www.example.com")
a.IsTrue(ok) a.IsTrue(ok)
} }
{ {
ok := MatchDomains([]string{"www.*.com"}, "www.example.com") var ok = MatchDomains([]string{"www.*.com"}, "www.example.com")
a.IsTrue(ok) a.IsTrue(ok)
} }
{ {
ok := MatchDomains([]string{"gallery.*.com"}, "www.example.com") var ok = MatchDomains([]string{"gallery.*.com"}, "www.example.com")
a.IsFalse(ok) 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) 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) 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) 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) a.IsTrue(ok)
} }
{ {
ok := MatchDomains([]string{"*"}, "example.com") var ok = MatchDomains([]string{"*"}, "example.com")
a.IsTrue(ok) a.IsTrue(ok)
} }
// port // port
{ {
ok := MatchDomains([]string{"example.com:8001"}, "example.com:8001") var ok = MatchDomains([]string{"example.com:8001"}, "example.com:8001")
a.IsTrue(ok) 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) { func TestIsSpecialDomain(t *testing.T) {