fix: some RDAP servers return the same entity twice

This commit is contained in:
Maël Gangloff
2024-12-22 23:48:37 +01:00
parent 015b3c2797
commit 2a64bcecee

View File

@@ -323,6 +323,7 @@ readonly class RDAPService
/** /**
* @throws \DateMalformedStringException * @throws \DateMalformedStringException
* @throws \Exception
*/ */
private function updateDomainEntities(Domain $domain, array $rdapData): void private function updateDomainEntities(Domain $domain, array $rdapData): void
{ {
@@ -351,6 +352,7 @@ readonly class RDAPService
->setDeleted(false)); ->setDeleted(false));
$this->em->persist($domainEntity); $this->em->persist($domainEntity);
$this->em->flush();
} }
} }
} }
@@ -395,6 +397,9 @@ readonly class RDAPService
return $nameserver; return $nameserver;
} }
/**
* @throws \DateMalformedStringException
*/
private function updateNameserverEntities(Nameserver $nameserver, array $rdapNameserver): void private function updateNameserverEntities(Nameserver $nameserver, array $rdapNameserver): void
{ {
if (!array_key_exists('entities', $rdapNameserver) || !is_array($rdapNameserver['entities'])) { if (!array_key_exists('entities', $rdapNameserver) || !is_array($rdapNameserver['entities'])) {
@@ -403,7 +408,6 @@ readonly class RDAPService
foreach ($rdapNameserver['entities'] as $rdapEntity) { foreach ($rdapNameserver['entities'] as $rdapEntity) {
$roles = $this->extractEntityRoles($rdapNameserver['entities'], $rdapEntity); $roles = $this->extractEntityRoles($rdapNameserver['entities'], $rdapEntity);
$entity = $this->registerEntity($rdapEntity, $roles, $nameserver->getLdhName()); $entity = $this->registerEntity($rdapEntity, $roles, $nameserver->getLdhName());
$nameserverEntity = $this->nameserverEntityRepository->findOneBy([ $nameserverEntity = $this->nameserverEntityRepository->findOneBy([
@@ -429,7 +433,13 @@ readonly class RDAPService
fn ($e) => $e['roles'], fn ($e) => $e['roles'],
array_filter( array_filter(
$entities, $entities,
fn ($e) => $targetEntity === $e fn ($e) => array_key_exists('handle', $targetEntity) && array_key_exists('handle', $e)
? $targetEntity['handle'] === $e['handle']
: (
array_key_exists('vcardArray', $targetEntity) && array_key_exists('vcardArray', $e)
? $targetEntity['vcardArray'] === $e['vcardArray']
: $targetEntity === $e
)
) )
); );