]> git.ipfire.org Git - oddments/ddns.git/commitdiff
Merge remote-tracking branch 'stevee/spdns.org'
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Jun 2014 09:54:16 +0000 (11:54 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Jun 2014 09:54:16 +0000 (11:54 +0200)
1  2 
ddns.conf.sample
src/ddns/__init__.py
src/ddns/providers.py

diff --combined ddns.conf.sample
index 888137eef22fd4bfb68f2ea46e84251ed2d5769d,f9058e6f7faaf7f3c45d9983f714c38bec7fc083..3704b6e3e5fc56641bd62ee0eae2c5e47370213c
  # username = user
  # password = pass
  
 +# [test.freedns.afraid.org]
 +# provider = freedns.afraid.org
 +# token = token
 +# proto = ipv4 OR ipv6
 +
  # [test.no-ip.org]
  # provider = no-ip.com
  # username = user
  # username = user
  # password = pass
  
+ # [test.spdns.org]
+ # provider = spdns.org
+ # username = user
+ # password = pass
  # [test.lightningwirelabs.com]
  # provider = dns.lightningwirelabs.com
  
diff --combined src/ddns/__init__.py
index 494bf76ac86288e2556d08ddfe5487cbced15081,d8b2b107770c83430672c82d1aedfc6a3f7fa441..ddc995e97609df89c9cb2a4344585b5cffa5025e
@@@ -95,10 -95,10 +95,11 @@@ class DDNSCore(object)
                        DDNSProviderDNSpark,
                        DDNSProviderDtDNS,
                        DDNSProviderDynDNS,
 +                      DDNSProviderFreeDNSAfraidOrg,
                        DDNSProviderNOIP,
                        DDNSProviderLightningWireLabs,
                        DDNSProviderSelfhost,
+                       DDNSProviderSPDNS,
                ):
                        self.register_provider(provider)
  
diff --combined src/ddns/providers.py
index 919642fb0022d4dedb90458d0022835f44e1f198,68305c768075cd4e1bf41a90a89e04f51171c5da..3422cd074cd45f501f7d72aa3ab776cd84df1f1e
@@@ -115,13 -115,6 +115,13 @@@ class DDNSProvider(object)
        def protocols(self):
                return self.INFO.get("protocols")
  
 +      @property
 +      def token(self):
 +              """
 +                      Fast access to the token.
 +              """
 +              return self.get("token")
 +
        def __call__(self, force=False):
                if force:
                        logger.info(_("Updating %s forced") % self.hostname)
@@@ -265,6 -258,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"),
@@@ -356,45 -350,6 +356,45 @@@ class DDNSProviderDynDNS(DDNSProvider)
                raise DDNSUpdateError
  
  
 +class DDNSProviderFreeDNSAfraidOrg(DDNSProvider):
 +      INFO = {
 +              "handle"    : "freedns.afraid.org",
 +              "name"      : "freedns.afraid.org",
 +              "website"   : "http://freedns.afraid.org/",
 +              "protocols" : ["ipv6", "ipv4",]
 +              }
 +
 +      # No information about the request or response could be found on the vendor
 +      # page. All used values have been collected by testing.
 +      url = "https://freedns.afraid.org/dynamic/update.php"
 +
 +      @property
 +      def proto(self):
 +              return self.get("proto")
 +
 +      def update(self):
 +              address = self.get_address(self.proto)
 +
 +              data = {
 +                      "address" : address,
 +              }
 +
 +              # Add auth token to the update url.
 +              url = "%s?%s" % (self.url, self.token)
 +
 +              # Send update to the server.
 +              response = self.send_request(url, data=data)
 +
 +              if output.startswith("Updated") or "has not changed" in output:
 +                      return
 +
 +              # Handle error codes.
 +              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."))
 +
 +
  class DDNSProviderLightningWireLabs(DDNSProvider):
        INFO = {
                "handle"    : "dns.lightningwirelabs.com",
        # https://dns.lightningwirelabs.com/knowledge-base/api/ddns
        url = "https://dns.lightningwirelabs.com/update"
  
 -      @property
 -      def token(self):
 -              """
 -                      Fast access to the token.
 -              """
 -              return self.get("token")
 -
        def update(self):
                data =  {
                        "hostname" : self.hostname,
@@@ -527,3 -489,21 +527,21 @@@ class DDNSProviderSelfhost(DDNSProvider
                match = re.search("status=20(0|4)", response.read())
                if not match:
                        raise DDNSUpdateError
+ class DDNSProviderSPDNS(DDNSProviderDynDNS):
+       INFO = {
+               "handle"    : "spdns.org",
+               "name"      : "SPDNS",
+               "website"   : "http://spdns.org/",
+               "protocols" : ["ipv4",]
+       }
+       # Detailed information about request and response codes are provided
+       # by the vendor. They are using almost the same mechanism and status
+       # codes as dyndns.org so we can inherit all those stuff.
+       #
+       # http://wiki.securepoint.de/index.php/SPDNS_FAQ
+       # http://wiki.securepoint.de/index.php/SPDNS_Update-Tokens
+       url = "https://update.spdns.de/nic/update"