src/License/Controller/Api/LicenseCheckController.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\License\Controller\Api;
  4. use App\License\DTO\LicenseCheckRequest;
  5. use App\License\Service\LicenseChecker;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. final class LicenseCheckController extends AbstractController
  12. {
  13. /**
  14. * @Route("/api/license/check", name="hephaestos_license_check", methods={"POST"})
  15. */
  16. public function __invoke(Request $request, LicenseChecker $licenseChecker): JsonResponse
  17. {
  18. if ('prod' === $this->getParameter('kernel.environment') && !$request->isSecure()) {
  19. return new JsonResponse(['valid' => false, 'reason' => 'https_required'], Response::HTTP_UPGRADE_REQUIRED);
  20. }
  21. $payload = $this->decodePayload($request);
  22. if ([] === $payload) {
  23. return new JsonResponse(['valid' => false, 'reason' => 'invalid_json'], Response::HTTP_BAD_REQUEST);
  24. }
  25. $response = $licenseChecker->check(LicenseCheckRequest::fromArray($payload));
  26. return new JsonResponse($response->toArray());
  27. }
  28. /**
  29. * @return array<string, mixed>
  30. */
  31. private function decodePayload(Request $request): array
  32. {
  33. $content = trim((string) $request->getContent());
  34. if ('' === $content) {
  35. return $request->request->all();
  36. }
  37. $decoded = json_decode($content, true);
  38. return \is_array($decoded) ? $decoded : [];
  39. }
  40. }