From: Stefan Schantl Date: Sun, 7 Sep 2014 12:28:00 +0000 (+0200) Subject: Add zzzz.io as new provider. X-Git-Tag: 005~18 X-Git-Url: http://git.ipfire.org/?p=ddns.git;a=commitdiff_plain;h=e53d3225a89952447032c68eb27a554eb76319f0 Add zzzz.io as new provider. Only added support for IPv4 because of #10608. Filed a new bug for adding the IPv6 support as #10612 when the locking issue has been solved. Fixes #10584. --- diff --git a/README b/README index 32765ff..fe6893e 100644 --- a/README +++ b/README @@ -74,5 +74,6 @@ SUPPORTED PROVIDERS: udmedia.de variomedia.de zoneedit.com + zzzz.io Also supports DNS updates via the ISC BIND nsupdate utility. diff --git a/ddns.conf.sample b/ddns.conf.sample index cf4d6a2..6108934 100644 --- a/ddns.conf.sample +++ b/ddns.conf.sample @@ -157,4 +157,7 @@ # provider = zoneedit.com # username = user # password = pass -# proto = ipv4 OR ipv6 +# proto = ipv4 OR ipv6 + +# [test.zzzz.io] +# token = token diff --git a/src/ddns/providers.py b/src/ddns/providers.py index a57dc84..a5385a9 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -1152,3 +1152,49 @@ class DDNSProviderZoneedit(DDNSProtocolDynDNS2, DDNSProvider): # If we got here, some other update error happened. raise DDNSUpdateError + + +class DDNSProviderZZZZ(DDNSProvider): + handle = "zzzz.io" + name = "zzzz" + website = "https://zzzz.io" + protocols = ("ipv4",) + + # Detailed information about the update request can be found here: + # https://zzzz.io/faq/ + + # Details about the possible response codes have been provided in the bugtracker: + # https://bugzilla.ipfire.org/show_bug.cgi?id=10584#c2 + + url = "https://zzzz.io/api/v1/update" + + def update(self): + data = { + "ip" : self.get_address("ipv4"), + "token" : self.token, + } + + # zzzz uses the host from the full hostname as part + # of the update url. + host, domain = self.hostname.split(".", 1) + + # Add host value to the update url. + url = "%s/%s" % (self.url, host) + + # Send update to the server. + try: + response = self.send_request(url, data=data) + + # Handle error codes. + except urllib2.HTTPError, e: + if e.code == 404: + raise DDNSRequestError(_("Invalid hostname specified.")) + + raise + + # Handle success messages. + if response.code == 200: + return + + # If we got here, some other update error happened. + raise DDNSUpdateError