cforge-2.0.x-dev/src/EventSubscriber/CforgeSubscriber.php

src/EventSubscriber/CforgeSubscriber.php
<?php

namespace Drupal\cforge\EventSubscriber;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;

/**
 * Cforge react to events.
 */
class CforgeSubscriber implements EventSubscriberInterface {

  private $currentUser;
  private $cforgeSettings;

  function __construct($current_user, $config) {
    $this->currentUser = $current_user;
    $this->cforgeSettings = $config->get('cforge.settings');
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() : array {
    $events = [
      KernelEvents::REQUEST  => [['cforgeBlockBot', -1001]],
      KernelEvents::RESPONSE  => [['cforgeFront', 1001]]
    ];
    return $events;
  }

  /**
   * Redirect users
   */
  public function cforgeFront(ResponseEvent $event) {
    // Don't run this when site is in maintenance mode.
    if (\Drupal::state()->get('system.maintenance_mode')) {
      return;
    }
    // Ignore non index.php requests (like cron).
    if (!empty($_SERVER['SCRIPT_FILENAME']) && realpath(DRUPAL_ROOT . '/index.php') != realpath($_SERVER['SCRIPT_FILENAME'])) {
      return;
    }
    if ($this->currentUser->isAuthenticated()) {
      $path = trim($event->getRequest()->getpathinfo(), '/');
      if (empty($path)) {
        $front = $this->cforgeSettings->get('member_frontpage');
        $event->setResponse(new RedirectResponse($front));
      }
    }
  }

  public function cforgeBlockBot(RequestEvent $event) {
    // Ignore non index.php requests (like cron).
    if (!empty($_SERVER['SCRIPT_FILENAME']) && realpath(DRUPAL_ROOT . '/index.php') != realpath($_SERVER['SCRIPT_FILENAME'])) {
      return;
    }
    //@todo
//    if ($this->currentUser->isAnonymous()) {
//      // This was originally added to deter certain kinds of bots probing long paths
//      $path = trim($event->getRequest()->getpathinfo(), '/');
//      $parts = array_filter(explode('/', $path));
//      if (count($parts) > 5) {
//        $response = new Response(NULL, 404);
//        $event->setResponse($response);
//        $this->logger->notice("Blocked access to path %path", ['%path' => $path]);
//      }
//    }
  }


}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc