You are here

class StatusController in Acquia Connector 3.x

Same name and namespace in other branches
  1. 8.2 src/Controller/StatusController.php \Drupal\acquia_connector\Controller\StatusController
  2. 8 src/Controller/StatusController.php \Drupal\acquia_connector\Controller\StatusController

Checks the current status of the Acquia Service.

Hierarchy

Expanded class hierarchy of StatusController

2 files declare their use of StatusController
AcquiaConnectorModuleTest.php in tests/src/Functional/AcquiaConnectorModuleTest.php
AcquiaConnectorUnitTest.php in tests/src/Unit/AcquiaConnectorUnitTest.php
Contains \Drupal\Tests\acquia_connector\Unit\AcquiaConnectorUnitTest.

File

src/Controller/StatusController.php, line 15

Namespace

Drupal\acquia_connector\Controller
View source
class StatusController extends ControllerBase {

  /**
   * Menu callback for 'admin/config/system/acquia-agent/refresh-status'.
   */
  public function refresh() {

    // Refresh subscription information, so we are sure about our update status.
    // We send a heartbeat here so that all of our status information gets
    // updated locally via the return data.
    $subscription = new Subscription();
    $subscription
      ->update();

    // Return to the setting pages (or destination).
    return $this
      ->redirect('system.status');
  }

  /**
   * Return JSON site status.
   *
   * Used by Acquia uptime monitoring.
   */
  public function json() {

    // We don't want this page cached.
    \Drupal::service('page_cache_kill_switch')
      ->trigger();
    $performance_config = $this
      ->config('system.performance');
    $data = [
      'version' => '1.0',
      'data' => [
        'maintenance_mode' => (bool) $this
          ->state()
          ->get('system.maintenance_mode'),
        'cache' => $performance_config
          ->get('cache.page.use_internal'),
        'block_cache' => FALSE,
      ],
    ];
    return new JsonResponse($data);
  }

  /**
   * Access callback for json() callback.
   */
  public function access() {
    $request = \Drupal::request();
    $nonce = $request
      ->get('nonce', FALSE);
    $connector_config = $this
      ->config('acquia_connector.settings');

    // If we don't have all the query params, leave now.
    if (!$nonce) {
      return AccessResultForbidden::forbidden();
    }
    $sub_data = $this
      ->state()
      ->get('acquia_subscription_data');
    $sub_uuid = $this
      ->getIdFromSub($sub_data);
    if (!empty($sub_uuid)) {
      $expected_hash = hash('sha1', "{$sub_uuid}:{$nonce}");

      // If the generated hash matches the hash from $_GET['key'], we're good.
      if ($request
        ->get('key', FALSE) === $expected_hash) {
        return AccessResultAllowed::allowed();
      }
    }

    // Log the request if validation failed and debug is enabled.
    if ($connector_config
      ->get('debug')) {
      $info = [
        'sub_data' => $sub_data,
        'sub_uuid_from_data' => $sub_uuid,
        'expected_hash' => $expected_hash,
        'get' => $request->query
          ->all(),
        'server' => $request->server
          ->all(),
        'request' => $request->request
          ->all(),
      ];
      $this
        ->getLogger('acquia_agent')
        ->notice('Site status request: @data', [
        '@data' => var_export($info, TRUE),
      ]);
    }
    return AccessResultForbidden::forbidden();
  }

  /**
   * Gets the subscription UUID from subscription data.
   *
   * @param array $sub_data
   *   An array of subscription data.
   *
   * @see acquia_agent_settings('acquia_subscription_data')
   *
   * @return string
   *   The UUID taken from the subscription data.
   */
  public function getIdFromSub(array $sub_data) {
    if (!empty($sub_data['uuid'])) {
      return $sub_data['uuid'];
    }

    // Otherwise, get this form the sub url.
    $url = UrlHelper::parse($sub_data['href']);
    $parts = explode('/', $url['path']);

    // Remove '/dashboard'.
    array_pop($parts);
    return end($parts);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create 46
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StatusController::access public function Access callback for json() callback.
StatusController::getIdFromSub public function Gets the subscription UUID from subscription data.
StatusController::json public function Return JSON site status.
StatusController::refresh public function Menu callback for 'admin/config/system/acquia-agent/refresh-status'.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.