From 43b2cd59966d4d3bd4627a15b7993b2243bafdad Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Thu, 12 Jun 2014 21:21:11 +0200 Subject: [PATCH] Add DtDNS as new provider. --- ddns.conf | 4 +++ src/ddns/__init__.py | 1 + src/ddns/providers.py | 58 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/ddns.conf b/ddns.conf index 095c72e..9ac67e4 100644 --- a/ddns.conf +++ b/ddns.conf @@ -25,6 +25,10 @@ # username = user # password = pass +# [test.dtdns.org] +# provider = dtdns.org +# password = pass + # [test.no-ip.org] # provider = no-ip.com # username = user diff --git a/src/ddns/__init__.py b/src/ddns/__init__.py index c50cf38..47fe03b 100644 --- a/src/ddns/__init__.py +++ b/src/ddns/__init__.py @@ -93,6 +93,7 @@ class DDNSCore(object): for provider in ( DDNSProviderDHS, DDNSProviderDNSpark, + DDNSProviderDtDNS, DDNSProviderNOIP, DDNSProviderLightningWireLabs, DDNSProviderSelfhost, diff --git a/src/ddns/providers.py b/src/ddns/providers.py index 8576c9b..2788c97 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -255,7 +255,63 @@ class DDNSProviderDNSpark(DDNSProvider): # If we got here, some other update error happened. raise DDNSUpdateError - + +class DDNSProviderDtDNS(DDNSProvider): + INFO = { + "handle" : "dtdns.com", + "name" : "DtDNS", + "website" : "http://dtdns.com/", + "protocols" : ["ipv4",] + } + + # Information about the format of the HTTPS request is to be found + # http://www.dtdns.com/dtsite/updatespec + url = "https://www.dtdns.com/api/autodns.cfm" + + + def update(self): + data = { + "ip" : self.get_address("ipv4"), + "id" : self.hostname, + "pw" : self.password + } + + # Send update to the server. + response = self.send_request(self.url, data=data) + + # Get the full response message. + output = response.read() + + # Remove all leading and trailing whitespace. + output = output.strip() + + # Handle success messages. + if "now points to" in output: + return + + # Handle error codes. + if output == "No hostname to update was supplied.": + raise DDNSRequestError(_("No hostname specified.")) + + elif output == "The hostname you supplied is not valid.": + raise DDNSRequestError(_("Invalid hostname specified.")) + + elif output == "The password you supplied is not valid.": + raise DDNSAuthenticationError + + elif output == "Administration has disabled this account.": + raise DDNSRequestError(_("Account has been disabled.")) + + elif output == "Illegal character in IP.": + raise DDNSRequestError(_("Invalid IP address has been sent.")) + + elif output == "Too many failed requests.": + raise DDNSRequestError(_("Too many failed requests.")) + + # If we got here, some other update error happened. + raise DDNSUpdateError + + class DDNSProviderLightningWireLabs(DDNSProvider): INFO = { "handle" : "dns.lightningwirelabs.com", -- 2.39.2