SecurepagesSubscriber.php in Secure Pages 8
File
src/EventSubscriber/SecurepagesSubscriber.php
View source
<?php
namespace Drupal\securepages\EventSubscriber;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Routing\RouteMatch;
use Drupal\Core\Routing\TrustedRedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\securepages\Securepages;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
class SecurepagesSubscriber implements EventSubscriberInterface {
protected $configFactory;
public function __construct(ConfigFactoryInterface $config_factory) {
$this->configFactory = $config_factory;
}
public function checkRequestRedirection(GetResponseEvent $event) {
$config = $this->configFactory
->get('securepages.settings');
if ($config
->get('enable') && php_sapi_name() != 'cli') {
$redirect = Securepages::checkRedirect();
if ($redirect !== NULL) {
$request = $event
->getRequest();
$route_match = RouteMatch::createFromRequest($request);
$route_name = $route_match
->getRouteName();
$route_parameters = $route_match
->getRawParameters()
->all();
$qs = $request
->getQueryString();
$url = Securepages::getUrl($route_name, $route_parameters, [], $redirect)
->toString() . ($qs ? '?' . $qs : '');
$event
->setResponse(new TrustedRedirectResponse($url));
}
}
}
public function checkResponseRedirection(FilterResponseEvent $event) {
$response = $event
->getResponse();
if ($response instanceof RedirectResponse) {
$config = $this->configFactory
->get('securepages.settings');
if ($config
->get('enable')) {
$role_match = Securepages::matchCurrentUser();
$page_match = Securepages::matchCurrentPath();
$is_https = $event
->getRequest()
->isSecure();
$target = $response
->getTargetUrl();
if ($role_match || $page_match) {
if (!$is_https && strpos($target, 'http://') === 0) {
$target = str_replace(Securepages::getUrl('<front>', [], [], FALSE)
->toString(), Securepages::getUrl('<front>')
->toString(), $target);
$response
->setTargetUrl($target);
}
}
elseif ($page_match === FALSE && $is_https && $config
->get('switch') && strpos($target, 'https://') === 0) {
$target = str_replace(Securepages::getUrl('<front>')
->toString(), Securepages::getUrl('<front>', [], [], FALSE)
->toString(), $target);
$response
->setTargetUrl($target);
}
}
}
}
static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = array(
'checkRequestRedirection',
);
$events[KernelEvents::RESPONSE][] = array(
'checkResponseRedirection',
);
return $events;
}
}