src/Controller/SecurityController.php line 21

Open in your IDE?
  1. <?php
  2. namespace Acme\SudcmsBundle\Controller;
  3. use Acme\SudcmsBundle\Entity\AuthUser;
  4. use Acme\SudcmsBundle\Form\ResetPassType;
  5. use Acme\SudcmsBundle\Repository\AuthUserRepository;
  6. use Acme\SudcmsBundle\Repository\SiteReferencementRepository;
  7. use Acme\SudcmsBundle\Service\MailerService;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  15. class SecurityController extends AbstractController {
  16.     #[Route(path: ['/admin''/administration'], name'admin_app_login')]
  17.     public function login(AuthenticationUtils $authenticationUtilsRequest $request): Response {
  18.         $host $this->getParameter('SITE1_HOST');
  19.         if (substr($_SERVER['HTTP_HOST'], 03) != '127' && $request->getHost() != $host) {
  20.             return $this->redirect('https://'.$host.'/admin');
  21.         }
  22.         if ($this->getUser()) {
  23.             return $this->redirectToRoute('admin_pages');
  24.         }
  25.         // get the login error if there is one
  26.         $error $authenticationUtils->getLastAuthenticationError();
  27.         // last username entered by the user
  28.         $lastUsername $authenticationUtils->getLastUsername();
  29.         return $this->render('@AcmeSudcms/security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  30.     }
  31.     #[Route(path'/admin/logout'name'admin_app_logout')]
  32.     public function logout() {
  33.         if (isset($_SESSION["CkIsAuthorized"]))
  34.             unset($_SESSION["CkIsAuthorized"]);
  35.         if (isset($_SESSION["admin_site_uid"]))
  36.             unset($_SESSION["admin_site_uid"]);
  37.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  38.     }
  39.     #[Route(path'/mot-de-passe-oublie-admin'name'admin_forgotten_password')]
  40.     public function forgotten_password(Request $requestAuthUserRepository $usersMailerService $mailerServiceSiteReferencementRepository $repoRef): Response {
  41.         // On initialise le formulaire
  42.         $form $this->createForm(ResetPassType::class);
  43.         // On traite le formulaire
  44.         $form->handleRequest($request);
  45.         // Si le formulaire est valide
  46.         if ($form->isSubmitted() && $form->isValid()) {
  47.             // On récupère les données
  48.             $donnees $form->getData();
  49.             // On cherche un utilisateur ayant cet e-mail
  50.             $user $users->findOneByEmail($donnees['email']);
  51.             // Si l'utilisateur n'existe pas
  52.             if ($user === null) {
  53.                 // On envoie une alerte disant que l'adresse e-mail est inconnue
  54.                 $this->addFlash('danger''Cette adresse e-mail est inconnue');
  55.                 // On retourne sur la page de connexion
  56.                 return $this->redirectToRoute('admin_app_login');
  57.             }
  58.             // On génère un token
  59.             $token bin2hex(random_bytes(60));
  60.             // On essaie d'écrire le token en base de données
  61.             try {
  62.                 $user->setResetToken($token);
  63.                 $entityManager $this->getDoctrine()->getManager();
  64.                 $entityManager->persist($user);
  65.                 $entityManager->flush();
  66.             } catch (\Exception $e) {
  67.                 $this->addFlash('danger'$e->getMessage());
  68.                 return $this->redirectToRoute('admin_app_login');
  69.             }
  70.             // On génère l'URL de réinitialisation de mot de passe
  71.             $url $this->generateUrl('admin_app_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
  72.             // On récupère le nom du site pour l'ajouter en sujet
  73.             $nameSite $repoRef->findBy(['id' => '1']);
  74.             $nameSite $nameSite[0]->getAccRefNamesite();
  75.             if ($nameSite != "" || $nameSite != null) {
  76.                 $subject "Mot de passe oublié administration -  $nameSite ";
  77.             } else {
  78.                 $subject "Mot de passe oublié administration -  Sud-Cms ";
  79.             }
  80.             $mailerService->fromName "Sud CMS";
  81.             $mailerService->subject $subject;
  82.             $allRecipients[] = [
  83.                 "nom" => $user->getLastName(),
  84.                 "prenom" => $user->getFirstName(),
  85.                 "email" => $user->getEmail(),
  86.                 "type" => "to"
  87.             ];
  88.             $htmlContent $this->renderView("layouts/layouts_emails/forgotten_password.html.twig", [
  89.                 'url' => $url
  90.             ]);
  91.             $mailerService->sendMail($allRecipients$htmlContent);
  92.             // On crée le message flash de confirmation
  93.             $this->addFlash('success''Un e-mail pour réinitialisater votre mot de passe vous a été envoyé !');
  94.             // On redirige vers la page de login
  95.             return $this->redirectToRoute('admin_app_login');
  96.         }
  97.         // On envoie le formulaire à la vue
  98.         return $this->render('security/forgotten_password.html.twig', ['emailForm' => $form->createView()]);
  99.     }
  100.     #[Route(path'/nouveau-mot-de-passe/{token}'name'admin_app_reset_password')]
  101.     public function resetPassword(Request $requeststring $tokenUserPasswordEncoderInterface $passwordEncoder) {
  102.         // On cherche un utilisateur avec le token donné
  103.         $user $this->getDoctrine()->getRepository(AuthUser::class)->findOneBy(['reset_token' => $token]);
  104.         // Si l'utilisateur n'existe pas
  105.         if ($user === null) {
  106.             // On affiche une erreur
  107.             $this->addFlash('danger''Token Inconnu');
  108.             return $this->redirectToRoute('admin_app_login');
  109.         }
  110.         // Si le formulaire est envoyé en méthode post
  111.         if ($request->isMethod('POST')) {
  112.             // On supprime le token
  113.             $user->setResetToken(null);
  114.             // On chiffre le mot de passe
  115.             $user->setPassword($passwordEncoder->encodePassword($user$request->request->get('password')));
  116.             // On stocke
  117.             $entityManager $this->getDoctrine()->getManager();
  118.             $entityManager->persist($user);
  119.             $entityManager->flush();
  120.             // On crée le message flash
  121.             $this->addFlash('message''Mot de passe mis à jour');
  122.             // On redirige vers la page de connexion
  123.             return $this->redirectToRoute('admin_app_login');
  124.         } else {
  125.             // Si on n'a pas reçu les données, on affiche le formulaire
  126.             return $this->render('security/reset_password.html.twig', ['token' => $token]);
  127.         }
  128.     }
  129. }