domain.go raw
1 package dns01
2
3 import (
4 "fmt"
5 "strings"
6
7 "github.com/miekg/dns"
8 )
9
10 // ExtractSubDomain extracts the subdomain part from a domain and a zone.
11 func ExtractSubDomain(domain, zone string) (string, error) {
12 canonDomain := dns.Fqdn(domain)
13 canonZone := dns.Fqdn(zone)
14
15 if canonDomain == canonZone {
16 return "", fmt.Errorf("no subdomain because the domain and the zone are identical: %s", canonDomain)
17 }
18
19 if !dns.IsSubDomain(canonZone, canonDomain) {
20 return "", fmt.Errorf("%s is not a subdomain of %s", canonDomain, canonZone)
21 }
22
23 return strings.TrimSuffix(canonDomain, "."+canonZone), nil
24 }
25