summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2017-04-21 10:58:02 -0300
committerRenato Botelho <renato@netgate.com>2017-04-21 10:58:02 -0300
commitb7d2a3da5a0ef272303c9e5455431267fc0e56ae (patch)
tree920133efa5fca15371a1ad727ecc99ebb8261eaa /src
parentfdf384a8916ff0c25b4ec09f0710265aede679a7 (diff)
parent2e3768baa8e6e5793ce165f0d8f60b25bdbdb444 (diff)
downloadpfsense-b7d2a3da5a0ef272303c9e5455431267fc0e56ae.zip
pfsense-b7d2a3da5a0ef272303c9e5455431267fc0e56ae.tar.gz
Merge pull request #3549 from xygrec/patch-dyndns-hover
Diffstat (limited to 'src')
-rw-r--r--src/etc/inc/dyndns.class60
-rw-r--r--src/etc/inc/services.inc4
-rw-r--r--src/usr/local/www/services_dyndns_edit.php3
3 files changed, 64 insertions, 3 deletions
diff --git a/src/etc/inc/dyndns.class b/src/etc/inc/dyndns.class
index 1ace9e5..d73b10f 100644
--- a/src/etc/inc/dyndns.class
+++ b/src/etc/inc/dyndns.class
@@ -60,6 +60,7 @@
* - All-Inkl (all-inkl.com)
* - DuiaDNS (www.duiadns.net)
* - DuiaDNS IPv6 (www.duiadns.net)
+ * - Hover (www.hover.com)
* +----------------------------------------------------+
* Requirements:
* - PHP version 4.0.2 or higher with the CURL Library and the PCRE Library
@@ -113,6 +114,7 @@
* All-Inkl - Last Tested: 12 November 2016
* DuiaDNS - Last Tested: 25 November 2016
* DuiaDNS IPv6 - Last Tested: 25 November 2016
+ * Hover - Last Tested: 15 February 2017
* +====================================================+
*
* @author E.Kristensen
@@ -210,6 +212,7 @@
case "cloudflare-v6":
case "cloudflare":
case "gratisdns":
+ case "hover":
if (!$dnsUser) $this->_error(3);
if (!$dnsPass) $this->_error(4);
if (!$dnsHost) $this->_error(5);
@@ -319,6 +322,7 @@
case 'spdyn':
case 'spdyn-v6':
case 'all-inkl':
+ case 'hover':
$this->_update();
if ($this->_dnsDummyUpdateDone == true) {
// If a dummy update was needed, then sleep a while and do the update again to put the proper address back.
@@ -819,6 +823,52 @@
curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass);
curl_setopt($ch, CURLOPT_URL, $server . 'myip=' . $this->_dnsIP);
break;
+ case 'hover':
+ $needsIP = FALSE;
+ $port = "";
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+
+ //step 1: login to API
+ $post_data['username'] = $this->_dnsUser;
+ $post_data['password'] = $this->_dnsPass;
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
+ curl_setopt($ch, CURLOPT_URL, "https://www.hover.com/api/login");
+ curl_setopt($ch, CURLOPT_HEADER, 1); //return the full headers to extract the cookies
+ $output = curl_exec($ch);
+
+ //extract the cookies
+ preg_match_all("/^Set-cookie: (.*?);/ism", $output, $cookies);
+ if( count($cookies[1]) > 0 ){
+ $cookie_data = implode("; ",$cookies[1]);
+ }
+
+ //step 2: find the id of the A record
+ $post_data = null;
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
+ curl_setopt($ch, CURLOPT_COOKIE, $cookie_data);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_URL, "https://www.hover.com/api/dns");
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
+
+ $output = curl_exec($ch);
+ preg_match("/^{\"succeeded\":true.*?domain_name\":\"{$this->_dnsDomain}.*?entries.*?{\"id\":\"([^\"]*?)\",\"name\":\"{$this->_dnsHost}\".*?\$/", $output, $hostID);
+ $hostID = $hostID[1];
+ preg_match("/^{\"succeeded\":true.*?domain_name\":\"{$this->_dnsDomain}.*?entries.*?{[^\}]*?\"name\":\"{$this->_dnsHost}\".*?content\":\"([^\"]*?)\".*?\$/", $output, $hostIP);
+ $hostIP = $hostIP[1];
+
+ //step 3: update the IP
+ if ($hostID) {
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_setopt($ch, CURLOPT_COOKIE, $cookie_data);
+ $post_data['content'] = $this->_dnsIP;
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
+ curl_setopt($ch, CURLOPT_URL, "https://www.hover.com/api/dns/{$hostID}");
+ log_error("HostID:{$hostID}, OldIP:{$hostIP}");
+ }
+ break;
default:
break;
}
@@ -1483,6 +1533,16 @@
$this->_debug($header);
}
break;
+ case 'hover':
+ if (preg_match('/succeeded":true/i', $data)) {
+ $status = $status_intro . $success_str . gettext("IP Address Changed Successfully!") . " (" . $this->_dnsIP . ")";
+ $successful_update = true;
+ } else {
+ $status = $status_intro . "(" . gettext("Unknown Response") . ")";
+ log_error($status_intro . gettext("PAYLOAD:") . " " . $data);
+ $this->_debug($data);
+ }
+ break;
}
if ($successful_update == true) {
diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc
index a14b245..392ad7b 100644
--- a/src/etc/inc/services.inc
+++ b/src/etc/inc/services.inc
@@ -23,8 +23,8 @@
* limitations under the License.
*/
-define('DYNDNS_PROVIDER_VALUES', 'all-inkl citynetwork cloudflare cloudflare-v6 custom custom-v6 dnsexit dnsimple dnsmadeeasy dnsomatic duiadns duiadns-v6 dyndns dyndns-custom dyndns-static dyns easydns eurodns freedns freedns-v6 glesys googledomains gratisdns he-net he-net-v6 he-net-tunnelbroker loopia namecheap noip noip-free ods opendns ovh-dynhost route53 selfhost spdyn spdyn-v6 zoneedit');
-define('DYNDNS_PROVIDER_DESCRIPTIONS', 'All-Inkl.com,City Network,CloudFlare,CloudFlare (v6),Custom,Custom (v6),DNSexit,DNSimple,DNS Made Easy,DNS-O-Matic,DuiaDns.net,DuiaDns.net (v6),DynDNS (dynamic),DynDNS (custom),DynDNS (static),DyNS,easyDNS,Euro Dns,freeDNS,freeDNS (v6),GleSYS,Google Domains,GratisDNS,HE.net,HE.net (v6),HE.net Tunnelbroker,Loopia,Namecheap,No-IP,No-IP (free),ODS.org,OpenDNS,OVH DynHOST,Route 53,SelfHost,SPDYN,SPDYN (v6),ZoneEdit');
+define('DYNDNS_PROVIDER_VALUES', 'all-inkl citynetwork cloudflare cloudflare-v6 custom custom-v6 dnsexit dnsimple dnsmadeeasy dnsomatic duiadns duiadns-v6 dyndns dyndns-custom dyndns-static dyns easydns eurodns freedns freedns-v6 glesys googledomains gratisdns he-net he-net-v6 he-net-tunnelbroker hover loopia namecheap noip noip-free ods opendns ovh-dynhost route53 selfhost spdyn spdyn-v6 zoneedit');
+define('DYNDNS_PROVIDER_DESCRIPTIONS', 'All-Inkl.com,City Network,CloudFlare,CloudFlare (v6),Custom,Custom (v6),DNSexit,DNSimple,DNS Made Easy,DNS-O-Matic,DuiaDns.net,DuiaDns.net (v6),DynDNS (dynamic),DynDNS (custom),DynDNS (static),DyNS,easyDNS,Euro Dns,freeDNS,freeDNS (v6),GleSYS,Google Domains,GratisDNS,HE.net,HE.net (v6),HE.net Tunnelbroker,Hover,Loopia,Namecheap,No-IP,No-IP (free),ODS.org,OpenDNS,OVH DynHOST,Route 53,SelfHost,SPDYN,SPDYN (v6),ZoneEdit');
/* implement ipv6 route advertising daemon */
function services_radvd_configure($blacklist = array()) {
diff --git a/src/usr/local/www/services_dyndns_edit.php b/src/usr/local/www/services_dyndns_edit.php
index d71c788..173b3bb 100644
--- a/src/usr/local/www/services_dyndns_edit.php
+++ b/src/usr/local/www/services_dyndns_edit.php
@@ -299,7 +299,7 @@ $group->setHelp('Enter the complete fully qualified domain name. Example: myhost
'he.net tunnelbroker: Enter the tunnel ID.%1$s' .
'GleSYS: Enter the record ID.%1$s' .
'DNSimple: Enter only the domain name.%1$s' .
- 'Namecheap, Cloudflare, GratisDNS: Enter the hostname and the domain separately, with the domain being the domain or subdomain zone being handled by the provider.', '<br />');
+ 'Namecheap, Cloudflare, GratisDNS, Hover: Enter the hostname and the domain separately, with the domain being the domain or subdomain zone being handled by the provider.', '<br />');
$section->add($group);
@@ -472,6 +472,7 @@ events.push(function() {
case "cloudflare-v6":
case "cloudflare":
case "gratisdns":
+ case "hover":
hideGroupInput('domainname', false);
hideInput('resultmatch', true);
hideInput('updateurl', true);
OpenPOWER on IntegriCloud