vendor/web-token/jwt-framework/src/Bundle/JoseFramework/DataCollector/CheckerCollector.php line 125

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * The MIT License (MIT)
  5.  *
  6.  * Copyright (c) 2014-2020 Spomky-Labs
  7.  *
  8.  * This software may be modified and distributed under the terms
  9.  * of the MIT license.  See the LICENSE file for details.
  10.  */
  11. namespace Jose\Bundle\JoseFramework\DataCollector;
  12. use Jose\Bundle\JoseFramework\Event\ClaimCheckedFailureEvent;
  13. use Jose\Bundle\JoseFramework\Event\ClaimCheckedSuccessEvent;
  14. use Jose\Bundle\JoseFramework\Event\HeaderCheckedFailureEvent;
  15. use Jose\Bundle\JoseFramework\Event\HeaderCheckedSuccessEvent;
  16. use Jose\Bundle\JoseFramework\Services\ClaimCheckerManager;
  17. use Jose\Bundle\JoseFramework\Services\ClaimCheckerManagerFactory;
  18. use Jose\Bundle\JoseFramework\Services\HeaderCheckerManager;
  19. use Jose\Bundle\JoseFramework\Services\HeaderCheckerManagerFactory;
  20. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\VarDumper\Cloner\VarCloner;
  24. use Throwable;
  25. class CheckerCollector implements CollectorEventSubscriberInterface
  26. {
  27.     /**
  28.      * @var null|ClaimCheckerManagerFactory
  29.      */
  30.     private $claimCheckerManagerFactory;
  31.     /**
  32.      * @var null|HeaderCheckerManagerFactory
  33.      */
  34.     private $headerCheckerManagerFactory;
  35.     /**
  36.      * @var array
  37.      */
  38.     private $headerCheckedSuccesses = [];
  39.     /**
  40.      * @var array
  41.      */
  42.     private $headerCheckedFailures = [];
  43.     /**
  44.      * @var array
  45.      */
  46.     private $claimCheckedSuccesses = [];
  47.     /**
  48.      * @var array
  49.      */
  50.     private $claimCheckedFailures = [];
  51.     /**
  52.      * @var HeaderCheckerManager[]
  53.      */
  54.     private $headerCheckerManagers = [];
  55.     /**
  56.      * @var ClaimCheckerManager[]
  57.      */
  58.     private $claimCheckerManagers = [];
  59.     public function __construct(?ClaimCheckerManagerFactory $claimCheckerManagerFactory null, ?HeaderCheckerManagerFactory $headerCheckerManagerFactory null)
  60.     {
  61.         $this->claimCheckerManagerFactory $claimCheckerManagerFactory;
  62.         $this->headerCheckerManagerFactory $headerCheckerManagerFactory;
  63.     }
  64.     public function collect(array &$dataRequest $requestResponse $response, ?Throwable $exception null): void
  65.     {
  66.         $this->collectHeaderCheckerManagers($data);
  67.         $this->collectSupportedHeaderCheckers($data);
  68.         $this->collectClaimCheckerManagers($data);
  69.         $this->collectSupportedClaimCheckers($data);
  70.         $this->collectEvents($data);
  71.     }
  72.     public function addHeaderCheckerManager(string $idHeaderCheckerManager $headerCheckerManager): void
  73.     {
  74.         $this->headerCheckerManagers[$id] = $headerCheckerManager;
  75.     }
  76.     public function addClaimCheckerManager(string $idClaimCheckerManager $claimCheckerManager): void
  77.     {
  78.         $this->claimCheckerManagers[$id] = $claimCheckerManager;
  79.     }
  80.     public static function getSubscribedEvents()
  81.     {
  82.         return [
  83.             HeaderCheckedSuccessEvent::class => ['catchHeaderCheckSuccess'],
  84.             HeaderCheckedFailureEvent::class => ['catchHeaderCheckFailure'],
  85.             ClaimCheckedSuccessEvent::class => ['catchClaimCheckSuccess'],
  86.             ClaimCheckedFailureEvent::class => ['catchClaimCheckFailure'],
  87.         ];
  88.     }
  89.     public function catchHeaderCheckSuccess(HeaderCheckedSuccessEvent $event): void
  90.     {
  91.         $cloner = new VarCloner();
  92.         $this->headerCheckedSuccesses[] = $cloner->cloneVar($event);
  93.     }
  94.     public function catchHeaderCheckFailure(HeaderCheckedFailureEvent $event): void
  95.     {
  96.         $cloner = new VarCloner();
  97.         $this->headerCheckedFailures[] = $cloner->cloneVar($event);
  98.     }
  99.     public function catchClaimCheckSuccess(ClaimCheckedSuccessEvent $event): void
  100.     {
  101.         $cloner = new VarCloner();
  102.         $this->claimCheckedSuccesses[] = $cloner->cloneVar($event);
  103.     }
  104.     public function catchClaimCheckFailure(ClaimCheckedFailureEvent $event): void
  105.     {
  106.         $cloner = new VarCloner();
  107.         $this->claimCheckedFailures[] = $cloner->cloneVar($event);
  108.     }
  109.     private function collectHeaderCheckerManagers(array &$data): void
  110.     {
  111.         $data['checker']['header_checker_managers'] = [];
  112.         foreach ($this->headerCheckerManagers as $id => $checkerManager) {
  113.             $data['checker']['header_checker_managers'][$id] = [];
  114.             foreach ($checkerManager->getCheckers() as $checker) {
  115.                 $data['checker']['header_checker_managers'][$id][] = [
  116.                     'header' => $checker->supportedHeader(),
  117.                     'protected' => $checker->protectedHeaderOnly(),
  118.                 ];
  119.             }
  120.         }
  121.     }
  122.     private function collectSupportedHeaderCheckers(array &$data): void
  123.     {
  124.         $data['checker']['header_checkers'] = [];
  125.         if (null !== $this->headerCheckerManagerFactory) {
  126.             $aliases $this->headerCheckerManagerFactory->all();
  127.             foreach ($aliases as $alias => $checker) {
  128.                 $data['checker']['header_checkers'][$alias] = [
  129.                     'header' => $checker->supportedHeader(),
  130.                     'protected' => $checker->protectedHeaderOnly(),
  131.                 ];
  132.             }
  133.         }
  134.     }
  135.     private function collectClaimCheckerManagers(array &$data): void
  136.     {
  137.         $data['checker']['claim_checker_managers'] = [];
  138.         foreach ($this->claimCheckerManagers as $id => $checkerManager) {
  139.             $data['checker']['claim_checker_managers'][$id] = [];
  140.             foreach ($checkerManager->getCheckers() as $checker) {
  141.                 $data['checker']['claim_checker_managers'][$id][] = [
  142.                     'claim' => $checker->supportedClaim(),
  143.                 ];
  144.             }
  145.         }
  146.     }
  147.     private function collectSupportedClaimCheckers(array &$data): void
  148.     {
  149.         $data['checker']['claim_checkers'] = [];
  150.         if (null !== $this->claimCheckerManagerFactory) {
  151.             $aliases $this->claimCheckerManagerFactory->all();
  152.             foreach ($aliases as $alias => $checker) {
  153.                 $data['checker']['claim_checkers'][$alias] = [
  154.                     'claim' => $checker->supportedClaim(),
  155.                 ];
  156.             }
  157.         }
  158.     }
  159.     private function collectEvents(array &$data): void
  160.     {
  161.         $data['checker']['events'] = [
  162.             'header_check_success' => $this->headerCheckedSuccesses,
  163.             'header_check_failure' => $this->headerCheckedFailures,
  164.             'claim_check_success' => $this->claimCheckedSuccesses,
  165.             'claim_check_failure' => $this->claimCheckedFailures,
  166.         ];
  167.     }
  168. }