1package types 2 3import ( 4 "strings" 5) 6 7// +k8s:deepcopy-gen=true 8 9// Domain holds a domain name with SANs. 10type Domain struct { 11 Main string `description:"Default subject name." json:"main,omitempty" toml:"main,omitempty" yaml:"main,omitempty"` 12 SANs []string `description:"Subject alternative names." json:"sans,omitempty" toml:"sans,omitempty" yaml:"sans,omitempty"` 13} 14 15// ToStrArray convert a domain into an array of strings. 16func (d *Domain) ToStrArray() []string { 17 var domains []string 18 if len(d.Main) > 0 { 19 domains = []string{d.Main} 20 } 21 return append(domains, d.SANs...) 22} 23 24// Set sets a domains from an array of strings. 25func (d *Domain) Set(domains []string) { 26 if len(domains) > 0 { 27 d.Main = domains[0] 28 d.SANs = domains[1:] 29 } 30} 31 32// MatchDomain returns true if a domain match the cert domain. 33func MatchDomain(domain, certDomain string) bool { 34 if domain == certDomain { 35 return true 36 } 37 38 for len(certDomain) > 0 && certDomain[len(certDomain)-1] == '.' { 39 certDomain = certDomain[:len(certDomain)-1] 40 } 41 42 labels := strings.Split(domain, ".") 43 for i := range labels { 44 labels[i] = "*" 45 candidate := strings.Join(labels, ".") 46 if certDomain == candidate { 47 return true 48 } 49 } 50 return false 51} 52 53// CanonicalDomain returns a lower case domain with trim space. 54func CanonicalDomain(domain string) string { 55 return strings.ToLower(strings.TrimSpace(domain)) 56} 57