VitoTechnitiumDns/Technitium.php
Corentin BARNICHON 0d7b62539d first commit
2026-04-16 18:13:36 +02:00

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)));
}
}