104 lines
2.8 KiB
PHP
104 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Vito\Plugins\LiittleCookie\VitoTechnitiumDns;
|
|
|
|
use App\DNSProviders\AbstractDNSProvider;
|
|
use App\Vito\Plugins\LiittleCookie\VitoTechnitiumDns\Actions\ListZones;
|
|
use App\Vito\Plugins\LiittleCookie\VitoTechnitiumDns\Actions\ManageRecords;
|
|
use App\Vito\Plugins\LiittleCookie\VitoTechnitiumDns\Actions\TestConnection;
|
|
use App\Vito\Plugins\LiittleCookie\VitoTechnitiumDns\Services\TechnitiumClient;
|
|
|
|
class Technitium extends AbstractDNSProvider
|
|
{
|
|
public static function id(): string
|
|
{
|
|
return 'technitium';
|
|
}
|
|
|
|
public function validationRules(array $input): array
|
|
{
|
|
return [
|
|
'server_url' => 'required|url',
|
|
'api_token' => 'required|string',
|
|
'zone_filter' => 'nullable|string',
|
|
];
|
|
}
|
|
|
|
public function credentialData(array $input): array
|
|
{
|
|
return [
|
|
'server_url' => rtrim($input['server_url'], '/'),
|
|
'api_token' => $input['api_token'],
|
|
'zone_filter' => $input['zone_filter'] ?? '',
|
|
];
|
|
}
|
|
|
|
public function connect(array $credentials): bool
|
|
{
|
|
return app(TestConnection::class)->test($credentials);
|
|
}
|
|
|
|
public function getDomains(): array
|
|
{
|
|
return $this->zones()->list($this->getAllowedZones());
|
|
}
|
|
|
|
public function getDomain(string $domainId): array
|
|
{
|
|
return $this->zones()->find($domainId);
|
|
}
|
|
|
|
public function getRecords(string $domainId): array
|
|
{
|
|
return $this->records()->list($domainId);
|
|
}
|
|
|
|
public function createRecord(string $domainId, array $recordData): array
|
|
{
|
|
return $this->records()->create($domainId, $recordData);
|
|
}
|
|
|
|
public function updateRecord(string $domainId, string $recordId, array $recordData): array
|
|
{
|
|
return $this->records()->update($domainId, $recordId, $recordData);
|
|
}
|
|
|
|
public function deleteRecord(string $domainId, string $recordId): bool
|
|
{
|
|
return $this->records()->delete($domainId, $recordId);
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Private Helpers
|
|
// -------------------------------------------------------------------------
|
|
|
|
private function client(): TechnitiumClient
|
|
{
|
|
return TechnitiumClient::fromCredentials($this->dnsProvider->credentials);
|
|
}
|
|
|
|
private function zones(): ListZones
|
|
{
|
|
return new ListZones($this->client());
|
|
}
|
|
|
|
private function records(): ManageRecords
|
|
{
|
|
return new ManageRecords($this->client());
|
|
}
|
|
|
|
/**
|
|
* @return array<int, string>
|
|
*/
|
|
private function getAllowedZones(): array
|
|
{
|
|
$filter = $this->dnsProvider->credentials['zone_filter'] ?? '';
|
|
|
|
if (! $filter) {
|
|
return [];
|
|
}
|
|
|
|
return array_filter(array_map('trim', explode(',', $filter)));
|
|
}
|
|
}
|