src/Listener/ClosedSiteListener.php line 40

Open in your IDE?
  1. <?php
  2.     namespace App\Listener;
  3.     use App\Entity\User;
  4.     use App\Services\Common\PlatformService;
  5.     use Exception;
  6.     use Symfony\Component\HttpFoundation\RedirectResponse;
  7.     use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8.     use Symfony\Component\Routing\RouterInterface;
  9.     use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10.     class ClosedSiteListener
  11.     {
  12.         private RouterInterface       $router;
  13.         private TokenStorageInterface $token;
  14.         private PlatformService       $platformService;
  15.         public function __construct(
  16.                 RouterInterface       $router,
  17.                 TokenStorageInterface $token,
  18.                 PlatformService       $platformService
  19.         )
  20.         {
  21.             $this->router          $router;
  22.             $this->token           $token;
  23.             $this->platformService $platformService;
  24.         }
  25.         /**
  26.          * @param ResponseEvent $event
  27.          *
  28.          * @return void
  29.          * @throws Exception
  30.          */
  31.         public function onKernelResponseResponseEvent $event )
  32.         {
  33.             $request $event->getRequest();
  34.             $token $this->token->getToken();
  35.             if ( is_null$token ) ) {
  36.                 return;
  37.             }
  38.             /** @var User $user */
  39.             $user $this->token->getToken()->getUser();
  40.             if ( $user->isDeveloper() || $user->isSuperAdmin() ) {
  41.                 return;
  42.             }
  43.             if ( in_array$request->get'_route' ), [
  44.                     'static_file_folder',
  45.                     'static_project_file',
  46.                     'front_common_css_custom',
  47.                     'global_common_platform_version',
  48.                     'closed_platform',
  49.                     'app_login',
  50.             ],
  51.             ) ) {
  52.                 return;
  53.             }
  54.             $redirect $this->platformService->isPlatformClosed();
  55.             if ( $redirect ) {
  56.                 $event->setResponse(
  57.                         new RedirectResponse(
  58.                                 $this->router->generate'closed_platform' ),
  59.                         ),
  60.                 );
  61.             }
  62.         }
  63.         /**
  64.          * @param string $dateString
  65.          *
  66.          * @return bool
  67.          */
  68.         public function isValidDateFormatstring $dateString ): bool
  69.         {
  70.             $pattern '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/';
  71.             return preg_match$pattern$dateString ) === 1;
  72.         }
  73.     }