25 lines
598 B
Go
25 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
|
||
|
}
|