<?php
declare(strict_types=1);
namespace App\License\Controller\Api;
use App\License\DTO\LicenseCheckRequest;
use App\License\Service\LicenseChecker;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
final class LicenseCheckController extends AbstractController
{
/**
* @Route("/api/license/check", name="hephaestos_license_check", methods={"POST"})
*/
public function __invoke(Request $request, LicenseChecker $licenseChecker): JsonResponse
{
if ('prod' === $this->getParameter('kernel.environment') && !$request->isSecure()) {
return new JsonResponse(['valid' => false, 'reason' => 'https_required'], Response::HTTP_UPGRADE_REQUIRED);
}
$payload = $this->decodePayload($request);
if ([] === $payload) {
return new JsonResponse(['valid' => false, 'reason' => 'invalid_json'], Response::HTTP_BAD_REQUEST);
}
$response = $licenseChecker->check(LicenseCheckRequest::fromArray($payload));
return new JsonResponse($response->toArray());
}
/**
* @return array<string, mixed>
*/
private function decodePayload(Request $request): array
{
$content = trim((string) $request->getContent());
if ('' === $content) {
return $request->request->all();
}
$decoded = json_decode($content, true);
return \is_array($decoded) ? $decoded : [];
}
}