src/Subscriber/User/ProdUserListener.php line 103

Open in your IDE?
  1. <?php
  2. /*
  3.  * Author: Dominik Piekarski <code@dompie.de>
  4.  * Created at: 2022/05/18 13:37
  5.  */
  6. declare(strict_types=1);
  7. namespace App\Subscriber\User;
  8. use App\Security\ApiUser;
  9. use App\Service\Client\Booking\BookingFacade;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpKernel\Event\RequestEvent;
  14. use Symfony\Component\HttpKernel\KernelEvents;
  15. use Symfony\Component\Routing\RouterInterface;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. class ProdUserListener implements EventSubscriberInterface
  18. {
  19.     private ParameterBagInterface $params;
  20.     private TokenStorageInterface $tokenStorage;
  21.     private BookingFacade $bookingFacade;
  22.     private RouterInterface $router;
  23.     public static array $allowedMemberIds = [
  24.         'krauler80' => 878653,
  25.         'krauler81' => 894265,
  26.         'krauler82' => 878595,
  27.         'krauler83' => 878655,
  28.         'krauler84' => 888899,
  29.         'spamdom' => 836063,
  30.         'kunstsammler' => 838905,
  31.         'support' => 3,
  32.         'grummeluser12345' => 601217,
  33.         'tha10' => 879563,
  34.         'User13560' => 849125,
  35.         'SuesseFickMaus' => 231530,
  36.         'ulrich-richter' => 282,
  37.         'thortiee' => 859081//operator tester
  38.         'sweethotbunny' => 831157,
  39.         'Motheridliketofuck' => 691436,
  40.         'coradoggy' => 644169,
  41.         'User53460' => 598943,
  42.         'User19657' => 599161,
  43.         'MistressEva' => 670761,
  44.         'Unschuldsengel' => 674063,
  45.         'FrankM61' => 575727,
  46.         'secret-stranger' => 481201,
  47.         'knopf' => 518234,
  48.         'Karsten53' => 786623,
  49.         'HotAnalQueen' => 665835,
  50.         'User717744' => 902127//test10@dompie.de
  51.         'User299211' => 902141//test11@dompie.de
  52.         'User902349' => 902143//test12@dompie.de
  53.         'StefJa' => 914553,
  54.         'ChrisDev' => 920167// christopher
  55.         'Chris-dev' => 925731//christoph 
  56.     ];
  57.     public function __construct(ParameterBagInterface $paramsTokenStorageInterface $tokenStorageBookingFacade $facadeRouterInterface $router)
  58.     {
  59.         $this->tokenStorage $tokenStorage;
  60.         $this->params $params;
  61.         $this->bookingFacade $facade;
  62.         $this->router $router;
  63.     }
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             KernelEvents::REQUEST => [
  68.                 ['logoutNonTestUsers'0],
  69.                 ['forceOutstandingDebtsPage', -1],
  70.             ],
  71.         ];
  72.     }
  73.     public function logoutNonTestUsers(RequestEvent $event)
  74.     {
  75.         $env $this->params->get('kernel.environment');
  76.         if ($env !== 'staging') {
  77.             return;
  78.         }
  79.         /** @var ApiUser $user */
  80.         $token $this->tokenStorage->getToken();
  81.         if (null === $token || $event->isMainRequest() === false) {
  82.             return;
  83.         }
  84.         $user $token->getUser();
  85.         if (!$user instanceof ApiUser) {
  86.             return;
  87.         }
  88.         if (in_array($user->getMemberId(), self::$allowedMemberIdstrue)) {
  89.             return;
  90.         }
  91.         $event->stopPropagation();
  92.         $response = new RedirectResponse('/security/logout');
  93.         $event->setResponse($response);
  94.     }
  95.     public function forceOutstandingDebtsPage(RequestEvent $event)
  96.     {
  97.         if(!$event->isMainRequest()) {
  98.             return;
  99.         }
  100.         /** @var ApiUser $user */
  101.         $token $this->tokenStorage->getToken();
  102.         if($token === null) {
  103.             return;
  104.         }
  105.         /**
  106.          * @var $user ApiUser
  107.          */
  108.         $user $token->getUser();
  109.         if (!$user instanceof ApiUser || $user->hasRole('ROLE_AMATEUR')) {
  110.             return;
  111.         }
  112.         $uri $event->getRequest()->getRequestUri();
  113.         $outstandingDebtsUri $this->router->generate('app_booking_mainbooking_debtsoutstanding');
  114.         $skipUris = [
  115.             $this->router->generate('app_booking_mainbooking_index', ['s_sofort']),
  116.             $outstandingDebtsUri,
  117.             $this->router->generate('app_booking_mainbooking_debtssettlement'),
  118.         ];
  119.         if (str_starts_with($uri'/messenger') || str_starts_with($uri'/_wdt') || str_starts_with($uri'/booking/external') || in_array($uri$skipUristrue)) {
  120.             return;
  121.         }
  122.         $outstandingDebts $this->bookingFacade->getOutstandingDebts();
  123.         if ($outstandingDebts === []) {
  124.             return;
  125.         }
  126.         $event->stopPropagation();
  127.         $event->setResponse(new RedirectResponse($outstandingDebtsUri));
  128.     }
  129. }