boulder/ratelimits/utilities.go

34 lines
970 B
Go

package ratelimits
import (
"strings"
"github.com/letsencrypt/boulder/core"
"github.com/weppos/publicsuffix-go/publicsuffix"
)
// joinWithColon joins the provided args with a colon.
func joinWithColon(args ...string) string {
return strings.Join(args, ":")
}
// DomainsForRateLimiting transforms a list of FQDNs into a list of eTLD+1's
// for the purpose of rate limiting. It also de-duplicates the output
// domains. Exact public suffix matches are included.
func DomainsForRateLimiting(names []string) []string {
var domains []string
for _, name := range names {
domain, err := publicsuffix.Domain(name)
if err != nil {
// The only possible errors are:
// (1) publicsuffix.Domain is giving garbage values
// (2) the public suffix is the domain itself
// We assume 2 and include the original name in the result.
domains = append(domains, name)
} else {
domains = append(domains, domain)
}
}
return core.UniqueLowerNames(domains)
}