<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\PcConvocatoriasRepository;
use App\Entity\PcConvocatorias;
use App\Entity\PcCriterios;
use App\Repository\PcCriteriosRepository;
use App\Entity\PcCriteriosConvocatorias;
use App\Repository\PcCriteriosConvocatoriasRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use App\Service\AuthClaveUnicaService;
use App\Entity\CuToken;
use App\Repository\CuTokenRepository;
/**
* @Route("/api/cu", name="api_cu_")
*/
class ApiCuController extends AbstractController
{
#[Route('/login', name: 'login', methods: ['GET'])]
public function login(AuthClaveUnicaService $authClaveUnicaService): JsonResponse
{
return new JsonResponse(['claveUnicaUrlToLogin'=>$authClaveUnicaService->getUrlToLoginCu()]);
}
#[Route('/logout', name: 'logout', methods: ['GET'])]
public function logout(AuthClaveUnicaService $authClaveUnicaService): JsonResponse
{
// La autenticación será manejada automáticamente por el firewall
return new JsonResponse(['claveUnicaUrlToLogout'=>$authClaveUnicaService->getUrlToLogout()]);
}
#[Route('/callback', name: 'callback', methods: ['POST'])]
public function callbackState(
Request $request,
CuTokenRepository $cuTokenRepository
): JsonResponse
{
try {
$data = json_decode($request->getContent(), true);
$cuToken = $cuTokenRepository->findOneByState($data['state']);
if (!$cuToken) {
return new JsonResponse(['error' => 'Estado no encontrado'], JsonResponse::HTTP_NOT_FOUND);
}
$token = $cuToken->getToken();
$cuTokenRepository->remove($cuToken, true);
return new JsonResponse(['token'=>$token]);
} catch (\Exception $e) {
return new JsonResponse(['error' => 'Error de servidor', 'detalle' => $e->getMessage()], 500);
}
}
}