From a6043df648856d34c88a33127615f3a08d060f0e Mon Sep 17 00:00:00 2001 From: Amelia Aronsohn Date: Fri, 4 Nov 2022 11:54:48 -0700 Subject: [PATCH] DNSIMPLE: Support new name server handling changes (#1806) --- providers/dnsimple/dnsimpleProvider.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/providers/dnsimple/dnsimpleProvider.go b/providers/dnsimple/dnsimpleProvider.go index 06deb5eba..138814d2b 100644 --- a/providers/dnsimple/dnsimpleProvider.go +++ b/providers/dnsimple/dnsimpleProvider.go @@ -49,7 +49,15 @@ var defaultNameServerNames = []string{ "ns1.dnsimple.com", "ns2.dnsimple.com", "ns3.dnsimple.com", - "ns4.dnsimple.com", + "ns4.dnsimple-edge.org", +} + +var nameServerSuffixes = []string{ + ".dnsimple.com.", + ".dnsimple-edge.org.", + ".dnsimple-edge.net.", + ".dnsimple-edge.io.", + ".dnsimple-edge.com.", } // dnsimpleProvider is the handle for this provider. @@ -649,7 +657,7 @@ func removeOtherApexNS(dc *models.DomainConfig) { // We ignore them, warning as needed. // Child delegations are supported so we allow non-apex NS records. if rec.GetLabelFQDN() == dc.Name { - if !strings.HasSuffix(rec.GetTargetField(), ".dnsimple.com.") { + if !isDnsimpleNameServerDomain(rec.GetTargetField()) { printer.Printf("Warning: dnsimple.com does not allow NS records to be modified. %s will not be added.\n", rec.GetTargetField()) } continue @@ -698,6 +706,7 @@ func getTargetRecordPriority(rc *models.RecordConfig) int { } } +// Compile the error messages returned by DNSimple's API into a single error message func compileAttributeErrors(err *dnsimpleapi.ErrorResponse) error { message := fmt.Sprintf("%d %s", err.HTTPResponse.StatusCode, err.Message) for field, errors := range err.AttributeErrors { @@ -706,3 +715,14 @@ func compileAttributeErrors(err *dnsimpleapi.ErrorResponse) error { } return fmt.Errorf(message) } + +// Return true if the string ends in one of DNSimple's name server domains +// False if anything else +func isDnsimpleNameServerDomain(name string) bool { + for _, i := range nameServerSuffixes { + if strings.HasSuffix(name, i) { + return true + } + } + return false +}