src/Controller/SecurityController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Model\User;
  4. use App\Service\UserBackend;
  5. use App\Form\RegisterConfirmType;
  6. use App\Utils\SessionUtils;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  15. class SecurityController extends AbstractController
  16. {
  17.     use SessionUtils;
  18.     /**
  19.      * login
  20.      *
  21.      * @param Request $request
  22.      * @param AuthenticationUtils $authenticationUtils
  23.      * @return Response
  24.      *
  25.      * @Route("/login", name="login")
  26.      */
  27.     public function login(
  28.         Request $request,
  29.         AuthenticationUtils $authenticationUtils
  30.     ): Response {
  31.         $request->setLocale('en');
  32.         $content = [
  33.             'title' => "Connection",
  34.             'subTitle' => "Please connect to your account",
  35.             'email' => "Address E-mail",
  36.             'button' => "Connection",
  37.             'mdp' => 'Enter your password',
  38.             'forget' => 'Forgot password ?'
  39.         ];
  40.         // get the login error if there is one
  41.         $error $authenticationUtils->getLastAuthenticationError();
  42.         if ($error) {
  43.             $this->addFlash('errors''Problème d\'identifiant');
  44.         }
  45.         return $this->render('security/login.html.twig', [
  46.             'error' => $error,
  47.             'content' => $content
  48.         ]);
  49.     }
  50.     /**
  51.      * logout
  52.      *
  53.      * @return mixed
  54.      *
  55.      * @Route("/logout", name="logout")
  56.      */
  57.     public function logout()
  58.     {
  59.         $session $this->sessionByRequestStack();
  60.         $session->remove('apiJwtToken');
  61.         $session->clear();
  62.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  63.     }
  64.     /**
  65.      * register
  66.      *
  67.      * @return Response
  68.      *
  69.      * @Route("/register", name="register")
  70.      */
  71.     public function register(): Response
  72.     {
  73.         return $this->render('security/register.html.twig', []);
  74.     }
  75.     /**
  76.      * registerConfirmation
  77.      *
  78.      * @param $token
  79.      * @param Request $request
  80.      * @param UserBackend $userBackend
  81.      * @param UserPasswordHasherInterface $passwordHasher
  82.      * @return RedirectResponse|Response
  83.      * @throws TransportExceptionInterface
  84.      *
  85.      * @Route("/register/confirm/{token}", name="register_confirmation")
  86.      */
  87.     public function registerConfirmation(
  88.         $token,
  89.         Request $request,
  90.         UserBackend $userBackend,
  91.         UserPasswordHasherInterface $passwordHasher
  92.     ) {
  93.         $user = new User;
  94.         if(!empty($token) && !$this->isGranted('IS_AUTHENTICATED_FULLY')){
  95.             $user->setToken($token);
  96.             $user $userBackend->getUserByToken($token);
  97.         }
  98.         $form $this->createForm(RegisterConfirmType::class, $user, ['uemail' => $user->getUEmail()]);
  99.         $form->handleRequest($request);
  100.         if ($form->isSubmitted() && $form->isValid()) {
  101.             $user->setUPwd($passwordHasher->hashPassword($user$user ->getUPwd()));
  102.             $response $userBackend->activateAccount($user$token);
  103.             if ($response === Response::HTTP_OK) {
  104.                 $this->addFlash('success''Votre compte est validé, vous pouvez maintenant vous connecter à MainChain');
  105.                 return $this->redirectToRoute('dashboard');
  106.             }
  107.             if ($response === Response::HTTP_CONFLICT) {
  108.                 $this->addFlash('warning''Vous possédez déjà un compte validé. Vous pouvez vous connecter');
  109.                 return $this->redirectToRoute('dashboard');
  110.             } else {
  111.                 $this->addFlash('errors''Une erreur est survenue durant le processus, veuillez réessayer ultérieusement');
  112.             }
  113.         }
  114.         return $this->render('security/register_confirmation.html.twig', [
  115.             'confirmForm' => $form->createView(),
  116.             'action' => 'confirm'
  117.         ]);
  118.     }
  119.     /**
  120.      * Forget Password
  121.      *
  122.      * @param Request $request
  123.      * @param UserBackend $userBackend
  124.      * @return Response
  125.      * @throws TransportExceptionInterface
  126.      *
  127.      * @Route("/forgot_password", name="forgot_password")
  128.      */
  129.     public function forgetPassword (
  130.         Request $request,
  131.         UserBackend $userBackend
  132.     ): Response {
  133.         if($request->getMethod() == "POST") {
  134.             $email $request->request->get('u_email');
  135.         } else {
  136.             $email '';
  137.         }
  138.         $result '';
  139.         if (!empty($email)) {
  140.             $response $userBackend->getUserExistByEmail($email);
  141.             if($response === Response::HTTP_OK){
  142.                 $result 'success';
  143.             } elseif ($response === Response::HTTP_FORBIDDEN) {
  144.                 $this->addFlash('success'sprintf("<h3>E-mail envoyé</h3>Un e-mail a été envoyé à votre adresse %s . Suivez les instructions fournies pour réinitialiser votre mot de passe."'<b>' $email "</b>"));
  145.             } elseif ($response === Response::HTTP_NOT_FOUND){
  146.                 $this->addFlash('success'sprintf("<h3>E-mail envoyé</h3>Un e-mail a été envoyé à votre adresse %s . Suivez les instructions fournies pour réinitialiser votre mot de passe."'<b>' $email "</b>"));
  147.             } else {
  148.                 $this->addFlash('errors''Une erreur est survenue durant le processus, veuillez réessayer ultérieusement');
  149.             }
  150.         } else {
  151.             $response $userBackend->getUserExistByEmail($email);
  152.             if($response === Response::HTTP_OK){
  153.                 $result 'success';
  154.                 $this->addFlash('success'sprintf("<h3>E-mail envoyé</h3>Un e-mail a été envoyé à votre adresse %s . Suivez les instructions fournies pour réinitialiser votre mot de passe."'<b>' $email "</b>"));
  155.             }
  156.         }
  157.         return $this->render('security/forget_password.html.twig', [
  158.             'previous_email' =>  $email,
  159.             'result' => $result,
  160.         ]);
  161.     }
  162.     /**
  163.      * registerConfirmation
  164.      *
  165.      * @param $token
  166.      * @param Request $request
  167.      * @param UserBackend $userBackend
  168.      * @param UserPasswordHasherInterface $passwordHasher
  169.      * @return RedirectResponse|Response
  170.      * @throws TransportExceptionInterface|\MiladRahimi\Jwt\Exceptions\InvalidKeyException
  171.      *
  172.      * @Route("/reset_password/{token}", name="reset_password")
  173.      */
  174.     public function resetPassword(
  175.         $token,
  176.         Request $request,
  177.         UserBackend $userBackend,
  178.         UserPasswordHasherInterface $passwordHasher
  179.     ) {
  180.         $user = new User;
  181.         if (!empty($token) && !$this->isGranted('IS_AUTHENTICATED_FULLY')) {
  182.             $user->setToken($token);
  183.             $user $userBackend->getUserByToken($token);
  184.         }
  185.         $form $this->createForm(RegisterConfirmType::class, $user, ['uemail' => $user->getUEmail()]);
  186.         $form->handleRequest($request);
  187.         if ($form->isSubmitted() && $form->isValid()) {
  188.             $user->setUPwd($passwordHasher->hashPassword($user$user ->getUPwd()));
  189.             $response $userBackend->putUserResetPwd($user);
  190.             if ($response === Response::HTTP_OK) {
  191.                 $this->addFlash('success''Votre mot de passe a bien été mis à jour, vous pouvez-vous connecter');
  192.                 return $this->redirectToRoute('login');
  193.             }
  194.             if ($response === Response::HTTP_UNAUTHORIZED) {
  195.                 $this->addFlash('warning''Votre lien de réinitalisation est périmé, veuillez tenter de réinitialiser votre mot de passe à nouveau');
  196.                 return $this->redirectToRoute('forgot_password');
  197.             } else {
  198.                 $this->addFlash('errors''Une erreur est survenue durant le processus, veuillez réessayer ultérieusement');
  199.             }
  200.         }
  201.         return $this->render('security/register_confirmation.html.twig', [
  202.             'confirmForm' => $form->createView(),
  203.             'action' => 'reset'
  204.         ]);
  205.     }
  206. }