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:
parent
0c58ee7009
commit
05e326abe6
9 changed files with 528 additions and 149 deletions
156
src/Payload.php
Normal file
156
src/Payload.php
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue