<?php
namespace App\Listener;
use App\Entity\User;
use App\Services\Common\PlatformService;
use Exception;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ClosedSiteListener
{
private RouterInterface $router;
private TokenStorageInterface $token;
private PlatformService $platformService;
public function __construct(
RouterInterface $router,
TokenStorageInterface $token,
PlatformService $platformService
)
{
$this->router = $router;
$this->token = $token;
$this->platformService = $platformService;
}
/**
* @param ResponseEvent $event
*
* @return void
* @throws Exception
*/
public function onKernelResponse( ResponseEvent $event )
{
$request = $event->getRequest();
$token = $this->token->getToken();
if ( is_null( $token ) ) {
return;
}
/** @var User $user */
$user = $this->token->getToken()->getUser();
if ( $user->isDeveloper() || $user->isSuperAdmin() ) {
return;
}
if ( in_array( $request->get( '_route' ), [
'static_file_folder',
'static_project_file',
'front_common_css_custom',
'global_common_platform_version',
'closed_platform',
'app_login',
],
) ) {
return;
}
$redirect = $this->platformService->isPlatformClosed();
if ( $redirect ) {
$event->setResponse(
new RedirectResponse(
$this->router->generate( 'closed_platform' ),
),
);
}
}
/**
* @param string $dateString
*
* @return bool
*/
public function isValidDateFormat( string $dateString ): bool
{
$pattern = '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/';
return preg_match( $pattern, $dateString ) === 1;
}
}