src/Controller/SecurityController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\RegisterType;
  5. use App\Repository\UserRepository;
  6. use App\Service\TokenGenerator;
  7. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Component\Mime\Address;
  15. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  18. use TheSeer\Tokenizer\Exception;
  19. class SecurityController extends AbstractController
  20. {
  21. #[Route(path: '/login', name: 'app_login')]
  22. public function login(AuthenticationUtils $authenticationUtils): Response
  23. {
  24. // if ($this->getUser()) {
  25. // return $this->redirectToRoute('target_path');
  26. // }
  27. // get the login error if there is one
  28. $error = $authenticationUtils->getLastAuthenticationError();
  29. // last username entered by the user
  30. $lastUsername = $authenticationUtils->getLastUsername();
  31. return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  32. }
  33. #[Route(path: '/logout', name: 'app_logout')]
  34. public function logout(): void
  35. {
  36. throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  37. }
  38. #[Route('/register', name: 'app_user_register', methods: ['GET', 'POST'])]
  39. public function register(Request $request,
  40. UserRepository $userRepository,
  41. UserPasswordHasherInterface $passwordHasher,
  42. MailerInterface $mailer,
  43. TokenGenerator $tokenGenerator
  44. ): Response
  45. {
  46. $user = new User();
  47. $form = $this->createForm(RegisterType::class, $user);
  48. $form->handleRequest($request);
  49. if ($form->isSubmitted() && $form->isValid()) {
  50. $token = $tokenGenerator->getToken();
  51. $user->setToken($token);
  52. $user->setPassword($passwordHasher->hashPassword($user,$user->getPassword()));
  53. $userRepository->save($user, true);
  54. try {
  55. $email = (new TemplatedEmail())
  56. ->from(new Address("replay@tawsill.com")/**/)
  57. ->to(new Address($user->getEmail()))
  58. ->subject(' تفعيل حساب توصيل ')
  59. ->htmlTemplate('email/verify-account.html.twig')
  60. ->context([
  61. "token" => $token
  62. ]);
  63. $mailer->send($email);
  64. }catch (TransportExceptionInterface $e){
  65. return $this->json(['message' => "sending email is fail "],500);
  66. }
  67. return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  68. }
  69. return $this->renderForm('security/register.html.twig', [
  70. 'form' => $form,
  71. ]);
  72. }
  73. #[Route('/verify/{token}/{email}', name: 'app_user_verify', methods: ['GET', 'POST'])]
  74. public function verify(Request $request, string $token, string $email, UserRepository $userRepository): Response
  75. {
  76. $user = $userRepository->findOneBy([
  77. "email"=> base64_decode($email),
  78. ]);
  79. if ($user && $user->getToken() === "activated"){
  80. return $this->render('security/verify-account.html.twig', ["activated" => true]);
  81. }
  82. if(!$user || $user->getToken() !== $token){
  83. // log this
  84. return throw new NotFoundHttpException(" !😊 هناك مشكلة في تفعيل الحساب أعد المحاولة منفضلك ");
  85. }
  86. else {
  87. $user->setToken("activated");
  88. $userRepository->save($user, true);
  89. return $this->render('security/verify-account.html.twig', ["activated" => false] );
  90. }
  91. }
  92. }