mirror of
https://github.com/maelgangloff/domain-watchdog.git
synced 2025-12-29 16:15:04 +00:00
fix: update table scheme
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Config\DomainRole;
|
||||
use App\Config\DomainStatus;
|
||||
use App\Config\EventAction;
|
||||
use App\Entity\Domain;
|
||||
use App\Entity\DomainEntity;
|
||||
use App\Entity\DomainEvent;
|
||||
use App\Entity\Entity;
|
||||
use App\Entity\EntityEvent;
|
||||
use App\Entity\Nameserver;
|
||||
use App\Entity\NameserverEntity;
|
||||
use App\Repository\DomainEntityRepository;
|
||||
use App\Repository\DomainEventRepository;
|
||||
use App\Repository\DomainRepository;
|
||||
use App\Repository\EntityEventRepository;
|
||||
use App\Repository\EntityRepository;
|
||||
use App\Repository\NameserverEntityRepository;
|
||||
use App\Repository\NameserverRepository;
|
||||
use DateTimeImmutable;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Juanparati\RDAPLib\Exceptions\RDAPWrongRequest;
|
||||
use Juanparati\RDAPLib\RDAPClient;
|
||||
use Psr\Http\Client\ClientExceptionInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
|
||||
class TestController extends AbstractController
|
||||
{
|
||||
|
||||
#[Route(path: '/test', name: 'test')]
|
||||
public function testRoute(EntityRepository $entityRepository,
|
||||
DomainRepository $domainRepository,
|
||||
DomainEventRepository $domainEventRepository,
|
||||
NameserverRepository $nameserverRepository,
|
||||
NameserverEntityRepository $nameserverEntityRepository,
|
||||
EntityEventRepository $entityEventRepository,
|
||||
DomainEntityRepository $domainEntityRepository,
|
||||
EntityManagerInterface $em
|
||||
): Response
|
||||
{
|
||||
$rdap = new RDAPClient(['domain' => '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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user