<?php
/*
* Author: Dominik Piekarski <code@dompie.de>
* Created at: 2022/05/18 13:37
*/
declare(strict_types=1);
namespace App\Subscriber\User;
use App\Security\ApiUser;
use App\Service\Client\Booking\BookingFacade;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ProdUserListener implements EventSubscriberInterface
{
private ParameterBagInterface $params;
private TokenStorageInterface $tokenStorage;
private BookingFacade $bookingFacade;
private RouterInterface $router;
public static array $allowedMemberIds = [
'krauler80' => 878653,
'krauler81' => 894265,
'krauler82' => 878595,
'krauler83' => 878655,
'krauler84' => 888899,
'spamdom' => 836063,
'kunstsammler' => 838905,
'support' => 3,
'grummeluser12345' => 601217,
'tha10' => 879563,
'User13560' => 849125,
'SuesseFickMaus' => 231530,
'ulrich-richter' => 282,
'thortiee' => 859081, //operator tester
'sweethotbunny' => 831157,
'Motheridliketofuck' => 691436,
'coradoggy' => 644169,
'User53460' => 598943,
'User19657' => 599161,
'MistressEva' => 670761,
'Unschuldsengel' => 674063,
'FrankM61' => 575727,
'secret-stranger' => 481201,
'knopf' => 518234,
'Karsten53' => 786623,
'HotAnalQueen' => 665835,
'User717744' => 902127, //test10@dompie.de
'User299211' => 902141, //test11@dompie.de
'User902349' => 902143, //test12@dompie.de
'StefJa' => 914553,
'ChrisDev' => 920167, // christopher
'Chris-dev' => 925731, //christoph
];
public function __construct(ParameterBagInterface $params, TokenStorageInterface $tokenStorage, BookingFacade $facade, RouterInterface $router)
{
$this->tokenStorage = $tokenStorage;
$this->params = $params;
$this->bookingFacade = $facade;
$this->router = $router;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => [
['logoutNonTestUsers', 0],
['forceOutstandingDebtsPage', -1],
],
];
}
public function logoutNonTestUsers(RequestEvent $event)
{
$env = $this->params->get('kernel.environment');
if ($env !== 'staging') {
return;
}
/** @var ApiUser $user */
$token = $this->tokenStorage->getToken();
if (null === $token || $event->isMainRequest() === false) {
return;
}
$user = $token->getUser();
if (!$user instanceof ApiUser) {
return;
}
if (in_array($user->getMemberId(), self::$allowedMemberIds, true)) {
return;
}
$event->stopPropagation();
$response = new RedirectResponse('/security/logout');
$event->setResponse($response);
}
public function forceOutstandingDebtsPage(RequestEvent $event)
{
if(!$event->isMainRequest()) {
return;
}
/** @var ApiUser $user */
$token = $this->tokenStorage->getToken();
if($token === null) {
return;
}
/**
* @var $user ApiUser
*/
$user = $token->getUser();
if (!$user instanceof ApiUser || $user->hasRole('ROLE_AMATEUR')) {
return;
}
$uri = $event->getRequest()->getRequestUri();
$outstandingDebtsUri = $this->router->generate('app_booking_mainbooking_debtsoutstanding');
$skipUris = [
$this->router->generate('app_booking_mainbooking_index', ['s_sofort']),
$outstandingDebtsUri,
$this->router->generate('app_booking_mainbooking_debtssettlement'),
];
if (str_starts_with($uri, '/messenger') || str_starts_with($uri, '/_wdt') || str_starts_with($uri, '/booking/external') || in_array($uri, $skipUris, true)) {
return;
}
$outstandingDebts = $this->bookingFacade->getOutstandingDebts();
if ($outstandingDebts === []) {
return;
}
$event->stopPropagation();
$event->setResponse(new RedirectResponse($outstandingDebtsUri));
}
}