From 3521652326429d80c67b8a0e7277d9e48ac5faa3 Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Wed, 9 Jul 2014 19:12:12 +0200 Subject: [PATCH] Add enom.com as new provider. --- README | 1 + ddns.conf.sample | 5 +++++ src/ddns/providers.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/README b/README index 48c3549..6179325 100644 --- a/README +++ b/README @@ -56,6 +56,7 @@ SUPPORTED PROVIDERS: dyndns.org dynu.com easydns.com + enom.com freedns.afraid.org namecheap.com no-ip.com diff --git a/ddns.conf.sample b/ddns.conf.sample index 3dd54c9..88cfaed 100644 --- a/ddns.conf.sample +++ b/ddns.conf.sample @@ -58,6 +58,11 @@ # username = user # password = pass +# [test.enom.com] +# provider = enom.com +# username = user +# password = pass + # [test.freedns.afraid.org] # provider = freedns.afraid.org # token = token diff --git a/src/ddns/providers.py b/src/ddns/providers.py index eb53a37..4467651 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -532,6 +532,48 @@ class DDNSProviderEasyDNS(DDNSProtocolDynDNS2, DDNSProvider): url = "http://api.cp.easydns.com/dyn/tomato.php" +class DDNSProviderEnomCom(DDNSResponseParserXML, DDNSProvider): + handle = "enom.com" + name = "eNom Inc." + website = "http://www.enom.com/" + + # There are very detailed information about how to send an update request and + # the respone codes. + # http://www.enom.com/APICommandCatalog/ + + url = "https://dynamic.name-services.com/interface.asp" + + def update(self): + data = { + "command" : "setdnshost", + "responsetype" : "xml", + "address" : self.get_address("ipv4"), + "domainpassword" : self.password, + "zone" : self.hostname + } + + # Send update to the server. + response = self.send_request(self.url, data=data) + + # Get the full response message. + output = response.read() + + # Handle success messages. + if self.get_xml_tag_value(output, "ErrCount") == "0": + return + + # Handle error codes. + errorcode = self.get_xml_tag_value(output, "ResponseNumber") + + if errorcode == "304155": + raise DDNSAuthenticationError + elif errorcode == "304153": + raise DDNSRequestError(_("Domain not found.")) + + # If we got here, some other update error happened. + raise DDNSUpdateError + + class DDNSProviderFreeDNSAfraidOrg(DDNSProvider): handle = "freedns.afraid.org" name = "freedns.afraid.org" -- 2.39.2