24 lines
598 B
Go
24 lines
598 B
Go
package dns01
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
// ExtractSubDomain extracts the subdomain part from a domain and a zone.
|
|
func ExtractSubDomain(domain, zone string) (string, error) {
|
|
canonDomain := dns.Fqdn(domain)
|
|
canonZone := dns.Fqdn(zone)
|
|
|
|
if canonDomain == canonZone {
|
|
return "", fmt.Errorf("no subdomain because the domain and the zone are identical: %s", canonDomain)
|
|
}
|
|
|
|
if !dns.IsSubDomain(canonZone, canonDomain) {
|
|
return "", fmt.Errorf("%s is not a subdomain of %s", canonDomain, canonZone)
|
|
}
|
|
|
|
return strings.TrimSuffix(canonDomain, "."+canonZone), nil
|
|
}
|