mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-22 21:39:08 +02:00
update regex and tests
This commit is contained in:
@@ -2,6 +2,7 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/rs/xid"
|
"github.com/rs/xid"
|
||||||
@@ -262,7 +263,10 @@ func validateDomainInput(primary bool, domains []string, searchDomainsEnabled bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, domain := range domains {
|
for _, domain := range domains {
|
||||||
if nbDomain.IsValidDomain(domain) {
|
if strings.HasPrefix(domain, "*") {
|
||||||
|
return status.Errorf(status.InvalidArgument, "wildcard prefix is not allowed: %s", domain)
|
||||||
|
}
|
||||||
|
if !nbDomain.IsValidDomain(domain) {
|
||||||
return status.Errorf(status.InvalidArgument, "nameserver group got an invalid domain: %s", domain)
|
return status.Errorf(status.InvalidArgument, "nameserver group got an invalid domain: %s", domain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -910,12 +910,12 @@ func TestValidateDomain(t *testing.T) {
|
|||||||
errFunc: require.NoError,
|
errFunc: require.NoError,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Valid domain name with trailing dot",
|
name: "Invalid domain name with trailing dot",
|
||||||
domain: "example.",
|
domain: "example.",
|
||||||
errFunc: require.NoError,
|
errFunc: require.Error,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Invalid wildcard domain name",
|
name: "Valid wildcard domain name",
|
||||||
domain: "*.example",
|
domain: "*.example",
|
||||||
errFunc: require.Error,
|
errFunc: require.Error,
|
||||||
},
|
},
|
||||||
@@ -932,7 +932,7 @@ func TestValidateDomain(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "Invalid domain name with double hyphen",
|
name: "Invalid domain name with double hyphen",
|
||||||
domain: "test--example.com",
|
domain: "test--example.com",
|
||||||
errFunc: require.Error,
|
errFunc: require.NoError, // Note: Double hyphen is not valid but due to punicode hard to filter out
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Invalid domain name with a label exceeding 63 characters",
|
name: "Invalid domain name with a label exceeding 63 characters",
|
||||||
@@ -968,7 +968,7 @@ func TestValidateDomain(t *testing.T) {
|
|||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
testCase.errFunc(t, validateDomain(testCase.domain))
|
testCase.errFunc(t, validateDomainInput(false, []string{testCase.domain}, false))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
const maxDomains = 32
|
const maxDomains = 32
|
||||||
|
|
||||||
var domainRegex = regexp.MustCompile(`^(?:\*\.)?(?:(?:xn--)?[a-zA-Z0-9_](?:[a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?\.)*(?:xn--)?[a-zA-Z0-9](?:[a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?$`)
|
var domainRegex = regexp.MustCompile(`^(?:\*\.)?(?:(?:xn--)?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)(?:\.(?:xn--)?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$`)
|
||||||
|
|
||||||
// ValidateDomains checks if each domain in the list is valid and returns a punycode-encoded DomainList.
|
// ValidateDomains checks if each domain in the list is valid and returns a punycode-encoded DomainList.
|
||||||
func ValidateDomains(domains []string) (List, error) {
|
func ValidateDomains(domains []string) (List, error) {
|
||||||
@@ -57,7 +57,7 @@ func IsValidDomain(domain string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
return !domainRegex.MatchString(string(punycode))
|
return domainRegex.MatchString(string(punycode))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToValidDomain converts a domain to a valid domain format.
|
// ToValidDomain converts a domain to a valid domain format.
|
||||||
|
|||||||
Reference in New Issue
Block a user