src/Controller/SecurityController.php line 48

Open in your IDE?
  1. <?php
  2.     namespace App\Controller;
  3.     use App\Entity\User;
  4.     use App\Factory\Security\SecurityFormFactory;
  5.     use App\Form\Type\LoginType;
  6.     use App\Services\DTV\YamlConfig\YamlReader;
  7.     use Exception;
  8.     use LogicException;
  9.     use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10.     use Symfony\Component\HttpFoundation\Request;
  11.     use Symfony\Component\HttpFoundation\Response;
  12.     use Symfony\Component\Routing\Annotation\Route;
  13.     use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  14.     use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  15.     /**
  16.      * Controller qui gère la sécurité
  17.      */
  18.     class SecurityController extends AbstractController
  19.     {
  20.         private YamlReader          $yamlReader;
  21.         private SecurityFormFactory $formFactory;
  22.         public function __construct(
  23.             YamlReader $yamlReader,
  24.             SecurityFormFactory $formFactory
  25.         ) {
  26.             $this->yamlReader  $yamlReader;
  27.             $this->formFactory $formFactory;
  28.         }
  29.         /**
  30.          * Formulaire de connexion
  31.          *
  32.          * @Route("/login", name="app_login")
  33.          *
  34.          * @param   AuthenticationUtils  $authenticationUtils
  35.          * @param   Request              $request
  36.          *
  37.          * @return Response
  38.          */
  39.         public function login(AuthenticationUtils $authenticationUtilsRequest $request): Response
  40.         {
  41.             // Redirige sur la home-page si le user est connecté
  42.             if ($this->getUser()) {
  43.                 return $this->redirectToRoute('front_homepage');
  44.             }
  45.             $user = new User();
  46.             $config      $this->yamlReader->getFrontSecurity();
  47.             $configLogin $config'login' ];
  48.             $globalRegister        $this->yamlReader->getRegister();
  49.             $globalRegisterEnabled $globalRegister'enabled' ];
  50.             $configRegister $configLogin'sections' ][ 'section_register' ] ?? FALSE;
  51.             $hasFormRegister FALSE;
  52.             $formRegister    FALSE;
  53.             if ($globalRegisterEnabled && is_array($configRegister) && $configRegister'enabled' ]) {
  54.                 // Création du formulaire d'inscription
  55.                 try {
  56.                     $formRegister    $this->formFactory->generateRegisterForm($user);
  57.                     $hasFormRegister TRUE;
  58.                 } catch (Exception $e) {
  59.                     throw $this->createNotFoundException($e->getMessage());
  60.                 }
  61.                 $formRegister->handleRequest($request);
  62.                 if ($formRegister->isSubmitted()) {
  63.                     // validation spécifique du formulaire d'inscription
  64.                     try {
  65.                         $formRegister $this->formFactory->postValidateRegisterForm($formRegister);
  66.                     } catch (Exception $e) {
  67.                         $this->addFlash('danger''Impossible d\'exécuter la post validation du formulaire');
  68.                         $referer $request->headers->get('referer');
  69.                         return $this->redirect($referer);
  70.                     }
  71.                     if ($formRegister->isValid()) {
  72.                         // Post traitement du formulaire d'inscription
  73.                         try {
  74.                             $response $this->formFactory->postProcessingRegisterForm($formRegister$user);
  75.                         } catch (Exception $e) {
  76.                             $this->addFlash('danger''Impossible d\'exécuter le post traitement du formulaire: '.$e->getMessage());
  77.                             $referer $request->headers->get('referer');
  78.                             return $this->redirect($referer);
  79.                         } catch (TransportExceptionInterface $e) {
  80.                             $this->addFlash('danger''Impossible d\'exécuter le post traitement du formulaire: '.$e->getMessage());
  81.                             $referer $request->headers->get('referer');
  82.                             return $this->redirect($referer);
  83.                         }
  84.                         if ($response'message' ] !== NULL) {
  85.                             $this->addFlash('success'$response'message' ]);
  86.                         }
  87.                         return $this->redirectToRoute($response'route' ]);
  88.                     }
  89.                 }
  90.             }
  91.             $formLogin $this->createForm(LoginType::class);
  92.             // get the login error if there is one
  93.             $error $authenticationUtils->getLastAuthenticationError();
  94.             // last username entered by the user
  95.             $lastUsername $authenticationUtils->getLastUsername();
  96.             $twigPath 'security/login.html.twig';
  97.             if ($this->yamlReader->getType() === 'dtv') {
  98.                 $twigPath 'security/DeveloppetesventesCom/login.html.twig';
  99.             }
  100.             if (isset($configLogin'folder' ])
  101.                 && !in_array($configLogin'folder' ], [FALSE''NULL], TRUE)
  102.             ) {
  103.                 $twigPath 'security/'.$configLogin'folder' ].'/login.html.twig';
  104.             }
  105.             return $this->render($twigPath, [
  106.                 'last_username'    => $lastUsername,
  107.                 'error'            => $error,
  108.                 'loginForm'        => $formLogin->createView(),
  109.                 'registrationForm' => $hasFormRegister $formRegister->createView() : FALSE,
  110.             ]);
  111.         }
  112.         /**
  113.          * Déconnexion
  114.          *
  115.          * @Route("/logout", name="app_logout")
  116.          *
  117.          * @return void
  118.          */
  119.         public function logout(): void
  120.         {
  121.             throw new LogicException(
  122.                 'This method can be blank - it will be intercepted by the logout key on your firewall.'
  123.             );
  124.         }
  125.     }