vendor/ibexa/rest/src/bundle/EventListener/UserCheckRequestListener.php line 44

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\Bundle\Rest\EventListener;
  8. use Ibexa\Bundle\Rest\Exception\UnexpectedUserException;
  9. use Ibexa\Contracts\Core\Repository\PermissionResolver;
  10. use Psr\Log\LoggerAwareInterface;
  11. use Psr\Log\LoggerAwareTrait;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. use Symfony\Component\Security\Core\Security;
  17. final class UserCheckRequestListener implements EventSubscriberInterfaceLoggerAwareInterface
  18. {
  19.     use LoggerAwareTrait;
  20.     private PermissionResolver $permissionResolver;
  21.     private Security $security;
  22.     public function __construct(PermissionResolver $permissionResolverSecurity $security)
  23.     {
  24.         $this->permissionResolver $permissionResolver;
  25.         $this->security $security;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             KernelEvents::REQUEST => [
  31.                 ['checkUser'],
  32.             ],
  33.         ];
  34.     }
  35.     public function checkUser(RequestEvent $event): void
  36.     {
  37.         if (!$event->isMainRequest()) {
  38.             return;
  39.         }
  40.         if (!$event->getRequest()->attributes->get('is_rest_request')) {
  41.             return;
  42.         }
  43.         $request $event->getRequest();
  44.         $expectedUserIdentifier $request->headers->get('X-Expected-User');
  45.         if (empty($expectedUserIdentifier)) {
  46.             return;
  47.         }
  48.         $user $this->security->getUser();
  49.         if ($user === null || $expectedUserIdentifier !== $user->getUsername()) {
  50.             throw new UnexpectedUserException('Expectation failed. User changed.'Response::HTTP_UNAUTHORIZED);
  51.         }
  52.     }
  53. }