From patchwork Tue Jan 7 16:35:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christof Weniger X-Patchwork-Id: 2684 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 47sdRv3Qyfz3xY5 for ; Tue, 7 Jan 2020 16:41:15 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail02.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 47sdRs4vDmz2pS; Tue, 7 Jan 2020 16:41:13 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 47sdRs2wlZz2yLN; Tue, 7 Jan 2020 16:41:13 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 47sdRq4QRmz2xmJ for ; Tue, 7 Jan 2020 16:41:11 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass Class 2 CA" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 47sdRp55Hyz2pS for ; Tue, 7 Jan 2020 16:41:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1578415252; bh=KLoz5VOerRMg6f2s9WVQfy6XY8xB240esmDYE1mp7Lk=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=HgHCN0H1tV5awshfEZZv4CnqPO6IU7Xc6C2MPDtrLan0PQxHp09lTQhUbwZfXI/Ox J8fZKmADYux+wyTd1lyw1lW2Kz0GZEgOqdjTho4zETy/UcnWEvtRYRY/bW+370rLUx oekhUDxTMJULbJ/Cl9XHkrcIcTfu2i0QLxrVxY3o= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([88.117.64.180]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M5QF5-1io2sx1f5p-001ULa; Tue, 07 Jan 2020 17:35:46 +0100 From: Christof Weniger To: development@lists.ipfire.org Subject: [PATCH] add ddns Provider key-systems.net Date: Tue, 7 Jan 2020 17:35:37 +0100 Message-Id: <20200107163537.30752-1-christofweniger@gmx.at> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: X-Provags-ID: V03:K1:C3Z0ynvkKTebAOmzkIcxqpSATQyel0LgeuK2kWRvKNNdcLkURl+ mx8pJI31KPNtYpD8MqweNWUzzPskD0VavxHbyWxz97ePP2GiHbpLBEctbR4pXCzJIQOmHN6 7BArIalvHQstbMyxD5XQQReXMFS1KBliSokdmXK9jGev3VuufcN/FYQ+pKiXOSeTOwcKFzW cXneh7oRBao4/BvxFgj8g== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:WLhLiICt/Wc=:oMG6M7aYVMukO///f9vgjF XA+LFwHYp3ruaCaOCNcSLPwIw8kezFDYj/aeYGMAnUg2/dm9LLSBz7ObpRYa5LnM745i0OmsQ Rl9V1ql/4IBJIHN2xLwYwmmME5PEqv9hkLP/6n30+ElzAN8UmyAjLhx+0eN3qGp+uxsk5PL04 7EinnuZ2l+CG3Q6GvmBeehheOHPhm2AxiweOQoyORk57x1vfRkXHpKEsjZPAzKOxSzp7OVE/v ToxW9H8lcfc3+SJhqBq6s6xTyTnysxfYp42lOhCh9vSdgw0rY7wzFsRTq3vKoQ3ZJrTnz3ZT9 wZzsPG9sCeOb/yA9/xFLRjv9/RBk5k+DEoTI7+ubBy26E97MO3ARbglQu1SUJ8rE7fxP0I9Sj +hdKU/Tsv9jiP6May5nyZrT15Rqr76t4K8V/SfNY8Sr0XfUkTkC+dLPb7WeHNMl8if2LCVuQP eWsTAj1Ky3u6s2dnasmAScfOxSEReIHYviQqVSafvBg8ziw8aNdqwQ5cWJQ3fbd4pDQft+z7m Q2ioyUj0+zVwlS35gwcVqq/3wjWrTIHBQ2ebwqKP8qejoICFoGV33fBZKQjW7t5SP4zLxQU4m J3K9ddNBV/RwU2mw7GzidrThZrrJxJdc5kQIGK2ULjNOYhSQMfP3vA2ysUutE5Mh3WSzlyrzH B6k1SHFoRd+T2xoj7prUzrOIXhyQmzKpjwlsut5K32PRWYxgcTMDYe/dMK978IuCBsQJSyBR9 5Kbe3y4bO/e5MalJRCKEujSgcDOKNHnY73ULCb1XRLJa423RRmXu1u82n4Hb7c1Tk3uJlLHpZ ppXm4geofufwAu4B1Giv5ib8iGoWfZK+xyEiImAC0u16P5vz963KKgFJs1rtHcQ+n8pSoTQ3e 27TrFfZvXkWZ8MvizXL0sdXYjREot6Oi0Ukhqpq0vO69LSMlJrYZH8FwrDPxGyv+q2XAqVu7X a8EM8Aro/TjfbzvD3G4t5Nlg5W/7KEODY4arEH+A//3olvIJN9rvnPY2q34sp2XFINc72qCuC o5qUt7yXwS/6DaCyW0SnPjT/vGgOovd90dRhFGYqUIknPv8MDORQ3/Khiebx/qthKBn0DOVJs FLG49owg4jXzTXXxXXUTqn5jaDMOIJDIx9c+a83qRxZso+c7Q+QjPA6GeaZfPuei/KfBNOEgg oPjy0Zb8UAaxMFNghQr30C6vrNgaNqzsnnj45k/Bf+GOA79Xk57MptSEWddiXlZxj75fVFt32 AbJ0O8HxpJKGDpB83zXb1qih6en9YXDlZmsbgReJS0Hl+NzKtfRiEg/tDu+4= Authentication-Results: mail01.ipfire.org; dkim=pass header.d=gmx.net header.s=badeba3b8450 header.b=HgHCN0H1; dmarc=none; spf=pass (mail01.ipfire.org: domain of christofweniger@gmx.at designates 212.227.15.19 as permitted sender) smtp.mailfrom=christofweniger@gmx.at X-Rspamd-Queue-Id: 47sdRp55Hyz2pS X-Spamd-Result: default: False [1.81 / 11.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmx.at]; R_MISSING_CHARSET(2.50)[]; MISSING_MIME_VERSION(2.00)[]; R_SPF_ALLOW(-0.20)[+ip4:212.227.15.0/25]; DKIM_TRACE(0.00)[gmx.net:+]; RCPT_COUNT_TWO(0.00)[2]; MX_GOOD(-0.01)[mx00.emig.gmx.net,mx01.emig.gmx.net]; RECEIVED_SPAMHAUS_PBL(0.00)[88.117.64.180:received]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmx.at]; ASN(0.00)[asn:8560, ipnet:212.227.0.0/16, country:DE]; BAYES_HAM(-3.00)[99.99%]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[gmx.net:s=badeba3b8450]; FROM_HAS_DN(0.00)[]; MIME_GOOD(-0.10)[text/plain]; SENDER_REP_HAM(0.00)[asn: 8560(0.00), country: DE(-0.01), ip: 212.227.15.19(0.00)]; DMARC_NA(0.00)[gmx.at]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MID_CONTAINS_FROM(1.00)[]; RCVD_IN_DNSWL_NONE(0.00)[212.227.15.19:from]; NEURAL_HAM(-0.18)[-0.180]; FREEMAIL_CC(0.00)[gmx.at]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2] X-Rspamd-Server: mail01.haj.ipfire.org X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Christof Weniger Errors-To: development-bounces@lists.ipfire.org Sender: "Development" Hi, sorry for the long delay. It's the time of the year, where I think it might be easier to just move in with the childrens doctor instead of daily vists :-( Michael thank you for your pointers and reviews. Reviewed-by: Michael Tremer --- README | 1 + src/ddns/providers.py | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) -- 2.17.1 diff --git a/README b/README index c75c448..b6decb3 100644 --- a/README +++ b/README @@ -72,6 +72,7 @@ SUPPORTED PROVIDERS: inwx.com|de|at|ch|es itsdns.de joker.com + key-systems.net loopia.se myonlineportal.net namecheap.com diff --git a/src/ddns/providers.py b/src/ddns/providers.py index 661fbcc..666740e 100644 --- a/src/ddns/providers.py +++ b/src/ddns/providers.py @@ -1204,6 +1204,52 @@ class DDNSProviderJoker(DDNSProtocolDynDNS2, DDNSProvider): url = "https://svc.joker.com/nic/update" +class DDNSProviderKEYSYSTEMS(DDNSProvider): + handle = "key-systems.net" + name = "dynamicdns.key-systems.net" + website = "https://domaindiscount24.com/" + protocols = ("ipv4",) + + # There are only information provided by the domaindiscount24 how to + # perform an update with HTTP APIs + # https://www.domaindiscount24.com/faq/dynamic-dns + # examples: https://dynamicdns.key-systems.net/update.php?hostname=hostname&password=password&ip=auto + # https://dynamicdns.key-systems.net/update.php?hostname=hostname&password=password&ip=213.x.x.x&mx=213.x.x.x + + url = "https://dynamicdns.key-systems.net/update.php" + can_remove_records = False + + def update_protocol(self, proto): + address = self.get_address(proto) + data = { + "hostname" : self.hostname, + "password" : self.password, + "ip" : address, + } + + # Send update to the server. + response = self.send_request(self.url, data=data) + + # Get the full response message. + output = response.read() + + # Handle success messages. + if "code = 200" in output: + return + + # Handle error messages. + if "abuse prevention triggered" in output: + raise DDNSAbuseError + elif "invalid password" in output: + raise DDNSAuthenticationError + elif "Authorization failed" in output: + raise DDNSRequestError(_("Invalid hostname specified")) + + # If we got here, some other update error happened. + raise DDNSUpdateError + + + class DDNSProviderGoogle(DDNSProtocolDynDNS2, DDNSProvider): handle = "domains.google.com" name = "Google Domains"