'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 */ private function getAllowedZones(): array { $filter = $this->dnsProvider->credentials['zone_filter'] ?? ''; if (! $filter) { return []; } return array_filter(array_map('trim', explode(',', $filter))); } }