33 lines
892 B
Go
33 lines
892 B
Go
package iana
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/weppos/publicsuffix-go/publicsuffix"
|
|
)
|
|
|
|
// ExtractSuffix returns the public suffix of the domain using only the "ICANN"
|
|
// section of the Public Suffix List database.
|
|
// If the domain does not end in a suffix that belongs to an IANA-assigned
|
|
// domain, ExtractSuffix returns an error.
|
|
func ExtractSuffix(name string) (string, error) {
|
|
if name == "" {
|
|
return "", fmt.Errorf("Blank name argument passed to ExtractSuffix")
|
|
}
|
|
|
|
rule := publicsuffix.DefaultList.Find(name, &publicsuffix.FindOptions{IgnorePrivate: true, DefaultRule: nil})
|
|
if rule == nil {
|
|
return "", fmt.Errorf("Domain %s has no IANA TLD", name)
|
|
}
|
|
|
|
suffix := rule.Decompose(name)[1]
|
|
|
|
// If the TLD is empty, it means name is actually a suffix.
|
|
// In fact, decompose returns an array of empty strings in this case.
|
|
if suffix == "" {
|
|
suffix = name
|
|
}
|
|
|
|
return suffix, nil
|
|
}
|