src/EventSubscriber/LoginSubscriber.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\Security\Core\Security;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. class LoginSubscriber implements EventSubscriberInterface
  11. {
  12.     protected $security
  13.     protected $em
  14.     protected $router;
  15.     public function __construct(Security $securityEntityManagerInterface $emUrlGeneratorInterface $router)
  16.     {
  17.         $this->security $security;
  18.         $this->em $em;
  19.         $this->router $router;
  20.     }
  21.     public static function getSubscribedEvents(): array 
  22.     {
  23.         return [ KernelEvents::REQUEST => 'onRequest' ];
  24.     }
  25.     public function onRequest(RequestEvent $event): void {
  26.         $url $this->router->generate('app_login');
  27.         // if(strstr($url, $event->getRequest()->getRequestUri())) {
  28.         //     return;
  29.         // }
  30.         // if conditions met
  31.         // 301 redirect to some internal or external URL
  32.         // if(!$event->isMainRequest()) {
  33.         //     return;
  34.         // }
  35.         // TODO: disable this for guest donation
  36.         // $user = $this->security->getUser();
  37.         // if(!$user) {
  38.         //     if(str_starts_with($event->getRequest()->getRequestUri(), '/donation') || str_starts_with($event->getRequest()->getRequestUri(), '/support-our-work')  || str_starts_with($event->getRequest()->getRequestUri(), '/project/follow') ) {
  39.         //         $loginReturnUrl = $this->router->generate('app_login', ['returnUrl' => $event->getRequest()->getRequestUri()]);
  40.         //         $event->setResponse(new RedirectResponse($loginReturnUrl));
  41.         //     // } else {
  42.         //         // $event->setResponse(new RedirectResponse($url));
  43.         //     }
  44.         // }
  45.         $user $this->security->getUser();
  46.         if(!$user) {
  47.             if( str_starts_with($event->getRequest()->getRequestUri(), '/support-our-work')  ) {
  48.                 $loginReturnUrl $this->router->generate('app_login', ['returnUrl' => $event->getRequest()->getRequestUri()]);
  49.                 if ( str_contains($event->getRequest()->getRequestUri(), 'is_recurring=1')) { // Check only recurring
  50.                     $event->setResponse(new RedirectResponse($loginReturnUrl));
  51.                 }
  52.             }
  53.             if( str_starts_with($event->getRequest()->getRequestUri(), '/project/follow') ) {
  54.                 $loginReturnUrl $this->router->generate('app_login', ['returnUrl' => $event->getRequest()->getRequestUri()]);
  55.                 $event->setResponse(new RedirectResponse($loginReturnUrl));
  56.             }
  57.         }
  58.         return;
  59.     }   
  60. }