Mercurial > hg > isophonics-drupal-site
view core/modules/user/src/EventSubscriber/MaintenanceModeSubscriber.php @ 13:5fb285c0d0e3
Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've
been lucky to get away with this so far, as we don't support self-registration
which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5
was vulnerable to.
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:33:26 +0100 |
parents | 4c8ae668cc8c |
children | af1871eacc83 |
line wrap: on
line source
<?php namespace Drupal\user\EventSubscriber; use Drupal\Core\Routing\RouteMatch; use Drupal\Core\Routing\UrlGeneratorTrait; use Drupal\Core\Session\AccountInterface; use Drupal\Core\Site\MaintenanceModeInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * Maintenance mode subscriber to log out users. */ class MaintenanceModeSubscriber implements EventSubscriberInterface { use UrlGeneratorTrait; /** * The maintenance mode. * * @var \Drupal\Core\Site\MaintenanceMode */ protected $maintenanceMode; /** * The current account. * * @var \Drupal\Core\Session\AccountInterface */ protected $account; /** * Constructs a new MaintenanceModeSubscriber. * * @param \Drupal\Core\Site\MaintenanceModeInterface $maintenance_mode * The maintenance mode. * @param \Drupal\Core\Session\AccountInterface $account * The current user. */ public function __construct(MaintenanceModeInterface $maintenance_mode, AccountInterface $account) { $this->maintenanceMode = $maintenance_mode; $this->account = $account; } /** * Logout users if site is in maintenance mode. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event to process. */ public function onKernelRequestMaintenance(GetResponseEvent $event) { $request = $event->getRequest(); $route_match = RouteMatch::createFromRequest($request); if ($this->maintenanceMode->applies($route_match)) { // If the site is offline, log out unprivileged users. if ($this->account->isAuthenticated() && !$this->maintenanceMode->exempt($this->account)) { user_logout(); // Redirect to homepage. $event->setResponse($this->redirect($this->url('<front>'))); } } } /** * {@inheritdoc} */ public static function getSubscribedEvents() { $events[KernelEvents::REQUEST][] = ['onKernelRequestMaintenance', 31]; return $events; } }