src/Controller/Commun/ConnexionController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Commun;
  3. use App\Entity\AssistantMaternel\AssistantMaternel;
  4. use App\Entity\Parametrage\EnumParametre;
  5. use App\Security\JwtTokenUtils;
  6. use App\Service\Parametrage\ParametrageService;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  14. class ConnexionController extends AbstractController
  15. {
  16.     private $parametrageService;
  17.     public function __construct(ParametrageService $parametrageService)
  18.     {
  19.         $this->parametrageService $parametrageService;
  20.     }
  21.     /**
  22.      * @Route("/connexion", name="connexion")
  23.      */
  24.     public function connexion(AuthenticationUtils $helper): Response {
  25.         if ($this->getUser()) 
  26.         {
  27.             return $this->redirectToRoute('index_back_office');
  28.         }
  29.         return $this->render('commun/connexion.html.twig', [
  30.                     // dernier username saisi (si il y en a un)
  31.                     'last_username' => $helper->getLastUsername(),
  32.                     // La derniere erreur de connexion (si il y en a une)
  33.                     'error' => $helper->getLastAuthenticationError(),
  34.         ]);
  35.     }
  36.     /**
  37.      * La route pour se deconnecter.
  38.      * 
  39.      * Mais celle ci ne doit jamais être executé car symfony l'interceptera avant.
  40.      *
  41.      * @Route("/deconnexion", name="deconnexion")
  42.      */
  43.     public function logout(): void {
  44.         throw new \Exception(
  45.                 'Le code de ce controller ne devrait jamais être atteint car'
  46.                 'le composant Security Symfony doit l\'intercepter');
  47.     }
  48.     /**
  49.      * Point d'entrée pour la connexion SSO de Solis vers le GDA
  50.      * 
  51.      * @Route("/sso", name="sso")
  52.      */
  53.     public function redirectionSso(Request $request)
  54.     {
  55.         // Retrouver l'id fonctionnel assmat passé dans le JWT
  56.         $jwtToken JwtTokenUtils::getTokenFromRequest($request);
  57.         $idFonctionnelAssmat JwtTokenUtils::getIdAssmatFromToken($jwtToken);
  58.         // Trouver l'assmat correspondant
  59.         $repo $this->getDoctrine()->getManager()->getRepository(AssistantMaternel::class);
  60.         $assmat $repo->findOneBy(['id_fonctionnel' => $idFonctionnelAssmat]);
  61.         // Renvoyer une 404 si pas d'assmat
  62.         if (!$assmat) {
  63.             throw new NotFoundHttpException("Le numéro de dossier $idFonctionnelAssmat est introuvable.");
  64.         }
  65.         // Rediriger vers la fiche de l'assmat
  66.         return new RedirectResponse($this->generateUrl('fiche_assmat', ['id' => $assmat->getId()]));
  67.     }
  68.     /**
  69.      * Point de sortie (?) pour la connexion SSO du GDA PHP vers l'admin assmat Legacy
  70.      * 
  71.      * @Route("/sso-offre-accueil", name="sso_legacy")
  72.      */
  73.     public function authentifierLegacy(ParametrageService $parametrageService)
  74.     {
  75.         // Gestion des erreurs
  76.         $user $this->getUser();
  77.         if (!$user->estAssistantMaternel() || !$user->getAssistantMaternel()) {
  78.             throw $this->createAccessDeniedException("Cette fonctionnalité est uniquement disponible pour les assistants maternels");
  79.         }
  80.         // Récupération de la configuration
  81.         // FIXME à variabiliser (params BDD ou config .yml ?)
  82.         $secret "LeBonRoiDagobertAMisSaCulotteAL'Envers";
  83.         $algo 'HS256';
  84.         $urlRedirection $parametrageService->getParametre(EnumParametre::URL_ADMIN_AM_LEGACY)->getValeur();
  85.         if (!$urlRedirection){
  86.             throw new \Exception("URL Admin assmat non configurée");
  87.         }
  88.         // Création du jeton d'authentification JWT
  89.         $jwt JwtTokenUtils::createTokenForAssmat($user->getAssistantMaternel(), $algo$secret);
  90.         // Redirection vers le site Legacy avec le jeton d'authentification
  91.         return $this->redirect("$urlRedirection?jwt=$jwt");
  92.     }
  93. }