Commit ecb17aa8 authored by Phil Norton's avatar Phil Norton
Browse files

Issue #3272786: Refactoring services to improve class names. Moved the event...

Issue #3272786: Refactoring services to improve class names. Moved the event dispatching into the new session_deletion service.
parent fcddfd7c
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -11,10 +11,18 @@ session_inspector.manage:
        type: entity:user
    _admin_route: TRUE

session_inspector.config:
  path: '/admin/config/people/session_inspector'
  defaults:
    _form: '\Drupal\session_inspector\Form\SessionInspectorConfigForm'
    _title: 'Session Inspector Configuration'
  requirements:
    _permission: 'administer session inspector configuration'

session_inspector.delete:
  path: '/user/{user}/sessions/{sid}/delete'
  defaults:
    _form: '\Drupal\session_inspector\Form\UserSessionDeleteForm'
    _form: '\Drupal\session_inspector\Form\DeleteSessionForm'
    _title: 'Delete session'
  requirements:
    _session_inspector_access_check: 'TRUE'
@@ -24,16 +32,8 @@ session_inspector.delete:
        type: entity:user
    _admin_route: TRUE

session_inspector.config:
  path: '/admin/config/people/session_inspector'
  defaults:
    _form: '\Drupal\session_inspector\Form\SessionInspectorConfigForm'
    _title: 'Session Inspector Configuration'
  requirements:
    _permission: 'administer session inspector configuration'

session_inspector.delete_all:
  path: '/user/{user}/sessions/{sid}/delete-all'
  path: '/user/{user}/sessions/delete-all'
  defaults:
    _form: '\Drupal\session_inspector\Form\DeleteAllSessionsForm'
    _title: 'Delete all active sessions'
+3 −3
Original line number Diff line number Diff line
@@ -16,6 +16,6 @@ services:
    class: Drupal\session_inspector\Plugin\HostnameFormatManager
    parent: default_plugin_manager

  session_inspector.delete_all_sessions:
    class: Drupal\session_inspector\SessionInspectorDeleteAllSessions
    arguments: ['@entity_type.manager', '@session_inspector', '@database']
  session_inspector.session_deletion:
    class: Drupal\session_inspector\SessionDeletion
    arguments: ['@entity_type.manager', '@session_inspector', '@database', '@event_dispatcher']
+18 −32
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Drupal\session_inspector\Controller;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\session_inspector\Plugin\BrowserFormatManager;
use Drupal\session_inspector\Plugin\HostnameFormatManager;
use Drupal\session_inspector\SessionInspectorInterface;
@@ -106,6 +107,8 @@ class UserSessionInspector extends ControllerBase {
   *   The renderable array for the page output.
   */
  public function inspectSessionPage(UserInterface $user) {
    $build = [];

    $config = $this->configFactory->get($this->configName);

    $sessions = $this->sessionInspector->getSessions($user);
@@ -143,16 +146,6 @@ class UserSessionInspector extends ControllerBase {
          ],
        ];
      }
      $rows[] = [
        $this->t('Delete all active sessions listed, except the current session'),
        NULL,
        NULL,
        NULL,
        [
          'data' => $this->deleteAllSessionsLink($user, $session['sid']),
          'data-test' => ['session-operation'],
        ],
      ];
    }

    $sessionsTable = [
@@ -172,11 +165,25 @@ class UserSessionInspector extends ControllerBase {
      ],
    ];

    return [
    $build['session_table'] = [
      '#theme' => 'sessions',
      '#description' => $this->t('Here is a list of sessions registered to your user account'),
      '#sessions' => $sessionsTable,
    ];

    $build['delete_all_sessions_link'] = [
      '#type' => 'link',
      '#url' => Url::fromRoute('session_inspector.delete_all', ['user' => $user->id()]),
      '#title' => $this->t('Delete all sessions'),
      '#attributes' => [
        'class' => [
          'button',
          'button--danger',
        ],
      ],
    ];

    return $build;
  }

  /**
@@ -226,25 +233,4 @@ class UserSessionInspector extends ControllerBase {
    return $linkObject->toRenderable();
  }

  /**
   * Create a delete all sessions link.
   *
   * Given a user object to create a delete all sessions link for the
   * sessions table.
   *
   * @param \Drupal\user\UserInterface $user
   *   The current user.
   * @param string $sessionId
   *   The session ID.
   *
   * @return array
   *   The link as a render array.
   */
  public function deleteAllSessionsLink(UserInterface $user, string $sessionId) {
    $options = ['user' => $user->id(), 'sid' => $sessionId];
    $linkObject = Link::createFromRoute('Delete all sessions', 'session_inspector.delete_all', $options);

    return $linkObject->toRenderable();
  }

}
+8 −16
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ namespace Drupal\session_inspector\Form;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface;
use Drupal\session_inspector\SessionDeletionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
@@ -22,36 +22,28 @@ class DeleteAllSessionsForm extends ConfirmFormBase {
   */
  protected $user;

  /**
   * The session ID.
   *
   * @var string
   */
  protected $sessionId;

  /**
   * The session inspector delete all sessions service.
   *
   * @var \Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface
   * @var \Drupal\session_inspector\SessionDeletionInterface
   */
  protected $deleteAllSessionsService;

  /**
   * Constructs a DeleteAllSessionsForm object.
   *
   * @param \Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface $deleteAllSessionsService
   * @param \Drupal\session_inspector\SessionDeletionInterface $deleteAllSessionsService
   *   The session inspector delete all sessions service.
   */
  public function __construct(SessionInspectorDeleteAllSessionsInterface $deleteAllSessionsService) {
  public function __construct(SessionDeletionInterface $deleteAllSessionsService) {
    $this->deleteAllSessionsService = $deleteAllSessionsService;
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state, $user = NULL, $sid = NULL) {
  public function buildForm(array $form, FormStateInterface $form_state, $user = NULL) {
    $this->user = $user;
    $this->sessionId = $sid;
    return parent::buildForm($form, $form_state);
  }

@@ -60,7 +52,7 @@ class DeleteAllSessionsForm extends ConfirmFormBase {
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('session_inspector.delete_all_sessions')
      $container->get('session_inspector.session_deletion')
    );
  }

@@ -75,7 +67,7 @@ class DeleteAllSessionsForm extends ConfirmFormBase {
   * {@inheritDoc}
   */
  public function getDescription() {
    return $this->t('This action will delete all active sessions and cannot be undone.');
    return $this->t('This action will delete all other active sessions and cannot be undone.');
  }

  /**
@@ -96,7 +88,7 @@ class DeleteAllSessionsForm extends ConfirmFormBase {
   * {@inheritDoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->deleteAllSessionsService->deleteAllSessions($this->user, $this->sessionId);
    $this->deleteAllSessionsService->deleteAllSessions($this->user);
    $form_state->setRedirectUrl($this->getCancelUrl());
  }

+8 −26
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\session_inspector\Event\SessionEvent;
use Drupal\session_inspector\Event\SessionInspectorEvents;
use Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface;
use Drupal\session_inspector\SessionDeletionInterface;
use Drupal\session_inspector\SessionInspectorInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -17,7 +17,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 *
 * @package Drupal\session_inspector\Form
 */
class UserSessionDeleteForm extends ConfirmFormBase {
class DeleteSessionForm extends ConfirmFormBase {

  /**
   * The user Id.
@@ -40,33 +40,23 @@ class UserSessionDeleteForm extends ConfirmFormBase {
   */
  protected $sessionInspector;

  /**
   * The event dispatcher.
   *
   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
   */
  protected $eventDispatcher;

  /**
   * The session inspector delete all sessions service.
   *
   * @var \Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface
   * @var \Drupal\session_inspector\SessionDeletionInterface
   */
  protected $deleteAllSessionsService;

  /**
   * Constructs a UserSessionDeleteForm object.
   * Constructs a DeleteSessionForm object.
   *
   * @param \Drupal\session_inspector\SessionInspectorInterface $session_inspector
   *   The SessionInspector service.
   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
   *   The event dispatcher.
   * @param \Drupal\session_inspector\SessionInspectorDeleteAllSessionsInterface $deleteAllSessionsService
   * @param \Drupal\session_inspector\SessionDeletionInterface $deleteAllSessionsService
   *   The session delete interface.
   */
  public function __construct(SessionInspectorInterface $session_inspector, EventDispatcherInterface $event_dispatcher, SessionInspectorDeleteAllSessionsInterface $deleteAllSessionsService) {
  public function __construct(SessionInspectorInterface $session_inspector, SessionDeletionInterface $deleteAllSessionsService) {
    $this->sessionInspector = $session_inspector;
    $this->eventDispatcher = $event_dispatcher;
    $this->deleteAllSessionsService = $deleteAllSessionsService;
  }

@@ -85,8 +75,7 @@ class UserSessionDeleteForm extends ConfirmFormBase {
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('session_inspector'),
      $container->get('event_dispatcher'),
      $container->get('session_inspector.delete_all_sessions')
      $container->get('session_inspector.session_deletion')
    );
  }

@@ -122,15 +111,8 @@ class UserSessionDeleteForm extends ConfirmFormBase {
   * {@inheritDoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    // Get the session data we are about to delete.
    $sessionData = $this->sessionInspector->getSession($this->sessionId);
    $sessionEvent = new SessionEvent($sessionData['uid'], $sessionData['sid'], $sessionData['hostname'], $sessionData['timestamp']);

    // Destroy the session.
    $this->deleteAllSessionsService->destroySession($this->sessionId);

    // Trigger the session event.
    $this->eventDispatcher->dispatch($sessionEvent, SessionInspectorEvents::SESSION_DESTROYED);
    $this->deleteAllSessionsService->deleteSession($this->sessionId);

    // Redirect the user back to the session list.
    $form_state->setRedirectUrl($this->getCancelUrl());
Loading