src/EventSubscriber/ActionSubscriber.php line 22

  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use App\Controller\BaseController;
  9. class ActionSubscriber implements EventSubscriberInterface
  10. {
  11.     private $_requestStack;
  12.     private $_controller;
  13.     public function __construct(RequestStack $requestStack)
  14.     {
  15.         $this->_requestStack $requestStack;
  16.     }
  17.     
  18.     public function onKernelController(ControllerEvent $event)
  19.     {
  20.         $controller $event->getController();
  21.         /*
  22.          * $controller passed can be either a class or a Closure.
  23.          * This is not usual in Symfony but it may happen.
  24.          * If it is a class, it comes in array format
  25.          */
  26.         if (!is_array($controller))
  27.             return;
  28.         if ($controller[0] instanceof BaseController)
  29.         {
  30.             $this->_controller $controller[0];
  31.             $this->_controller->beforeAction();
  32.         }
  33.     }
  34.     public function onKernelResponse(ResponseEvent $event)
  35.     {
  36.         if ($this->_controller)
  37.             $this->_controller->afterAction();
  38.         
  39.         // dodatkowa blokada Basic Auth dla panelu administracyjnego
  40.         
  41.         if (isset($_ENV['ADMIN_BASIC_AUTH_ACTIVE']) && (int)$_ENV['ADMIN_BASIC_AUTH_ACTIVE'] &&
  42.                 isset($_ENV['ADMIN_BASIC_AUTH_USER']) && $_ENV['ADMIN_BASIC_AUTH_USER'] != '' &&
  43.                 isset($_ENV['ADMIN_BASIC_AUTH_PASSWORD']) && $_ENV['ADMIN_BASIC_AUTH_PASSWORD'] != '')
  44.         {
  45.             if (strpos($this->_requestStack->getMainRequest()->get('_route'), 'admin_') === 0)
  46.             {
  47.                 $request $event->getRequest();
  48.                 $username $request->server->get('PHP_AUTH_USER');
  49.                 $password $request->server->get('PHP_AUTH_PW');            
  50.                 if ($_ENV['ADMIN_BASIC_AUTH_USER'] != $username || $_ENV['ADMIN_BASIC_AUTH_PASSWORD'] != $password)
  51.                 {
  52.                     $response $event->getResponse();
  53.                     $response->setStatusCode(401);
  54.                     $response->headers->set('WWW-Authenticate''Basic realm="Restricted Area"');
  55.                     $response->setContent('Brak dostÄ™pu.');
  56.                     $event->setResponse($response);            
  57.                 }
  58.             }
  59.         }
  60.     }
  61.     
  62.     public static function getSubscribedEvents()
  63.     {
  64.         return array(
  65.             KernelEvents::CONTROLLER => 'onKernelController',
  66.             KernelEvents::RESPONSE => 'onKernelResponse'
  67.         );
  68.     }
  69. }