diff --git a/src/Command/BatchRegisterDomainCommand.php b/src/Command/BatchRegisterDomainCommand.php new file mode 100644 index 0000000..b86a8dd --- /dev/null +++ b/src/Command/BatchRegisterDomainCommand.php @@ -0,0 +1,64 @@ +addArgument('file', InputArgument::REQUIRED, 'Path to a file containing a list of domain names'); + } + + /** + * @throws ExceptionInterface + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $file = $input->getArgument('file'); + + if (!file_exists($file) || !is_readable($file)) { + $io->error(sprintf('File "%s" does not exist or is not readable.', $file)); + + return Command::FAILURE; + } + $domains = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + + if (empty($domains)) { + $io->warning('The list is empty.'); + + return Command::SUCCESS; + } + + $io->title('Registering domains'); + /** @var string $ldhName */ + foreach ($domains as $ldhName) { + $this->messageBus->dispatch(new UpdateDomain($ldhName, null)); + } + + $io->success(sprintf('Imported %d domain names.', count($domains))); + + return Command::SUCCESS; + } +} diff --git a/src/Message/UpdateDomain.php b/src/Message/UpdateDomain.php index 758b1ce..086ecd5 100644 --- a/src/Message/UpdateDomain.php +++ b/src/Message/UpdateDomain.php @@ -9,7 +9,7 @@ final class UpdateDomain { public function __construct( public string $ldhName, - public string $watchlistToken, + public ?string $watchlistToken, ) { } } diff --git a/src/MessageHandler/UpdateDomainHandler.php b/src/MessageHandler/UpdateDomainHandler.php index 81a2eac..bb12cf1 100644 --- a/src/MessageHandler/UpdateDomainHandler.php +++ b/src/MessageHandler/UpdateDomainHandler.php @@ -67,6 +67,13 @@ final readonly class UpdateDomainHandler public function __invoke(UpdateDomain $message): void { $domain = $this->domainRepository->findOneBy(['ldhName' => $message->ldhName]); + + if (null === $domain) { + $this->RDAPService->registerDomain($message->ldhName); + + return; + } + /** @var ?RdapServer $rdapServer */ $rdapServer = $domain->getTld()->getRdapServers()->first(); if (null === $rdapServer) { @@ -79,6 +86,15 @@ final readonly class UpdateDomainHandler $watchlist = $this->watchlistRepository->findOneBy(['token' => $message->watchlistToken]); + if (null === $watchlist) { + /** @var Watchlist $wl */ + foreach ($domain->getWatchlists()->getIterator() as $wl) { + $this->bus->dispatch(new UpdateDomain($message->ldhName, $wl->getToken())); + } + + return; + } + if (!$this->RDAPService->isToBeUpdated($domain, false, null !== $watchlist->getConnector())) { $this->logger->debug('The domain name is already present in the database and does not need to be updated at this time', [ 'ldhName' => $domain->getLdhName(),