class DefaultController in Warden 8
Same name and namespace in other branches
- 8.2 src/Controller/DefaultController.php \Drupal\warden\Controller\DefaultController
- 3.x src/Controller/DefaultController.php \Drupal\warden\Controller\DefaultController
Default controller for the warden module.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\warden\Controller\DefaultController
Expanded class hierarchy of DefaultController
File
- src/
Controller/ DefaultController.php, line 16
Namespace
Drupal\warden\ControllerView source
class DefaultController extends ControllerBase {
/**
* Warden manager service.
*
* @var WardenManager
*/
protected $wardenManager;
/**
* @var Config
*/
protected $wardenConfig;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
/** @var WardenManager $warden_manager */
$warden_manager = $container
->get('warden.manager');
/** @var ConfigFactory $config_factory */
$config_factory = $container
->get('config.factory');
$warden_settings = $config_factory
->get('warden.settings');
return new static($warden_manager, $warden_settings);
}
/**
* @param WardenManager $wardenManager
* The Warden Manager service
* @param Config $wardenConfig
* The config where all the Warden settings are storied.
*/
public function __construct(WardenManager $wardenManager, Config $wardenConfig) {
$this->wardenManager = $wardenManager;
$this->wardenConfig = $wardenConfig;
}
/**
* @return \Drupal\Core\Config\Config
*/
public function getWardenConfig() {
return $this->wardenConfig;
}
/**
* @return WardenManager
*/
public function getWardenManager() {
return $this->wardenManager;
}
/**
* Warden registration form.
*
* @return array
*/
public function wardenRegistration() {
$build = [];
$warden_path = $this
->getWardenConfig()
->get('warden_server_host_path');
if (empty($warden_path)) {
drupal_set_message(t('You are missing some Warden configuration. Please read the README file for more details.'), 'error');
return [];
}
$build['local_token'] = [
'#markup' => '<p>' . t('Site security token: %token', [
'%token' => $this
->getWardenManager()
->getLocalToken(),
]) . '</p>',
];
$build['message'] = [
'#markup' => '<p>' . t('To add this site to your Warden dashboard click the button below. Read the README file which comes with the module for configuration information.') . '</p>',
];
$build['button'] = [
'#markup' => t('<a class="button" href="@url">Add this site to your Warden Dashboard</a>', array(
'@url' => $this
->generateWardenRegistrationRedirect(),
)),
];
return $build;
}
/**
* Generate a redirect to the Warden server for site registration.
*
* @return string
* @throws \Exception
* @throws \WardenApi\Exception\EncryptionException
*/
protected function generateWardenRegistrationRedirect() {
global $base_url;
$site_url = $base_url;
$site_url .= "|" . $this
->getWardenManager()
->getLocalToken();
$site_url_encrypted = $this
->getWardenManager()
->encrypt($site_url);
$site_host_path = $this
->getWardenConfig()
->get('warden_server_host_path');
return $site_host_path . '/sites/add?data=' . $site_url_encrypted;
}
/**
* Access control to ensure authorised requests to get system data.
*
* @return AccessResult
* @throws \Exception
*/
public function wardenAccess() {
$allow_requests = $this
->getWardenConfig()
->get('warden_allow_requests');
if (empty($allow_requests)) {
\Drupal::logger('warden')
->warning('Update request denied: warden_allow_requests is set to FALSE', []);
return AccessResult::forbidden();
}
if (empty($_POST) || empty($_POST['token'])) {
\Drupal::logger('warden')
->warning('Update request denied: request body is empty or missing the security token', []);
return AccessResult::forbidden();
}
if (!$this
->getWardenManager()
->isValidWardenToken($_POST['token'], REQUEST_TIME)) {
\Drupal::logger('warden')
->warning('Update request denied: Failed to validate security token in request at timestamp @time', [
'@time' => REQUEST_TIME,
]);
return AccessResult::forbidden();
}
$allowed_ips = $this
->getWardenConfig()
->get('warden_public_allow_ips');
if (!empty($allowed_ips)) {
$ip_address = \Drupal::request()
->getClientIp();
$allowed_ips = explode(',', $this
->getWardenConfig()
->get('warden_public_allow_ips'));
foreach ($allowed_ips as &$address) {
if ($ip_address === $address) {
return AccessResult::allowed();
}
}
// No IP addresses match.
\Drupal::logger('warden')
->warning('Update request denied: The requesting IP is not in the warden_public_allow_ips whitelist - @ip', [
'@ip' => $ip_address,
]);
return AccessResult::forbidden();
}
return AccessResult::allowed();
}
/**
* Routing callback to retrieve the data stored on the site.
*
* @return JsonResponse
*/
public function wardenStatus() {
\Drupal::service('page_cache_kill_switch')
->trigger();
$response = new JsonResponse();
try {
$this
->getWardenManager()
->updateWarden();
$response
->setData([
'data' => 'OK',
]);
} catch (\Exception $e) {
watchdog_exception('warden', $e);
$response
->setStatusCode(500);
$response
->setData([
'error' => 'Internal fault',
]);
}
return $response;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
DefaultController:: |
protected | property | ||
DefaultController:: |
protected | property | Warden manager service. | |
DefaultController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
DefaultController:: |
protected | function | Generate a redirect to the Warden server for site registration. | |
DefaultController:: |
public | function | ||
DefaultController:: |
public | function | ||
DefaultController:: |
public | function | Access control to ensure authorised requests to get system data. | |
DefaultController:: |
public | function | Warden registration form. | |
DefaultController:: |
public | function | Routing callback to retrieve the data stored on the site. | |
DefaultController:: |
public | function | ||
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |