]> git.ipfire.org Git - oddments/ddns.git/blobdiff - src/ddns/providers.py
spdyn: Update name and URL after service has been renamed
[oddments/ddns.git] / src / ddns / providers.py
index e708fd648139b552a0ecc93aa8c18d771ae06ef7..6b25cb6dd8c4dc4de92cc8bb68e115d29cf5650f 100644 (file)
@@ -391,13 +391,13 @@ class DDNSProtocolDynDNS2(object):
                elif output == "abuse":
                        raise DDNSAbuseError
                elif output == "notfqdn":
-                       raise DDNSRequestError(_("No valid FQDN was given."))
+                       raise DDNSRequestError(_("No valid FQDN was given"))
                elif output == "nohost":
-                       raise DDNSRequestError(_("Specified host does not exist."))
+                       raise DDNSRequestError(_("Specified host does not exist"))
                elif output == "911":
                        raise DDNSInternalServerError
                elif output == "dnserr":
-                       raise DDNSInternalServerError(_("DNS error encountered."))
+                       raise DDNSInternalServerError(_("DNS error encountered"))
                elif output == "badagent":
                        raise DDNSBlockedError
 
@@ -586,6 +586,33 @@ class DDNSProviderChangeIP(DDNSProvider):
                raise DDNSUpdateError(_("Server response: %s") % output)
 
 
+class DDNSProviderDesecIO(DDNSProtocolDynDNS2, DDNSProvider):
+       handle    = "desec.io"
+       name      = "desec.io"
+       website   = "https://www.desec.io"
+       protocols = ("ipv6", "ipv4",)
+
+       # ipv4 / ipv6 records are automatically removed when the update
+       # request originates from the respectively other protocol and no
+       # address is explicitly provided for the unused protocol.
+
+       url = "https://update.dedyn.io"
+
+       # desec.io sends the IPv6 and IPv4 address in one request
+
+       def update(self):
+               data = DDNSProtocolDynDNS2.prepare_request_data(self, "ipv4")
+
+               # This one supports IPv6
+               myipv6 = self.get_address("ipv6")
+
+               # Add update information if we have an IPv6 address.
+               if myipv6:
+                       data["myipv6"] = myipv6
+
+               self.send_request(data)
+
+
 class DDNSProviderDDNSS(DDNSProvider):
        handle    = "ddnss.de"
        name      = "DDNSS"
@@ -638,15 +665,15 @@ class DDNSProviderDDNSS(DDNSProvider):
                if output == "badauth":
                        raise DDNSAuthenticationError
                elif output == "notfqdn":
-                       raise DDNSRequestError(_("No valid FQDN was given."))
+                       raise DDNSRequestError(_("No valid FQDN was given"))
                elif output == "nohost":
-                       raise DDNSRequestError(_("Specified host does not exist."))
+                       raise DDNSRequestError(_("Specified host does not exist"))
                elif output == "911":
                        raise DDNSInternalServerError
                elif output == "dnserr":
-                       raise DDNSInternalServerError(_("DNS error encountered."))
+                       raise DDNSInternalServerError(_("DNS error encountered"))
                elif output == "disabled":
-                       raise DDNSRequestError(_("Account disabled or locked."))
+                       raise DDNSRequestError(_("Account disabled or locked"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -722,13 +749,13 @@ class DDNSProviderDNSpark(DDNSProvider):
                elif output == "blocked":
                        raise DDNSBlockedError
                elif output == "nofqdn":
-                       raise DDNSRequestError(_("No valid FQDN was given."))
+                       raise DDNSRequestError(_("No valid FQDN was given"))
                elif output == "nohost":
-                       raise DDNSRequestError(_("Invalid hostname specified."))
+                       raise DDNSRequestError(_("Invalid hostname specified"))
                elif output == "notdyn":
-                       raise DDNSRequestError(_("Hostname not marked as a dynamic host."))
+                       raise DDNSRequestError(_("Hostname not marked as a dynamic host"))
                elif output == "invalid":
-                       raise DDNSRequestError(_("Invalid IP address has been sent."))
+                       raise DDNSRequestError(_("Invalid IP address has been sent"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -768,27 +795,39 @@ class DDNSProviderDtDNS(DDNSProvider):
 
                # Handle error codes.
                if output == "No hostname to update was supplied.":
-                       raise DDNSRequestError(_("No hostname specified."))
+                       raise DDNSRequestError(_("No hostname specified"))
 
                elif output == "The hostname you supplied is not valid.":
-                       raise DDNSRequestError(_("Invalid hostname specified."))
+                       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."))
+                       raise DDNSRequestError(_("Account has been disabled"))
 
                elif output == "Illegal character in IP.":
-                       raise DDNSRequestError(_("Invalid IP address has been sent."))
+                       raise DDNSRequestError(_("Invalid IP address has been sent"))
 
                elif output == "Too many failed requests.":
-                       raise DDNSRequestError(_("Too many failed requests."))
+                       raise DDNSRequestError(_("Too many failed requests"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
 
 
+class DDNSProviderDuckDNS(DDNSProtocolDynDNS2, DDNSProvider):
+       handle    = "duckdns.org"
+       name      = "Duck DNS"
+       website   = "http://www.duckdns.org/"
+       protocols = ("ipv4",)
+
+       # Information about the format of the request is to be found
+       # https://www.duckdns.org/install.jsp
+
+       url = "https://www.duckdns.org/nic/update"
+
+
 class DDNSProviderDynDNS(DDNSProtocolDynDNS2, DDNSProvider):
        handle    = "dyndns.org"
        name      = "Dyn"
@@ -866,13 +905,13 @@ class DDNSProviderEasyDNS(DDNSProvider):
                        raise DDNSAuthenticationError
 
                elif output.startswith("NOSERVICE"):
-                       raise DDNSRequestError(_("Dynamic DNS is not turned on for this domain."))
+                       raise DDNSRequestError(_("Dynamic DNS is not turned on for this domain"))
 
                elif output.startswith("ILLEGAL INPUT"):
-                       raise DDNSRequestError(_("Invalid data has been sent."))
+                       raise DDNSRequestError(_("Invalid data has been sent"))
 
                elif output.startswith("TOOSOON"):
-                       raise DDNSRequestError(_("Too frequent update requests have been sent."))
+                       raise DDNSRequestError(_("Too frequent update requests have been sent"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -922,11 +961,11 @@ class DDNSProviderDynsNet(DDNSProvider):
 
                # Handle error codes.
                if output.startswith("400"):
-                       raise DDNSRequestError(_("Malformed request has been sent."))
+                       raise DDNSRequestError(_("Malformed request has been sent"))
                elif output.startswith("401"):
                        raise DDNSAuthenticationError
                elif output.startswith("402"):
-                       raise DDNSRequestError(_("Too frequent update requests have been sent."))
+                       raise DDNSRequestError(_("Too frequent update requests have been sent"))
                elif output.startswith("403"):
                        raise DDNSInternalServerError
 
@@ -972,7 +1011,7 @@ class DDNSProviderEnomCom(DDNSResponseParserXML, DDNSProvider):
                if errorcode == "304155":
                        raise DDNSAuthenticationError
                elif errorcode == "304153":
-                       raise DDNSRequestError(_("Domain not found."))
+                       raise DDNSRequestError(_("Domain not found"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -1051,7 +1090,7 @@ class DDNSProviderFreeDNSAfraidOrg(DDNSProvider):
                if output == "ERROR: Unable to locate this record":
                        raise DDNSAuthenticationError
                elif "is an invalid IP address" in output:
-                       raise DDNSRequestError(_("Invalid IP address has been sent."))
+                       raise DDNSRequestError(_("Invalid IP address has been sent"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -1173,8 +1212,11 @@ class DDNSProviderNamecheap(DDNSResponseParserXML, DDNSProvider):
                # Namecheap requires the hostname splitted into a host and domain part.
                host, domain = self.hostname.split(".", 1)
 
+               # Get and store curent IP address.
+               address = self.get_address(proto)
+
                data = {
-                       "ip"       : self.get_address(proto),
+                       "ip"       : address,
                        "password" : self.password,
                        "host"     : host,
                        "domain"   : domain
@@ -1196,9 +1238,9 @@ class DDNSProviderNamecheap(DDNSResponseParserXML, DDNSProvider):
                if errorcode == "304156":
                        raise DDNSAuthenticationError
                elif errorcode == "316153":
-                       raise DDNSRequestError(_("Domain not found."))
+                       raise DDNSRequestError(_("Domain not found"))
                elif errorcode == "316154":
-                       raise DDNSRequestError(_("Domain not active."))
+                       raise DDNSRequestError(_("Domain not active"))
                elif errorcode in ("380098", "380099"):
                        raise DDNSInternalServerError
 
@@ -1348,7 +1390,7 @@ class DDNSProviderRegfish(DDNSProvider):
                # Raise an error if no token and no useranem and password
                # are given.
                elif not self.username and not self.password:
-                       raise DDNSConfigurationError(_("No Auth details specified."))
+                       raise DDNSConfigurationError(_("No Auth details specified"))
 
                # HTTP Basic Auth is only allowed if no token is used.
                if self.token:
@@ -1370,11 +1412,11 @@ class DDNSProviderRegfish(DDNSProvider):
                if "401" or "402" in output:
                        raise DDNSAuthenticationError
                elif "408" in output:
-                       raise DDNSRequestError(_("Invalid IPv4 address has been sent."))
+                       raise DDNSRequestError(_("Invalid IPv4 address has been sent"))
                elif "409" in output:
-                       raise DDNSRequestError(_("Invalid IPv6 address has been sent."))
+                       raise DDNSRequestError(_("Invalid IPv6 address has been sent"))
                elif "412" in output:
-                       raise DDNSRequestError(_("No valid FQDN was given."))
+                       raise DDNSRequestError(_("No valid FQDN was given"))
                elif "414" in output:
                        raise DDNSInternalServerError
 
@@ -1401,8 +1443,8 @@ class DDNSProviderSelfhost(DDNSProtocolDynDNS2, DDNSProvider):
 
 class DDNSProviderSPDNS(DDNSProtocolDynDNS2, DDNSProvider):
        handle    = "spdns.org"
-       name      = "SPDNS"
-       website   = "http://spdns.org/"
+       name      = "SPDYN"
+       website   = "https://www.spdyn.de/"
 
        # Detailed information about request and response codes are provided
        # by the vendor. They are using almost the same mechanism and status
@@ -1411,7 +1453,7 @@ class DDNSProviderSPDNS(DDNSProtocolDynDNS2, DDNSProvider):
        # http://wiki.securepoint.de/index.php/SPDNS_FAQ
        # http://wiki.securepoint.de/index.php/SPDNS_Update-Tokens
 
-       url = "https://update.spdns.de/nic/update"
+       url = "https://update.spdyn.de/nic/update"
 
        @property
        def username(self):
@@ -1544,9 +1586,9 @@ class DDNSProviderZoneedit(DDNSProvider):
                if output.startswith("invalid login"):
                        raise DDNSAuthenticationError
                elif output.startswith("<ERROR CODE=\"704\""):
-                       raise DDNSRequestError(_("No valid FQDN was given.")) 
+                       raise DDNSRequestError(_("No valid FQDN was given"))
                elif output.startswith("<ERROR CODE=\"702\""):
-                       raise DDNSInternalServerError
+                       raise DDNSRequestError(_("Too frequent update requests have been sent"))
 
                # If we got here, some other update error happened.
                raise DDNSUpdateError
@@ -1585,13 +1627,13 @@ class DDNSProviderDNSmadeEasy(DDNSProvider):
 
                # Handle error codes.
                if output.startswith("error-auth-suspend"):
-                       raise DDNSRequestError(_("Account has been suspended."))
+                       raise DDNSRequestError(_("Account has been suspended"))
 
                elif output.startswith("error-auth-voided"):
-                       raise DDNSRequestError(_("Account has been revoked."))
+                       raise DDNSRequestError(_("Account has been revoked"))
 
                elif output.startswith("error-record-invalid"):
-                       raise DDNSRequestError(_("Specified host does not exist."))
+                       raise DDNSRequestError(_("Specified host does not exist"))
 
                elif output.startswith("error-auth"):
                        raise DDNSAuthenticationError