src/Controller/SecurityController.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Classe\MailBrevo;
  4. use App\Entity\PasswordUpdate;
  5. use App\Entity\User;
  6. use App\Form\AccountType;
  7. use App\Form\EmailResetType;
  8. use App\Form\PasswordResetType;
  9. use App\Form\PasswordUpdateType;
  10. use App\Form\RegistrationType;
  11. use App\Repository\UserRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  18. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  19. use Symfony\Component\HttpFoundation\Response;
  20. class SecurityController extends AbstractController
  21. {
  22.     private $entityManager;
  23.     public function __construct(EntityManagerInterface $entityManager)
  24.     {
  25.         $this->entityManager $entityManager;
  26.     }
  27.     /**
  28.      * @Route("/inscription", name="security_registration")
  29.      */
  30.     public function registration(Request $requestUserPasswordHasherInterface $encoder)
  31.     {
  32.         $user = new User();
  33.         $form $this->createForm(RegistrationType::class, $user);
  34.         $form->handleRequest($request);
  35.         if($form->isSubmitted() && $form->isValid()){
  36.             $hash $encoder->hashPassword($user$user->getPassword());
  37.             $user->setPassword($hash);
  38.             $user->setCreatedAt(new \DateTime());
  39.             $this->entityManager->persist($user);
  40.             $this->entityManager->flush();
  41.             $this->addFlash('souscription''');
  42.             return $this->redirectToRoute('security_login');
  43.         }
  44.         return $this->render('security/registration.html.twig', [
  45.             'form' => $form->createView(),
  46.         ]);
  47.     }
  48.     /**
  49.      * @Route("/", name="security_login")
  50.      */
  51.     public function login(AuthenticationUtils $utils)
  52.     {
  53.         $error $utils->getLastAuthenticationError();
  54.         $username $utils->getLastUsername();
  55.         return $this->render('security/login.html.twig', [
  56.             'hasError' => $error !== null,
  57.             'username' => $username,
  58.         ]);
  59.     }
  60.     /**
  61.      * @Route("/deconnexion ", name="security_logout")
  62.      */
  63.     public function logout()
  64.     {
  65.     }
  66.     /**
  67.      * Permet de modifier le mail utilisateur
  68.      * @Route("/account/profile ", name="account_profile")
  69.      */
  70.     public function profile(Request $request)
  71.     {
  72.         $user $this->getUser();
  73.         $form $this->createForm(AccountType::class, $user);
  74.         $form->handleRequest($request);
  75.         if($form->isSubmitted() && $form->isValid()){
  76.             $this->entityManager->persist($user);
  77.             $this->entityManager->flush();
  78.             $this->addFlash('modif-mail'"");
  79.             return $this->redirectToRoute('dashboard_user');
  80.         }
  81.         return $this->render('recensement/profile.html.twig', [
  82.             'form' => $form->createView()
  83.         ]);
  84.     }
  85.     /**
  86.      * Permet de modifier le mot de passe utilisateur
  87.      * @Route("/account/password-update", name="account_update_password")
  88.      */
  89.     public function updatePassword(Request $requestUserPasswordEncoderInterface $encoder)
  90.     {
  91.         $passwordUpdate = new PasswordUpdate();
  92.         $user $this->getUser();
  93.         $form $this->createForm(PasswordUpdateType::class, $passwordUpdate);
  94.         $form->handleRequest($request);
  95.         if($form->isSubmitted() && $form->isValid()){
  96.             //1. Vérifier que le oldPAssword du formulaire soit le même que le password de l’
  97.             if(!password_verify($passwordUpdate->getOldPassword(), $user->getPassword())){
  98.                 // Gérer l'erreur
  99.             }else{
  100.                 // Sauvegarder le nouveau mot de passe
  101.                 $newPassword $passwordUpdate->getNewPassword();
  102.                 $password $encoder->encodePassword($user$newPassword);
  103.                 $user->setPassword($password);
  104.                 $this->entityManager->persist($user);
  105.                 $this->entityManager->flush();
  106.                 $this->addFlash('modif-password'"");
  107.             }
  108.             return $this->redirectToRoute('dashboard_user');
  109.         }
  110.         return $this->render('recensement/password.html.twig', [
  111.             'form' => $form->createView()
  112.         ]);
  113.     }
  114.     /**
  115.      * Permet d’envoyer un mail avec un token à un utilisateur qui a oublié son mot de passe
  116.      * @Route("/account/password-forget", name="account_forget_password")
  117.      */
  118.     public function forgetPassword(UserRepository $repoUserRequest $request)
  119.     {
  120.         $form $this->createForm(EmailResetType::class);
  121.         $form->handleRequest($request);
  122.         if ($form->isSubmitted() && $form->isValid()) {
  123.             $user $repoUser->findOneByEmail($form->getData()['email']);
  124.             if ($user !== null) {
  125.                 $token md5(uniqid());
  126.                 $user->setResetPassword($token)
  127.                     ->setResetPasswordDate(new \DateTime());
  128.                 $this->entityManager->persist($user);
  129.                 $this->entityManager->flush();
  130.                 $mail $user->getEmail();
  131.                 $envoi_mail = new MailBrevo();
  132.                 $content "
  133. <h3>Réinitialisation du mot de passe !</h3>
  134. <p>Bonjour,</p>
  135. <p>Vous avez oublié votre mot de passe pour vous connecter à la base de recensement des professionnels de l'image en Normandie.</p>
  136. <p>
  137.     Le lien suivant vous permettra de générer un nouveau mot de passe :
  138.     <a href='https://annuaire-pro.normandieimages.net/account/password-reset/$token'>générer un nouveau mot de passe</a>
  139. </p>
  140. <p><strong>Attention celui-ci n’est actif que durant 10mn !</strong></p>
  141. <p>
  142.     Cordialement,<br>
  143.     <img src='https://www.inscriptionsfondsaide.normandieimages.fr/img/ni-logo-72.jpg' alt='Normandie Images' width='35'><br>
  144.     ATRIUM - 115 boulevard de l'Europe<br>
  145.     76100 ROUEN<br>
  146.     <a href='https://www.normandieimages.fr'>www.normandieimages.fr</a>
  147. </p>
  148. <p></p>";
  149.                 $envoi_mail->send("stephanehortet@normandieimages.fr""Normandie Images - Stéphane Hortet"$mail$mail"Réinitialisation du mot de passe - recensement des professionnels de l'image en Normandie"$content);
  150.                 return $this->render('security/reset-password-confirmation.html.twig');
  151.             }else{
  152.                 $this->addFlash('erreur-mail'"");
  153.             }
  154.         }
  155.         return $this->render('security/reset-password.html.twig', array(
  156.             'form' => $form->createView(),
  157.         ));
  158.     }
  159.     /**
  160.      * Permet de se connecter via un lien avec token reçu par mail
  161.      * @Route("/account/password-reset/{token}", name="account_reset_password")
  162.      */
  163.     public function resetPasswordToken($tokenUserRepository $repoUserRequest $requestUserPasswordEncoderInterface $encoder)
  164.     {
  165.         if ($token !== null) {
  166.             $user $repoUser->findOneByResetPassword($token);
  167.             $token_date $user->getResetPasswordDate();
  168.             $date_now = new \DateTime();
  169.             $interval $token_date->diff($date_now);
  170.             if ($user !== null && $interval-><= 10) {
  171.                 $form $this->createForm(PasswordResetType::class, $user);
  172.                 $form->handleRequest($request);
  173.                 if ($form->isSubmitted() && $form->isValid()) {
  174.                     $hash $encoder->encodePassword($user$user->getPassword());
  175.                     $user->setPassword($hash);
  176.                     $this->entityManager->persist($user);
  177.                     $this->entityManager->flush();
  178.                     $this->addFlash('reinitialisation''');
  179.                     return $this->redirectToRoute('security_login');
  180.                 }
  181.                 return $this->render('security/reset-password-token.html.twig', array(
  182.                     'form' => $form->createView(),
  183.                 ));
  184.             }else{
  185.                 return $this->render('security/reset-password-token-expired.html.twig');
  186.             }
  187.         }
  188.     }
  189.     /**
  190.      * @Route("/mentions_legales", name="mentions_legales")
  191.      */
  192.     public function mentions()
  193.     {
  194.         return $this->render('security/mentions_legales.html.twig');
  195.     }
  196. }