From 700e531e2250a7fe77eab4a1c08281f4eebc4850 Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 20 Aug 2024 13:56:50 +0200 Subject: [PATCH] feat: domain order call a bisto de nas --- composer.json | 3 +- src/Service/Connector/NamecheapConnector.php | 56 +++++++++++++++----- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index 6a8c06f..08f9798 100644 --- a/composer.json +++ b/composer.json @@ -73,7 +73,8 @@ "symfony/yaml": "7.1.*", "symfonycasts/verify-email-bundle": "*", "twig/extra-bundle": "^2.12|^3.0", - "twig/twig": "^2.12|^3.0" + "twig/twig": "^2.12|^3.0", + "ext-simplexml": "*" }, "config": { "allow-plugins": { diff --git a/src/Service/Connector/NamecheapConnector.php b/src/Service/Connector/NamecheapConnector.php index e4f14ae..c8ab383 100644 --- a/src/Service/Connector/NamecheapConnector.php +++ b/src/Service/Connector/NamecheapConnector.php @@ -1,35 +1,68 @@ call('namecheap.users.address.getList'); - private function call(string $command, array $parameters, array $authData = null): object + if (count($addresses) < 1) { + throw new \Exception('Namecheap account requires at least one address to purchase a domain'); + } + + $addressId = $addresses->{0}->AddressId; + $address = $this->call('namecheap.users.address.getinfo', ['AddressId' => $addressId]); + + $domainAddresses = []; + + self::mergePrefixKeys('Registrant', $address, $domainAddresses); + self::mergePrefixKeys('Tech', $address, $domainAddresses); + self::mergePrefixKeys('Admin', $address, $domainAddresses); + self::mergePrefixKeys('AuxBilling', $address, $domainAddresses); + + $this->call('namecheap.domains.create', array_merge([ + 'DomainName' => $domain->getLdhName(), + 'Years' => 1, + 'AddFreeWhoisguard' => 'yes', + 'WGEnabled' => 'yes', + ], $domainAddresses)); + } + + private static function mergePrefixKeys(string $prefix, array|object $src, array &$dest) + { + foreach ($src as $key => $value) { + $dest[$prefix.$key] = $value; + } + } + + private function call(string $command, array $parameters = [], ?array $authData = null): object { if (is_null($authData)) { $authData = $this->authData; } $actualParams = array_merge([ + 'Command' => $command, 'ApiUser' => $authData['ApiUser'], - 'ApiKey' => $authData['ApiKey'] + 'ApiKey' => $authData['ApiKey'], + 'ClientIp' => '', // TODO DW instance IP envvar ], $parameters); - $response = $this->client->request('POST', BASE_URL, [ - 'query' => $actualParams + $response = $this->client->request('POST', self::BASE_URL, [ + 'query' => $actualParams, ]); $data = new \SimpleXMLElement($response->getContent()); @@ -45,4 +78,3 @@ class NamecheapConnector implements ConnectorInterface { } } -