X-Git-Url: http://git.ipfire.org/?p=oddments%2Fddns.git;a=blobdiff_plain;f=src%2Fddns%2Fproviders.py;h=919642fb0022d4dedb90458d0022835f44e1f198;hp=cbbeeea2c74f9f8ce1783a14f0b989f4e62ab900;hb=68fce572223e618c85e2aba1f15b96f26d04db91;hpb=4668782831c4462c71c58686e3d79331c589f327 diff --git a/src/ddns/providers.py b/src/ddns/providers.py index cbbeeea..919642f 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -180,11 +180,6 @@ class DDNSProviderDHS(DDNSProvider): url = "http://members.dhs.org/nic/hosts" def update(self): - url = self.url % { - "username" : self.username, - "password" : self.password, - } - data = { "domain" : self.hostname, "ip" : self.get_address("ipv4"), @@ -194,7 +189,7 @@ class DDNSProviderDHS(DDNSProvider): } # Send update to the server. - response = self.send_request(url, username=self.username, password=self.password, + response = self.send_request(self.url, username=self.username, password=self.password, data=data) # Handle success messages. @@ -222,18 +217,13 @@ class DDNSProviderDNSpark(DDNSProvider): url = "https://control.dnspark.com/api/dynamic/update.php" def update(self): - url = self.url % { - "username" : self.username, - "password" : self.password, - } - data = { "domain" : self.hostname, "ip" : self.get_address("ipv4"), } # Send update to the server. - response = self.send_request(url, username=self.username, password=self.password, + response = self.send_request(self.url, username=self.username, password=self.password, data=data) # Get the full response message. @@ -275,7 +265,6 @@ class DDNSProviderDtDNS(DDNSProvider): # http://www.dtdns.com/dtsite/updatespec url = "https://www.dtdns.com/api/autodns.cfm" - def update(self): data = { "ip" : self.get_address("ipv4"), @@ -319,6 +308,54 @@ class DDNSProviderDtDNS(DDNSProvider): raise DDNSUpdateError +class DDNSProviderDynDNS(DDNSProvider): + INFO = { + "handle" : "dyndns.org", + "name" : "Dyn", + "website" : "http://dyn.com/dns/", + "protocols" : ["ipv4",] + } + + # Information about the format of the request is to be found + # http://http://dyn.com/support/developers/api/perform-update/ + # http://dyn.com/support/developers/api/return-codes/ + url = "https://members.dyndns.org/nic/update" + + def update(self): + data = { + "hostname" : self.hostname, + "myip" : self.get_address("ipv4"), + } + + # Send update to the server. + response = self.send_request(self.url, username=self.username, password=self.password, + data=data) + + # Get the full response message. + output = response.read() + + # Handle success messages. + if output.startswith("good") or output.startswith("nochg"): + return + + # Handle error codes. + if output == "badauth": + raise DDNSAuthenticationError + elif output == "aduse": + raise DDNSAbuseError + elif output == "notfqdn": + raise DDNSRequestError(_("No valid FQDN was given.")) + elif output == "nohost": + raise DDNSRequestError(_("Specified host does not exist.")) + elif output == "911": + raise DDNSInternalServerError + elif output == "dnserr": + raise DDNSInternalServerError(_("DNS error encountered.")) + + # If we got here, some other update error happened. + raise DDNSUpdateError + + class DDNSProviderFreeDNSAfraidOrg(DDNSProvider): INFO = { "handle" : "freedns.afraid.org", @@ -348,10 +385,6 @@ class DDNSProviderFreeDNSAfraidOrg(DDNSProvider): # Send update to the server. response = self.send_request(url, data=data) - # Get the full response message. - output = response.read() - - # Handle success messages. if output.startswith("Updated") or "has not changed" in output: return @@ -361,9 +394,6 @@ class DDNSProviderFreeDNSAfraidOrg(DDNSProvider): elif "is an invalid IP address" in output: raise DDNSRequestError(_("Invalid IP address has been sent.")) - # If we got here, some other update error happened. - raise DDNSUpdateError - class DDNSProviderLightningWireLabs(DDNSProvider): INFO = {