From 3e51425f6879676b0a2680a889500570f6f49317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Sat, 7 Sep 2024 01:14:50 +0200 Subject: [PATCH] feat: if a domain is deleted, it must be updated --- src/Controller/WatchListController.php | 47 +++++++++++++++----------- src/Service/RDAPService.php | 2 +- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/Controller/WatchListController.php b/src/Controller/WatchListController.php index 4882816..d3bac85 100644 --- a/src/Controller/WatchListController.php +++ b/src/Controller/WatchListController.php @@ -161,29 +161,38 @@ class WatchListController extends AbstractController /** @var User $user */ $user = $this->getUser(); - if (null !== $connector) { - if (!$user->getConnectors()->contains($connector)) { - $this->logger->notice('The Connector ({connector}) does not belong to the user.', [ - 'username' => $user->getUserIdentifier(), - 'connector' => $connector->getId(), - ]); - throw new AccessDeniedHttpException('You cannot create a Watchlist with a connector that does not belong to you'); + if (null === $connector) { + return; + } + if (!$user->getConnectors()->contains($connector)) { + $this->logger->notice('The Connector ({connector}) does not belong to the user.', [ + 'username' => $user->getUserIdentifier(), + 'connector' => $connector->getId(), + ]); + throw new AccessDeniedHttpException('You cannot create a Watchlist with a connector that does not belong to you'); + } + + /** @var Domain $domain */ + foreach ($watchList->getDomains()->getIterator() as $domain) { + if ($domain->getDeleted()) { + $ldhName = $domain->getLdhName(); + throw new BadRequestHttpException("To add a connector, no domain in this Watchlist must have already expired ($ldhName)"); } + } - $connectorProviderClass = $connector->getProvider()->getConnectorProvider(); - /** @var AbstractProvider $connectorProvider */ - $connectorProvider = new $connectorProviderClass($connector->getAuthData(), $this->httpClient, $this->cacheItemPool, $this->kernel); + $connectorProviderClass = $connector->getProvider()->getConnectorProvider(); + /** @var AbstractProvider $connectorProvider */ + $connectorProvider = new $connectorProviderClass($connector->getAuthData(), $this->httpClient, $this->cacheItemPool, $this->kernel); - $connectorProvider::verifyAuthData($connector->getAuthData(), $this->httpClient); // We want to check if the tokens are OK - $supported = $connectorProvider->isSupported(...$watchList->getDomains()->toArray()); + $connectorProvider::verifyAuthData($connector->getAuthData(), $this->httpClient); // We want to check if the tokens are OK + $supported = $connectorProvider->isSupported(...$watchList->getDomains()->toArray()); - if (!$supported) { - $this->logger->notice('The Connector ({connector}) does not support all TLDs in this Watchlist', [ - 'username' => $user->getUserIdentifier(), - 'connector' => $connector->getId(), - ]); - throw new BadRequestHttpException('This connector does not support all TLDs in this Watchlist'); - } + if (!$supported) { + $this->logger->notice('The Connector ({connector}) does not support all TLDs in this Watchlist', [ + 'username' => $user->getUserIdentifier(), + 'connector' => $connector->getId(), + ]); + throw new BadRequestHttpException('This connector does not support all TLDs in this Watchlist'); } } diff --git a/src/Service/RDAPService.php b/src/Service/RDAPService.php index f365847..2d76b6d 100644 --- a/src/Service/RDAPService.php +++ b/src/Service/RDAPService.php @@ -102,7 +102,7 @@ readonly class RDAPService public static function isToBeWatchClosely(Domain $domain): bool { $status = $domain->getStatus(); - if (!empty($status) && count(array_intersect($status, self::IMPORTANT_STATUS))) { + if ((!empty($status) && count(array_intersect($status, self::IMPORTANT_STATUS))) || $domain->getDeleted()) { return true; }