Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / serialization / src / EventSubscriber / UserRouteAlterSubscriber.php
1 <?php
2
3 namespace Drupal\serialization\EventSubscriber;
4
5 use Drupal\Core\Routing\RouteBuildEvent;
6 use Drupal\Core\Routing\RoutingEvents;
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8
9 /**
10  * Alters user authentication routes to support additional serialization formats.
11  */
12 class UserRouteAlterSubscriber implements EventSubscriberInterface {
13
14   /**
15    * The available serialization formats.
16    *
17    * @var array
18    */
19   protected $serializerFormats = [];
20
21   /**
22    * UserRouteAlterSubscriber constructor.
23    *
24    * @param array $serializer_formats
25    *   The available serializer formats.
26    */
27   public function __construct(array $serializer_formats) {
28     $this->serializerFormats = $serializer_formats;
29   }
30
31   /**
32    * {@inheritdoc}
33    */
34   public static function getSubscribedEvents() {
35     $events[RoutingEvents::ALTER][] = 'onRoutingAlterAddFormats';
36     return $events;
37   }
38
39   /**
40    * Adds supported formats to the user authentication HTTP routes.
41    *
42    * @param \Drupal\Core\Routing\RouteBuildEvent $event
43    *   The event to process.
44    */
45   public function onRoutingAlterAddFormats(RouteBuildEvent $event) {
46     $route_names = [
47       'user.login_status.http',
48       'user.login.http',
49       'user.logout.http',
50       'user.pass.http',
51     ];
52     $routes = $event->getRouteCollection();
53     foreach ($route_names as $route_name) {
54       if ($route = $routes->get($route_name)) {
55         $formats = explode('|', $route->getRequirement('_format'));
56         $formats = array_unique(array_merge($formats, $this->serializerFormats));
57         $route->setRequirement('_format', implode('|', $formats));
58       }
59     }
60   }
61
62 }