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:
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your needs!
|
||||
*/
|
||||
final class Version20240713104543 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// this up() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql('CREATE TEMPORARY TABLE __temp__nameserver AS SELECT ldh_name, handle FROM nameserver');
|
||||
$this->addSql('DROP TABLE nameserver');
|
||||
$this->addSql('CREATE TABLE nameserver (ldh_name VARCHAR(255) NOT NULL, handle VARCHAR(255) DEFAULT NULL, PRIMARY KEY(ldh_name))');
|
||||
$this->addSql('INSERT INTO nameserver (ldh_name, handle) SELECT ldh_name, handle FROM __temp__nameserver');
|
||||
$this->addSql('DROP TABLE __temp__nameserver');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
// this down() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql('CREATE TEMPORARY TABLE __temp__nameserver AS SELECT ldh_name, handle FROM nameserver');
|
||||
$this->addSql('DROP TABLE nameserver');
|
||||
$this->addSql('CREATE TABLE nameserver (ldh_name VARCHAR(255) NOT NULL, handle VARCHAR(255) NOT NULL, PRIMARY KEY(ldh_name))');
|
||||
$this->addSql('INSERT INTO nameserver (ldh_name, handle) SELECT ldh_name, handle FROM __temp__nameserver');
|
||||
$this->addSql('DROP TABLE __temp__nameserver');
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ use Doctrine\Migrations\AbstractMigration;
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your needs!
|
||||
*/
|
||||
final class Version20240713104346 extends AbstractMigration
|
||||
final class Version20240713135242 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
@@ -22,25 +22,25 @@ final class Version20240713104346 extends AbstractMigration
|
||||
// this up() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql('CREATE TABLE domain (ldh_name VARCHAR(255) NOT NULL, handle VARCHAR(255) NOT NULL, status CLOB NOT NULL --(DC2Type:simple_array)
|
||||
, PRIMARY KEY(ldh_name))');
|
||||
$this->addSql('CREATE TABLE domain_nameservers (domain_handle VARCHAR(255) NOT NULL, nameserver_ldh_name VARCHAR(255) NOT NULL, PRIMARY KEY(domain_handle, nameserver_ldh_name), CONSTRAINT FK_B6E6B63AFEE32C10 FOREIGN KEY (domain_handle) REFERENCES domain (handle) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_B6E6B63AA6496BFE FOREIGN KEY (nameserver_ldh_name) REFERENCES nameserver (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_B6E6B63AFEE32C10 ON domain_nameservers (domain_handle)');
|
||||
$this->addSql('CREATE TABLE domain_nameservers (domain_ldh_name VARCHAR(255) NOT NULL, nameserver_ldh_name VARCHAR(255) NOT NULL, PRIMARY KEY(domain_ldh_name, nameserver_ldh_name), CONSTRAINT FK_B6E6B63AAF923913 FOREIGN KEY (domain_ldh_name) REFERENCES domain (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_B6E6B63AA6496BFE FOREIGN KEY (nameserver_ldh_name) REFERENCES nameserver (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_B6E6B63AAF923913 ON domain_nameservers (domain_ldh_name)');
|
||||
$this->addSql('CREATE INDEX IDX_B6E6B63AA6496BFE ON domain_nameservers (nameserver_ldh_name)');
|
||||
$this->addSql('CREATE TABLE domain_entity (domain_id VARCHAR(255) NOT NULL, entity_id VARCHAR(255) NOT NULL, roles CLOB NOT NULL --(DC2Type:simple_array)
|
||||
, PRIMARY KEY(domain_id, entity_id), CONSTRAINT FK_614B48A1115F0EE5 FOREIGN KEY (domain_id) REFERENCES domain (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_614B48A181257D5D FOREIGN KEY (entity_id) REFERENCES entity (handle) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE TABLE domain_entity (domain_id VARCHAR(255) NOT NULL, entity_id INTEGER NOT NULL, roles CLOB NOT NULL --(DC2Type:simple_array)
|
||||
, PRIMARY KEY(domain_id, entity_id), CONSTRAINT FK_614B48A1115F0EE5 FOREIGN KEY (domain_id) REFERENCES domain (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_614B48A181257D5D FOREIGN KEY (entity_id) REFERENCES entity (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_614B48A1115F0EE5 ON domain_entity (domain_id)');
|
||||
$this->addSql('CREATE INDEX IDX_614B48A181257D5D ON domain_entity (entity_id)');
|
||||
$this->addSql('CREATE TABLE domain_event (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, domain_id VARCHAR(255) NOT NULL, "action" VARCHAR(255) NOT NULL, date DATETIME NOT NULL --(DC2Type:datetime_immutable)
|
||||
, CONSTRAINT FK_E8D52271115F0EE5 FOREIGN KEY (domain_id) REFERENCES domain (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_E8D52271115F0EE5 ON domain_event (domain_id)');
|
||||
$this->addSql('CREATE TABLE entity (handle VARCHAR(255) NOT NULL, j_card CLOB NOT NULL --(DC2Type:json)
|
||||
, PRIMARY KEY(handle))');
|
||||
$this->addSql('CREATE TABLE entity_event (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, entity_id VARCHAR(255) NOT NULL, "action" VARCHAR(255) NOT NULL, date DATETIME NOT NULL --(DC2Type:datetime_immutable)
|
||||
, CONSTRAINT FK_975A3F5E81257D5D FOREIGN KEY (entity_id) REFERENCES entity (handle) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE TABLE entity (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, handle VARCHAR(255) NOT NULL, tld VARCHAR(255) NOT NULL, j_card CLOB NOT NULL --(DC2Type:json)
|
||||
)');
|
||||
$this->addSql('CREATE TABLE entity_event (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, entity_id INTEGER NOT NULL, "action" VARCHAR(255) NOT NULL, date DATETIME NOT NULL --(DC2Type:datetime_immutable)
|
||||
, CONSTRAINT FK_975A3F5E81257D5D FOREIGN KEY (entity_id) REFERENCES entity (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_975A3F5E81257D5D ON entity_event (entity_id)');
|
||||
$this->addSql('CREATE TABLE nameserver (ldh_name VARCHAR(255) NOT NULL, handle VARCHAR(255) NOT NULL, PRIMARY KEY(ldh_name))');
|
||||
$this->addSql('CREATE TABLE nameserver_entity (nameserver_id VARCHAR(255) NOT NULL, entity_id VARCHAR(255) NOT NULL, roles CLOB NOT NULL --(DC2Type:simple_array)
|
||||
$this->addSql('CREATE TABLE nameserver (ldh_name VARCHAR(255) NOT NULL, PRIMARY KEY(ldh_name))');
|
||||
$this->addSql('CREATE TABLE nameserver_entity (nameserver_id VARCHAR(255) NOT NULL, entity_id INTEGER NOT NULL, roles CLOB NOT NULL --(DC2Type:simple_array)
|
||||
, status CLOB NOT NULL --(DC2Type:simple_array)
|
||||
, PRIMARY KEY(nameserver_id, entity_id), CONSTRAINT FK_A269AFB41A555619 FOREIGN KEY (nameserver_id) REFERENCES nameserver (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_A269AFB481257D5D FOREIGN KEY (entity_id) REFERENCES entity (handle) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
, PRIMARY KEY(nameserver_id, entity_id), CONSTRAINT FK_A269AFB41A555619 FOREIGN KEY (nameserver_id) REFERENCES nameserver (ldh_name) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_A269AFB481257D5D FOREIGN KEY (entity_id) REFERENCES entity (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
|
||||
$this->addSql('CREATE INDEX IDX_A269AFB41A555619 ON nameserver_entity (nameserver_id)');
|
||||
$this->addSql('CREATE INDEX IDX_A269AFB481257D5D ON nameserver_entity (entity_id)');
|
||||
$this->addSql('CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, email VARCHAR(180) NOT NULL, roles CLOB NOT NULL --(DC2Type:json)
|
||||
@@ -48,7 +48,8 @@ class TestController extends AbstractController
|
||||
#[Route(path: '/test/{fqdn}', name: 'test')]
|
||||
public function testRoute(string $fqdn): Response
|
||||
{
|
||||
$rdapServer = $this->getRdapServer($fqdn);
|
||||
$tld = $this->getTld($fqdn);
|
||||
$rdapServer = $this->getRdapServer($tld);
|
||||
|
||||
$res = $this->client->request(
|
||||
'GET', $rdapServer . 'domain/' . $fqdn
|
||||
@@ -79,7 +80,10 @@ class TestController extends AbstractController
|
||||
|
||||
foreach ($res['entities'] as $rdapEntity) {
|
||||
if (!array_key_exists('handle', $rdapEntity)) continue;
|
||||
$entity = $this->processEntity($rdapEntity);
|
||||
$entity = $this->processEntity($rdapEntity, $tld);
|
||||
|
||||
$this->em->persist($entity);
|
||||
$this->em->flush();
|
||||
|
||||
$domainEntity = $this->domainEntityRepository->findOneBy([
|
||||
"domain" => $domain,
|
||||
@@ -94,13 +98,10 @@ class TestController extends AbstractController
|
||||
->setEntity($entity)
|
||||
->setRoles(array_map(fn($str): DomainRole => DomainRole::from($str), $rdapEntity['roles'])));
|
||||
|
||||
$this->em->persist($entity);
|
||||
$this->em->persist($domainEntity);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
$this->em->persist($domain);
|
||||
$this->em->flush();
|
||||
|
||||
|
||||
foreach ($res['nameservers'] as $rdapNameserver) {
|
||||
$nameserver = $this->nameserverRepository->findOneBy([
|
||||
@@ -109,7 +110,6 @@ class TestController extends AbstractController
|
||||
if ($nameserver === null) $nameserver = new Nameserver();
|
||||
|
||||
$nameserver->setLdhName($rdapNameserver['ldhName']);
|
||||
if (array_key_exists('handle', $rdapNameserver)) $nameserver->setHandle($rdapNameserver['handle']);
|
||||
|
||||
if (!array_key_exists('entities', $rdapNameserver)) {
|
||||
$domain->addNameserver($nameserver);
|
||||
@@ -119,7 +119,10 @@ class TestController extends AbstractController
|
||||
foreach ($rdapNameserver['entities'] as $rdapEntity) {
|
||||
if (!array_key_exists('handle', $rdapEntity)) continue;
|
||||
|
||||
$entity = $this->processEntity($rdapEntity);
|
||||
$entity = $this->processEntity($rdapEntity, $tld);
|
||||
|
||||
$this->em->persist($entity);
|
||||
$this->em->flush();
|
||||
|
||||
$nameserverEntity = $this->nameserverEntityRepository->findOneBy([
|
||||
"nameserver" => $nameserver,
|
||||
@@ -133,10 +136,8 @@ class TestController extends AbstractController
|
||||
->setStatus(array_map(fn($str): DomainStatus => DomainStatus::from($str), $rdapNameserver['status']))
|
||||
->setEntity($entity)
|
||||
->setRoles(array_map(fn($str): DomainRole => DomainRole::from($str), $rdapEntity['roles'])));
|
||||
|
||||
$this->em->persist($entity);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
$domain->addNameserver($nameserver);
|
||||
}
|
||||
|
||||
@@ -147,9 +148,17 @@ class TestController extends AbstractController
|
||||
return new Response(null, Response::HTTP_OK);
|
||||
}
|
||||
|
||||
private function getRdapServer(string $fqdn)
|
||||
private function getTld($domain): string
|
||||
{
|
||||
$lastDotPosition = strrpos($domain, '.');
|
||||
if ($lastDotPosition === false) {
|
||||
throw new Exception("Domain must contain at least one dot.");
|
||||
}
|
||||
return strtolower(substr($domain, $lastDotPosition + 1));
|
||||
}
|
||||
|
||||
private function getRdapServer(string $tld)
|
||||
{
|
||||
$tld = $this->getTld($fqdn);
|
||||
|
||||
$dnsRoot = json_decode(file_get_contents($this->getParameter('kernel.project_dir') . '/src/Config/dns.json'))->services;
|
||||
foreach ($dnsRoot as $dns) {
|
||||
@@ -158,23 +167,16 @@ class TestController extends AbstractController
|
||||
throw new Exception("This TLD ($tld) is not supported.");
|
||||
}
|
||||
|
||||
private function getTld($domain)
|
||||
{
|
||||
$lastDotPosition = strrpos($domain, '.');
|
||||
if ($lastDotPosition === false) {
|
||||
throw new Exception("Domain must contain at least one dot.");
|
||||
}
|
||||
return substr($domain, $lastDotPosition + 1);
|
||||
}
|
||||
|
||||
private function processEntity(array $rdapEntity): Entity
|
||||
private function processEntity(array $rdapEntity, string $tld): Entity
|
||||
{
|
||||
$entity = $this->entityRepository->findOneBy([
|
||||
"handle" => $rdapEntity['handle']
|
||||
"handle" => $rdapEntity['handle'],
|
||||
"tld" => $tld
|
||||
]);
|
||||
|
||||
if ($entity === null) $entity = new Entity();
|
||||
$entity
|
||||
->setTld($tld)
|
||||
->setHandle($rdapEntity['handle'])
|
||||
->setJCard($rdapEntity['vcardArray']);
|
||||
|
||||
@@ -183,8 +185,7 @@ class TestController extends AbstractController
|
||||
foreach ($rdapEntity['events'] as $rdapEntityEvent) {
|
||||
$event = $this->entityEventRepository->findOneBy([
|
||||
"action" => EventAction::from($rdapEntityEvent["eventAction"]),
|
||||
"date" => new DateTimeImmutable($rdapEntityEvent["eventDate"]),
|
||||
"entity" => $entity
|
||||
"date" => new DateTimeImmutable($rdapEntityEvent["eventDate"])
|
||||
]);
|
||||
|
||||
if ($event !== null) continue;
|
||||
|
||||
@@ -45,7 +45,7 @@ class Domain
|
||||
*/
|
||||
#[ORM\ManyToMany(targetEntity: Nameserver::class, inversedBy: 'domains', cascade: ['persist'])]
|
||||
#[ORM\JoinTable(name: 'domain_nameservers',
|
||||
joinColumns: [new ORM\JoinColumn(name: 'domain_handle', referencedColumnName: 'handle')],
|
||||
joinColumns: [new ORM\JoinColumn(name: 'domain_ldh_name', referencedColumnName: 'ldh_name')],
|
||||
inverseJoinColumns: [new ORM\JoinColumn(name: 'nameserver_ldh_name', referencedColumnName: 'ldh_name')]
|
||||
)]
|
||||
private Collection $nameservers;
|
||||
|
||||
@@ -17,7 +17,7 @@ class DomainEntity
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, cascade: ['persist'], inversedBy: 'domainEntities')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'id', nullable: false)]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
#[ORM\Column(type: Types::SIMPLE_ARRAY, enumType: DomainRole::class)]
|
||||
|
||||
@@ -10,10 +10,19 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
#[ORM\Entity(repositoryClass: EntityRepository::class)]
|
||||
class Entity
|
||||
{
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $handle = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $tld = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, DomainEntity>
|
||||
*/
|
||||
@@ -42,6 +51,11 @@ class Entity
|
||||
$this->events = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getHandle(): ?string
|
||||
{
|
||||
return $this->handle;
|
||||
@@ -54,6 +68,18 @@ class Entity
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTld(): ?string
|
||||
{
|
||||
return $this->tld;
|
||||
}
|
||||
|
||||
public function setTld(string $tld): static
|
||||
{
|
||||
$this->tld = $tld;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, DomainEntity>
|
||||
*/
|
||||
|
||||
@@ -10,10 +10,11 @@ class EntityEvent extends Event
|
||||
{
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, inversedBy: 'events')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'id', nullable: false)]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
|
||||
|
||||
public function getEntity(): ?Entity
|
||||
{
|
||||
return $this->entity;
|
||||
|
||||
@@ -15,9 +15,6 @@ class Nameserver
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $ldhName = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $handle = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, NameserverEntity>
|
||||
*/
|
||||
@@ -48,18 +45,6 @@ class Nameserver
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getHandle(): ?string
|
||||
{
|
||||
return $this->handle;
|
||||
}
|
||||
|
||||
public function setHandle(string $handle): static
|
||||
{
|
||||
$this->handle = $handle;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, NameserverEntity>
|
||||
*/
|
||||
|
||||
@@ -18,9 +18,10 @@ class NameserverEntity
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, cascade: ['persist'], inversedBy: 'nameserverEntities')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'id', nullable: false)]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
|
||||
#[ORM\Column(type: Types::SIMPLE_ARRAY, enumType: DomainRole::class)]
|
||||
private array $roles = [];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user