View source
<?php
namespace Drupal\system_status\Controller;
use Drupal\Component\Serialization\Yaml;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Extension\ThemeHandlerInterface;
use Drupal\system_status\Services\SystemStatusEncryption;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
class SystemStatusController extends ControllerBase {
protected $moduleHandler;
protected $themeHandler;
protected $encrypt;
public static function create(ContainerInterface $container) {
return new static($container
->get('module_handler'), $container
->get('theme_handler'), $container
->get('system_status.encrypt'));
}
public function __construct(ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, SystemStatusEncryption $encrypt) {
$this->moduleHandler = $module_handler;
$this->themeHandler = $theme_handler;
$this->encrypt = $encrypt;
}
public function load($system_status_token) {
$res = [
"core" => [],
"contrib" => [],
"theme" => [],
];
$drupal_modules = $this->moduleHandler
->getModuleList();
$drupal_themes = $this->themeHandler
->listInfo();
foreach ($drupal_modules as $name => $module) {
$filename = $module
->getPath() . '/' . $module
->getFilename();
$module_info = Yaml::decode(file_get_contents($filename));
if (isset($module_info['version']) && $module_info['version'] == "VERSION") {
$module_info['version'] = \Drupal::VERSION;
}
if (!isset($module_info['version'])) {
$module_info['version'] = NULL;
}
if ($name == "system" && $module_info['package'] == "Core") {
$res['core']['drupal'] = [
"version" => $module_info['version'],
];
}
if (isset($module_info['package']) && $module_info['package'] == "Core" || isset($module_info['package']) && $module_info['package'] == "Field types" || isset($module_info['project']) && $module_info['project'] == 'drupal') {
continue;
}
if (isset($module_info['project'])) {
$res['contrib'][$module_info['project']] = [
"version" => $module_info['version'],
];
}
else {
$res['contrib'][$name] = [
"version" => $module_info['version'],
];
}
}
foreach ($drupal_themes as $name => $theme) {
$filename = $theme
->getPath() . '/' . $theme
->getFilename();
$theme_info = Yaml::decode(file_get_contents($filename));
if (!isset($theme_info['version'])) {
$theme_info['version'] = NULL;
}
if ($theme_info['version'] == "VERSION") {
$theme_info['version'] = \Drupal::VERSION;
}
if (isset($theme_info['project']) && $theme_info['project'] == 'drupal') {
continue;
}
if (isset($theme_info['project'])) {
$res['theme'][$theme_info['project']] = [
"version" => $theme_info['version'],
];
}
else {
$res['theme'][$name] = [
"version" => $theme_info['version'],
];
}
}
$config = $this
->config('system_status.settings');
if (function_exists('openssl_random_pseudo_bytes')) {
$res = SystemStatusEncryption::encryptOpenssl(json_encode([
"system_status" => $res,
]));
return new JsonResponse([
"system_status" => "encrypted_openssl",
"data" => $res,
"drupal_version" => "8",
"engine_version" => "DRUPAL8",
"php_version" => phpversion(),
]);
}
elseif (extension_loaded('mcrypt')) {
$res = SystemStatusEncryption::encryptMcrypt(json_encode([
"system_status" => $res,
]));
return new JsonResponse([
"system_status" => "encrypted",
"data" => $res,
"drupal_version" => "8",
"engine_version" => "DRUPAL8",
"php_version" => phpversion(),
]);
}
else {
return new JsonResponse([
"system_status" => $res,
"drupal_version" => "8",
"engine_version" => "DRUPAL8",
"php_version" => phpversion(),
]);
}
}
public function access($system_status_token) {
$token = $this
->config('system_status.settings')
->get('system_status_token');
if ($token == $system_status_token) {
return AccessResult::allowed();
}
else {
return AccessResult::forbidden();
}
}
}