commit 0365041406d0d3cc884eeaecc1c1b24b67cbcd78
parent 1e80e61044506296c9e6e7e30bc00a1169153dea
Author: Bakar Chargeishvili <bakar@bcharge.de>
Date: Mon, 30 Dec 2024 13:13:30 +0100
Port repo for Speedport Smart 4
Diffstat:
7 files changed, 76 insertions(+), 63 deletions(-)
diff --git a/README.md b/README.md
@@ -1,7 +1,9 @@
# ownDynDNS
-Self-hosted dynamic DNS php script to update netcup DNS API from Router like AVM FRITZ!Box
+This is a fork of [ownDynDNS](https://github.com/fernwerker/ownDynDNS)
+a self-hosted dynamic DNS php script to update netcup DNS API modified to work
+with dyndns feature Speedport Smart 4 router.
-## Authors
+## Authors of original repo
* Felix Kretschmer [@fernwerker](https://github.com/fernwerker)
* Philipp Tempel [@philipptempel](https://github.com/philipptempel)
* Branko Wilhelm [@b2un0](https://github.com/b2un0)
@@ -16,29 +18,17 @@ Self-hosted dynamic DNS php script to update netcup DNS API from Router like AVM
* `apiPassword` -> API password which is generated in netcup CCP
* `customerId` -> your netcup Customer ID
* `debug` -> true|false enables debug mode and generates output of update.php (normal operation has no output)
-
-* Create each host record in your netcup CCP (DNS settings) before using the script. The script does not create any missing records.
-### AVM FRITZ!Box Settings
-* Go to "Internet" -> "Freigaben" -> "DynDNS"
-* Choose "Benutzerdefiniert"
-* Update-URL: `https://<url of your webspace>/update.php?user=<username>&password=<pass>&ipv4=<ipaddr>&ipv6=<ip6addr>&domain=<domain>`
- * only the url needs to be adjusted, the rest is automatically filled by your AVM FRITZ!Box
- * http or https is possible if valid SSL certificate (e.g. Let's Encrypt)
-* Single Domain:
- * Domainname: `<host record that is supposed to be updated>`
-* Multiple Domains:
- * Domainname: `<first host record that is supposed to be updated>,<second host record that is supposed to be updated>,....`
-* Username: `<username as defined in .env file>`
-* Password: `<password as definied in .env file>`
+* Create each host record in your netcup CCP (DNS settings) before using the script. The script does not create any missing records.
-# run as cronjob on a **nix based device
-* see [examples](./examples)
+### Router Settings
+Will follow...
## References
* DNS API Documentation: https://ccp.netcup.net/run/webservice/servers/endpoint.php
* Source of dnsapi.php: https://ccp.netcup.net/run/webservice/servers/endpoint.php?PHPSOAPCLIENT
## License
-Published under GNU General Public License v3.0
-© Felix Kretschmer, 2021
+Published under GNU General Public License v3.0
+Originally by Felix Kretschmer, 2021
+Modified by Bakar Chargeishvili, 2024
diff --git a/nic/update.php b/nic/update.php
@@ -0,0 +1,59 @@
+<?php
+
+error_reporting(-1);
+ini_set('display_errors', 1);
+ini_set('html_errors', 0);
+
+header('Content-Type: text/plain; charset=utf-8');
+
+require_once __DIR__ . '/../src/Soap.php';
+require_once __DIR__ . '/../src/Config.php';
+require_once __DIR__ . '/../src/Payload.php';
+require_once __DIR__ . '/../src/Handler.php';
+
+if (!file_exists('../.env')) {
+ throw new RuntimeException('.env file missing');
+}
+
+$config = parse_ini_file('../.env', false, INI_SCANNER_TYPED);
+
+// Initialize the $request array
+$request = [];
+
+// Get auth info
+$auth_user = $_SERVER['PHP_AUTH_USER'] ?? null;
+$auth_pw = $_SERVER['PHP_AUTH_PW'] ?? null;
+
+// Populate the $request array
+$request['user'] = $auth_user ?: 'Not provided';
+$request['password'] = $auth_pw ?: 'Not provided';
+$request['domain'] = $_GET['hostname'] ?? 'Not provided';
+
+// Handle IP addresses
+if (isset($_GET['myip'])) {
+ $ips = explode(',', $_GET['myip']);
+ if (count($ips) >= 2) {
+ $request['ipv6'] = $ips[0];
+ $request['ipv4'] = $ips[1];
+ } elseif (count($ips) == 1) {
+ // If only one IP is provided, assume it's IPv4
+ $request['ipv4'] = $ips[0];
+ $request['ipv6'] = 'Not provided';
+ }
+} else {
+ $request['ipv6'] = 'Not provided';
+ $request['ipv4'] = 'Not provided';
+}
+
+// If you want to include all GET parameters
+//$request['get_params'] = $_GET;
+
+// If you want to include all SERVER variables
+//$request['server_vars'] = $_SERVER;
+
+// Output the results
+print_r($request);
+
+// Call the Handler with the current domain
+(new netcup\DNS\API\Handler($config, $request))->doRun();
+
diff --git a/src/Config.php b/src/Config.php
@@ -116,7 +116,7 @@ final class Config
{
return $this->log;
}
-
+
/**
* @return string
*/
@@ -132,4 +132,4 @@ final class Config
{
return $this->debug;
}
-}
-\ No newline at end of file
+}
diff --git a/src/Handler.php b/src/Handler.php
@@ -188,4 +188,4 @@ final class Handler
return $this;
}
-}
-\ No newline at end of file
+}
diff --git a/src/Payload.php b/src/Payload.php
@@ -175,4 +175,4 @@ final class Payload
{
return $this->force;
}
-}
-\ No newline at end of file
+}
diff --git a/src/Soap.php b/src/Soap.php
@@ -7,8 +7,8 @@ use SoapClient;
use SoapFault;
/**
- * Example client to access the domain reselling API.
- * Please note: We cannot guarantee the function of this client.
+ * Example client to access the domain reselling API.
+ * Please note: We cannot guarantee the function of this client.
* @service DomainWebserviceSoapClient
*/
class DomainWebserviceSoapClient{
@@ -1374,4 +1374,4 @@ class Dnszone{
* @var boolean
*/
public $dnssecstatus;
-}
-\ No newline at end of file
+}
diff --git a/update.php b/update.php
@@ -1,32 +0,0 @@
-<?php
-
-error_reporting(-1);
-ini_set('display_errors', 1);
-ini_set('html_errors', 0);
-
-header('Content-Type: text/plain; charset=utf-8');
-
-require_once __DIR__ . '/src/Soap.php';
-require_once __DIR__ . '/src/Config.php';
-require_once __DIR__ . '/src/Payload.php';
-require_once __DIR__ . '/src/Handler.php';
-
-if (!file_exists('.env')) {
- throw new RuntimeException('.env file missing');
-}
-
-$config = parse_ini_file('.env', false, INI_SCANNER_TYPED);
-
-// Get the domains from the URL parameter and split them from the comma separated string
-$domains = explode(',', $_REQUEST['domain']);
-
-// Loop through each domain and call the Handler
-foreach ($domains as $domain) {
- // Create a new request object with the current domain
- $request = $_REQUEST;
- $request['domain'] = trim($domain);
-
-
- // Call the Handler with the current domain
- (new netcup\DNS\API\Handler($config, $request))->doRun();
-}