src/Controller/AuthCuController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\Routing\Generator\UrlGenerator;
  11. use App\Entity\CuToken;
  12. use App\Repository\CuTokenRepository;
  13. use Symfony\Component\HttpClient\HttpClient;
  14. use App\Service\AuthClaveUnicaService;
  15. /**
  16.  * @Route("/auth/cu", name="auth_cu_")
  17.  */
  18. class AuthCuController extends AbstractController
  19. {
  20.     #[Route('/login'name'login')]
  21.     public function login(
  22.         Request $request,
  23.         AuthClaveUnicaService $authClaveUnicaService
  24.         ): Response
  25.     {
  26.         return $this->render('cu/login.html.twig', [
  27.             'claveUnicaUrlToLogin'=>$authClaveUnicaService->getUrlToLogin(),
  28.         ]);
  29.     }
  30.     #[Route('/callback'name'callback')]
  31.     public function callback(
  32.         Request $request,
  33.         AuthClaveUnicaService $authClaveUnicaService,
  34.         JWTTokenManagerInterface $jwtManager,
  35.         CuTokenRepository $cuTokenRepository
  36.         ): Response
  37.     {
  38.         $userCuCode=$_GET['code'];
  39.         $userCuState=$_GET['state'];
  40.         if ($authClaveUnicaService->getTokenConexionCU($_GET['code'],$_GET['state'])){
  41.             if ($authClaveUnicaService->loadUserLoging()){
  42.                 $authClaveUnicaService->setUserLoginCUToSession($request,$this->generateUrl('logout',[], UrlGenerator::ABSOLUTE_URL));
  43.                 $rutUserActual =  $authClaveUnicaService->getUserLoginCUToSession($request)->rolNumero;
  44.                 $dvUserActual =  $authClaveUnicaService->getUserLoginCUToSession($request)->rolDv;
  45.                 if(str_starts_with($userCuState'pu-')){
  46.                     try {
  47.                         $payload = [
  48.                         'rut' => $rutUserActual,
  49.                         'dv' => $dvUserActual,
  50.                         ];
  51.                         // Necesitamos un objeto UserInterface válido para crear el token
  52.                         $fakeUser = new class($rutUserActual$dvUserActual) implements \Symfony\Component\Security\Core\User\UserInterface {
  53.                             private string $rutUserActual;
  54.                             private string $dvUserActual;
  55.                             public function __construct(string $rutUserActualstring $dvUserActual)
  56.                             {
  57.                                 $this->rutUserActual $rutUserActual;
  58.                                 $this->dvUserActual $dvUserActual;
  59.                             }
  60.                             public function getRoles(): array { return ['ROLE_USER']; }
  61.                             public function getPassword(): ?string { return null; }
  62.                             public function getSalt(): ?string { return null; }
  63.                             public function getUsername(): string { return $this->rutUserActual '-' $this->dvUserActual; }
  64.                             public function getRut(): string { return $this->rutUserActual; }
  65.                             public function getDv(): string { return $this->dvUserActual; }
  66.                             public function getUserIdentifier(): string { return $this->rutUserActual '-' $this->dvUserActual; }
  67.                             public function eraseCredentials(): void {}
  68.                         };
  69.                         $token $jwtManager->createFromPayload($fakeUser$payload);
  70.                         $cuToken = new CuToken();
  71.                         $cuToken->setState($userCuState);
  72.                         $cuToken->setToken($token);
  73.                         $cuTokenRepository->save($cuToken,true);
  74.                         $html = <<<HTML
  75.                             <!DOCTYPE html>
  76.                             <html lang="en">
  77.                             <head>
  78.                                 <meta charset="UTF-8">
  79.                                 <meta name="viewport" content="width=device-width, initial-scale=1.0">
  80.                                 <title>Cerrar Ventana</title>
  81.                                 <script>
  82.                                     window.onload = function() {
  83.                                         window.close();
  84.                                     };
  85.                                 </script>
  86.                             </head>
  87.                             <body>
  88.                                 <p>La ventana se cerrará automáticamente.</p>
  89.                             </body>
  90.                             </html>
  91.                         HTML;
  92.                         return new Response($html);
  93.                     } catch (\Exception $e) {
  94.                         return new JsonResponse(['error' => 'Error de servidor''detalle' => $e->getMessage()], 500);
  95.                     }
  96.                     //return new JsonResponse(['message' => 'Credenciales correctas', 'token' => $token, 'userData' => $payload, 'state' => $userCuState]);
  97.                 }
  98.                 print_r$authClaveUnicaService->getUserLoginCUToSession($request));
  99.                 return $this->redirect($this->generateUrl('organizacion_home'));
  100.             }
  101.         }
  102.         if(str_starts_with($userCuState'pu-')){
  103.             return new JsonResponse(['message' => 'Por favor, envía credenciales válidas']);
  104.         }
  105.         return $this->redirect($this->generateUrl('auth_cu_login'));
  106.     }
  107.     #[Route('/logout'name'logout')]
  108.     public function logout(
  109.         Request $request,
  110.         AuthClaveUnicaService $authClaveUnicaService
  111.         ): Response
  112.     {
  113.         //Eliminar Session
  114.         $authClaveUnicaService->limpiarSession($request);
  115.         $this->addFlash('success''Sesión Cerrada Exitosamente!');
  116.         return $this->redirect($this->generateUrl('auth_cu_login'));
  117.     }
  118. }