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 onKernelResponse( ResponseEvent $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 isValidDateFormat( string $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. }