mirror of
https://github.com/maelgangloff/domain-watchdog.git
synced 2025-12-17 17:55:42 +00:00
feat: also lock domain update if from user
This commit is contained in:
parent
16a6ea46c1
commit
eb8fcac2b1
@ -63,6 +63,13 @@ export default defineConfig({
|
|||||||
content: 'Domain Watchdog, RDAP, WHOIS, domain monitoring, domain history, domain expiration, domain tracker'
|
content: 'Domain Watchdog, RDAP, WHOIS, domain monitoring, domain history, domain expiration, domain tracker'
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
tag: 'meta',
|
||||||
|
attrs: {
|
||||||
|
name: 'author',
|
||||||
|
content: 'Maël Gangloff'
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
tag: 'meta',
|
tag: 'meta',
|
||||||
attrs: {name: 'twitter:card', content: 'summary'},
|
attrs: {name: 'twitter:card', content: 'summary'},
|
||||||
|
|||||||
@ -68,7 +68,7 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
parameters: [
|
parameters: [
|
||||||
'forced' => new QueryParameter(schema: ['type' => 'boolean'], description: 'Force an RDAP request', required: false),
|
'forced' => new QueryParameter(schema: ['type' => 'boolean'], description: 'Force an RDAP request. If an update is already in progress, this parameter is ignored and the stored domain is returned.', required: false),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -22,6 +22,9 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
|||||||
use Symfony\Component\HttpFoundation\RequestStack;
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
|
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
|
use Symfony\Component\Lock\Key;
|
||||||
|
use Symfony\Component\Lock\LockFactory;
|
||||||
|
use Symfony\Component\Lock\SharedLockInterface;
|
||||||
use Symfony\Component\Messenger\Exception\ExceptionInterface;
|
use Symfony\Component\Messenger\Exception\ExceptionInterface;
|
||||||
use Symfony\Component\Messenger\MessageBusInterface;
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
use Symfony\Component\RateLimiter\RateLimiterFactory;
|
use Symfony\Component\RateLimiter\RateLimiterFactory;
|
||||||
@ -44,6 +47,7 @@ readonly class AutoRegisterDomainProvider implements ProviderInterface
|
|||||||
private MessageBusInterface $bus,
|
private MessageBusInterface $bus,
|
||||||
private RequestStack $requestStack,
|
private RequestStack $requestStack,
|
||||||
private EntityManagerInterface $em,
|
private EntityManagerInterface $em,
|
||||||
|
private LockFactory $lockFactory,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +104,16 @@ readonly class AutoRegisterDomainProvider implements ProviderInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$lock = $this->createDomainLock($idnDomain);
|
||||||
|
|
||||||
|
if (!$lock->acquire() && null !== $domain) {
|
||||||
|
$this->logger->notice('Update of this domain name is locked because it is already in progress', [
|
||||||
|
'ldhName' => $idnDomain,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $domain;
|
||||||
|
}
|
||||||
|
|
||||||
$updatedAt = null === $domain ? new \DateTimeImmutable('now') : $domain->getUpdatedAt();
|
$updatedAt = null === $domain ? new \DateTimeImmutable('now') : $domain->getUpdatedAt();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -124,6 +138,8 @@ readonly class AutoRegisterDomainProvider implements ProviderInterface
|
|||||||
$this->em->flush();
|
$this->em->flush();
|
||||||
|
|
||||||
return $domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
|
return $domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
|
||||||
|
} finally {
|
||||||
|
$lock->release();
|
||||||
}
|
}
|
||||||
|
|
||||||
$randomizer = new Randomizer();
|
$randomizer = new Randomizer();
|
||||||
@ -136,4 +152,13 @@ readonly class AutoRegisterDomainProvider implements ProviderInterface
|
|||||||
|
|
||||||
return $domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
|
return $domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createDomainLock(string $ldhName): SharedLockInterface
|
||||||
|
{
|
||||||
|
return $this->lockFactory->createLockFromKey(
|
||||||
|
new Key('domain_update.'.$ldhName),
|
||||||
|
ttl: 600,
|
||||||
|
autoRelease: false
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user