1
0
Fork 0
mirror of https://github.com/fernwerker/ownDynDNS.git synced 2025-07-11 06:38:02 +02:00

* rewrite the hole script:

** use .env file for config so we can retrieve updates
** add config and payload DTO with validators
** allow registrable domains as DynDNS
** update IPv4/6 only if changed (or really forced)
** remove obsolete failed_logins counter
** save logs with timestamp
** save only the newest 100 log entries for each domain
This commit is contained in:
Branko Wilhelm 2019-05-16 18:00:21 +02:00
parent 0c58ee7009
commit 05e326abe6
No known key found for this signature in database
GPG key ID: 3BBFB6DDFBC46B0E
9 changed files with 528 additions and 149 deletions

156
src/Payload.php Normal file
View file

@ -0,0 +1,156 @@
<?php
namespace netcup\DNS\API;
final class Payload
{
/**
* @var string
*/
private $user;
/**
* @var string
*/
private $password;
/**
* @var string
*/
private $domain;
/**
* @var string
*/
private $ipv4;
/**
* @var string
*/
private $ipv6;
/**
* @var bool
*/
private $force = false;
public function __construct(array $payload)
{
foreach (get_object_vars($this) as $key => $val) {
if (isset($payload[$key])) {
$this->$key = $payload[$key];
}
}
}
/**
* @return bool
*/
public function isValid()
{
return
!empty($this->user) &&
!empty($this->password) &&
!empty($this->domain) &&
(
(
!empty($this->ipv4) && $this->isValidIpv4()
)
||
(
!empty($this->ipv6) && $this->isValidIpv6()
)
);
}
/**
* @return string
*/
public function getUser()
{
return $this->user;
}
/**
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* @return string
*/
public function getDomain()
{
return $this->domain;
}
/**
* there is no good way to get the correct "registrable" Domain without external libs!
*
* @see https://github.com/jeremykendall/php-domain-parser
*
* this method is still tricky, because:
*
* works: nas.tld.com
* works: nas.tld.de
* works: tld.com
* failed: nas.tld.co.uk
* failed: nas.home.tld.de
*
* @return string
*/
public function getHostname()
{
// hack if top level domain are used for dynDNS
if (1 === substr_count($this->domain, '.')) {
return $this->domain;
}
$domainParts = explode('.', $this->domain);
array_shift($domainParts); // remove sub domain
return implode('.', $domainParts);
}
/**
* @return string
*/
public function getIpv4()
{
return $this->ipv4;
}
/**
* @return bool
*/
public function isValidIpv4()
{
return (bool)filter_var($this->ipv4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
}
/**
* @return string
*/
public function getIpv6()
{
return $this->ipv6;
}
/**
* @return bool
*/
public function isValidIpv6()
{
return (bool)filter_var($this->ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
}
/**
* @return bool
*/
public function isForce()
{
return $this->force;
}
}