'https://rdap.nic.fr/domain/']); try { $res = $rdap->domainLookup('nic.fr', RDAPClient::ARRAY_OUTPUT); } catch (RDAPWrongRequest $e) { return new Response(null, Response::HTTP_BAD_REQUEST); } catch (ClientExceptionInterface $e) { return new Response(null, Response::HTTP_INTERNAL_SERVER_ERROR); } /** * Création du domaine */ $domain = $em->getRepository(Domain::class)->findOneBy(["handle" => $res['handle']]); if ($domain === null) $domain = new Domain(); $domain->setLdhName($res['ldhName']) ->setHandle($res['handle']) ->setStatus(array_map(fn($str): DomainStatus => DomainStatus::from($str), $res['status'])) ->setWhoisStatus($res['whoisStatus']); /** * Hydratation des événements */ foreach ($res['events'] as $rdapEvent) { $event = $domainEventRepository->findOneBy([ "action" => EventAction::from($rdapEvent["eventAction"]), "date" => new DateTimeImmutable($rdapEvent["eventDate"]), "domain" => $res['handle'] ]); if ($event === null) $event = new DomainEvent(); $domain->addEvent($event ->setAction(EventAction::from($rdapEvent['eventAction'])) ->setDate(new DateTimeImmutable($rdapEvent['eventDate']))); } /** * Hydratation des entités */ foreach ($res['entities'] as $rdapEntity) { $entity = $entityRepository->findOneBy([ "handle" => $rdapEntity['handle'] ]); if ($entity === null) $entity = new Entity(); $entity->setHandle($rdapEntity['handle']); foreach ($rdapEntity['events'] as $rdapEntityEvent) { $event = $entityEventRepository->findOneBy([ "action" => EventAction::from($rdapEntityEvent["eventAction"]), "date" => new DateTimeImmutable($rdapEntityEvent["eventDate"]), "entity" => $entity ]); if ($event !== null) continue; $entity->addEvent( (new EntityEvent()) ->setEntity($entity) ->setAction(EventAction::from($rdapEntityEvent['eventAction'])) ->setDate(new DateTimeImmutable($rdapEntityEvent['eventDate']))); } $domainEntity = $domainEntityRepository->findOneBy([ "domain" => $domain, "entity" => $entity ]); if ($domainEntity === null) $domainEntity = new DomainEntity(); $domain->addDomainEntity($domainEntity ->setDomain($domain) ->setEntity($entity) ->setRoles(array_map(fn($str): DomainRole => DomainRole::from($str), $rdapEntity['roles']))); } $em->persist($domain); foreach ($res['nameservers'] as $rdapNameserver) { $nameserver = $nameserverRepository->findOneBy([ "handle" => $rdapNameserver['handle'] ]); if ($nameserver === null) $nameserver = new Nameserver(); $nameserver ->setHandle($rdapNameserver['handle']) ->setLdhName($rdapNameserver['ldhName']) ->setStatus(array_map(fn($str): DomainStatus => DomainStatus::from($str), $rdapNameserver['status'])); foreach ($rdapNameserver['entities'] as $rdapEntity) { $entity = $entityRepository->findOneBy([ "handle" => $rdapEntity['handle'] ]); if ($entity === null) $entity = new Entity(); $entity->setHandle($rdapEntity['handle']); foreach ($rdapEntity['events'] as $rdapEntityEvent) { $event = $entityEventRepository->findOneBy([ "action" => EventAction::from($rdapEntityEvent["eventAction"]), "date" => new DateTimeImmutable($rdapEntityEvent["eventDate"]), "entity" => $entity ]); if ($event !== null) continue; $entity->addEvent( (new EntityEvent()) ->setEntity($entity) ->setAction(EventAction::from($rdapEntityEvent['eventAction'])) ->setDate(new DateTimeImmutable($rdapEntityEvent['eventDate']))); } $nameserverEntity = $nameserverEntityRepository->findOneBy([ "nameserver" => $nameserver, "entity" => $entity ]); if ($nameserverEntity === null) $nameserverEntity = new NameserverEntity(); $nameserver->addNameserverEntity($nameserverEntity ->setNameserver($nameserver) ->setStatus(array_map(fn($str): DomainStatus => DomainStatus::from($str), $rdapNameserver['status'])) ->setEntity($entity) ->setRoles(array_map(fn($str): DomainRole => DomainRole::from($str), $rdapEntity['roles']))); } $domain->addNameserver($nameserver); } $em->persist($domain); $em->flush(); return new Response(null, Response::HTTP_OK); } }