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