SubdomainAvailabilityProvider.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace App\State\Provider\Organization\Subdomain;
  3. use ApiPlatform\Metadata\GetCollection;
  4. use ApiPlatform\Metadata\Operation;
  5. use ApiPlatform\State\ProviderInterface;
  6. use App\ApiResources\Organization\Subdomain\SubdomainAvailability;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use App\Service\File\Exception\FileNotFoundException;
  9. use App\Service\Typo3\SubdomainService;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. /**
  12. * Custom provider permettant de tester la disponibilité d'un sous-domaine
  13. */
  14. final class SubdomainAvailabilityProvider implements ProviderInterface
  15. {
  16. public function __construct(
  17. private SubdomainService $subdomainService
  18. ) {}
  19. /**
  20. * @param Operation $operation
  21. * @param array<mixed> $uriVariables
  22. * @param array<mixed> $context
  23. * @return SubdomainAvailability | null
  24. * @throws FileNotFoundException
  25. */
  26. public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?SubdomainAvailability
  27. {
  28. if ($operation instanceof GetCollection) {
  29. throw new \RuntimeException('not supported', Response::HTTP_METHOD_NOT_ALLOWED);
  30. }
  31. $filters = $context['filters'] ?? [];
  32. $subdomain = $filters['subdomain'] ?? null;
  33. if ($subdomain === null) {
  34. throw new \RuntimeException('missing parameter: subdomain', Response::HTTP_BAD_REQUEST);
  35. }
  36. $available =
  37. !$this->subdomainService->isRegistered($subdomain) &&
  38. !$this->subdomainService->isReservedSubdomain($subdomain);
  39. $subdomainAvailability = new SubdomainAvailability();
  40. $subdomainAvailability->setSubdomain($subdomain);
  41. $subdomainAvailability->setAvailable($available);
  42. return $subdomainAvailability;
  43. }
  44. }