src/Controller/SecurityController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\AbstractInscriptionRepository;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  10. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  11. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  12. use App\Repository\CongresRepository;
  13. use Symfony\Component\HttpFoundation\Session\Session;
  14. class SecurityController extends AbstractController
  15. {
  16.     /**
  17.      * @Route("/login", name="app_login")
  18.      */
  19.     public function login(AuthenticationUtils $authenticationUtils): Response
  20.     {
  21.         // if ($this->getUser()) {
  22.         //     return $this->redirectToRoute('soumettre_abstract');
  23.         // }
  24.         // get the login error if there is one
  25.         $error = $authenticationUtils->getLastAuthenticationError();
  26.         // last username entered by the user
  27.         $lastUsername = $authenticationUtils->getLastUsername();
  28.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  29.     }
  30.     /**
  31.      * @Route("/login-abstract", name="app_login_abstract")
  32.      */
  33.     public function loginAbstract(AuthenticationUtils $authenticationUtils, CongresRepository $congresRepository, Request $request, AbstractInscriptionRepository $abstractInscriptionRepository,UserPasswordEncoderInterface $passwordEncoder): Response
  34.     {
  35.         
  36.         $error = $authenticationUtils->getLastAuthenticationError();
  37.         // last username entered by the user
  38.         $lastUsername = $authenticationUtils->getLastUsername();
  39.         if ($request->isMethod('post')) {
  40.             $email=$request->request->get('email');
  41.             $user=$abstractInscriptionRepository->findOneBy(['email'=>$email]);
  42.             if(empty($user)){
  43.                 if($request->getLocale()=='fr'){
  44.                     $this->addFlash('danger','Mot de passe ou bien email est incorrecte');
  45.                 }
  46.                 elseif($request->getLocale()=='en'){
  47.                     $this->addFlash('danger','Password or email is incorrect');
  48.                 }
  49.                 
  50.                 return $this->redirectToRoute('app_login_abstract');
  51.             }
  52.             $plainPassword= $request->request->get('password');
  53.             $isPasswordValid = password_verify($plainPassword,$user->getPassword());
  54.             if($isPasswordValid){
  55.                 $session = new Session();
  56.                 $session->set('user_abstract', $user->getId());
  57.                 return $this->redirectToRoute('congres_nationaux');
  58.             }
  59.             else{
  60.                 if($request->getLocale()=='fr'){
  61.                     $this->addFlash('danger','Mot de passe ou bien email est incorrecte');
  62.                 }
  63.                 elseif($request->getLocale()=='en'){
  64.                     $this->addFlash('danger','Password or email is incorrect');
  65.                 }
  66.                 
  67.                 return $this->redirectToRoute('app_login_abstract');
  68.             }
  69.         }
  70.         return $this->render('security/loginAbstract.html.twig', ['last_username' => $lastUsername, 'error' => $error,'congresses'=>$congresRepository->findAll()]);
  71.     }
  72.     /**
  73.      * @Route("/fr/login")
  74.      */
  75.     public function oldLinkLogin()
  76.     {
  77.         return $this->redirectToRoute('app_login');
  78.     }
  79.     /**
  80.      * @Route("/logout", name="app_logout")
  81.      */
  82.     public function logout(): void
  83.     {
  84.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  85.     }
  86.     /**
  87.      * @Route("/user/profil", name="app_profil")
  88.      */
  89.     public function profil()
  90.     {
  91.         return $this->render('security/profile.html.twig');
  92.     }
  93.     /**
  94.      * @Route("/user/change-password", name="app_reset_password")
  95.      */
  96.     public function resetPassword(Request $request, UserPasswordEncoderInterface $passwordEncoder)
  97.     {   
  98.             // Récupérer l'utilisateur actuellement connecté
  99.         $user = $this->getUser();
  100.         // Créer le formulaire de modification de mot de passe
  101.         $form = $this->createFormBuilder()
  102.             ->add('oldPassword', PasswordType::class, [
  103.                 'label' => 'security.oldpassword_label',
  104.             ])
  105.             ->add('newPassword', RepeatedType::class, [
  106.                 'type' => PasswordType::class,
  107.                 'invalid_message' => 'Les mots de passe doivent correspondre.',
  108.                 'required' => true,
  109.                 'first_options'  => ['label' => 'security.nwpassword_label'],
  110.                 'second_options' => ['label' => 'security.repeatpassword_label'],
  111.             ])
  112.             ->getForm();
  113.         $form->handleRequest($request);
  114.         if ($form->isSubmitted() && $form->isValid()) {
  115.             // Vérifier si l'ancien mot de passe est correct
  116.             $oldPassword = $form->get('oldPassword')->getData();
  117.             if (!$passwordEncoder->isPasswordValid($user, $oldPassword)) {
  118.                 $this->addFlash('danger', 'Le mot de passe actuel est incorrect.');
  119.                 return $this->redirectToRoute('app_reset_password');
  120.             }
  121.             // Mettre à jour le mot de passe de l'utilisateur
  122.             $newPassword = $form->get('newPassword')->getData();
  123.             $encodedPassword = $passwordEncoder->encodePassword($user, $newPassword);
  124.             $user->setPassword($encodedPassword);
  125.             $this->getDoctrine()->getManager()->flush();
  126.                 if($request->getLocale()=='fr'){
  127.                     $this->addFlash('success', 'Le mot de passe a été modifié avec succès.');
  128.                 }  
  129.                 elseif($request->getLocale()=='en') {
  130.                     $this->addFlash('success', 'The password has been changed successfully.');
  131.                 } 
  132.             
  133.             return $this->redirectToRoute('log');
  134.         }
  135.         return $this->render('security/resetPassword.html.twig', [
  136.             'form' => $form->createView(),
  137.         ]);
  138.     }
  139. }