removeInstallToolEnableFilesIfRequested($request);
}
return [
'installToolProtection' => $this->getInstallToolProtectionStatus($request),
'serverResponseStatus' => GeneralUtility::makeInstance(ServerResponseCheck::class)->asStatus($request),
];
}
public function getLabel(): string
{
return 'security';
}
/**
* Checks for the existence of the ENABLE_INSTALL_TOOL file.
*
* @return Status An object representing whether ENABLE_INSTALL_TOOL exists
*/
private function getInstallToolProtectionStatus(?ServerRequestInterface $request): Status
{
$enableInstallToolFile = EnableFileService::getBestLocationForInstallToolEnableFile();
// @todo: Note $this->getLanguageService() is declared to allow null. Calling ->sL() may fatal?!
$value = $this->getLanguageService()->sL('LLL:EXT:reports/Resources/Private/Language/locallang_reports.xlf:status_disabled');
$message = '';
$severity = ContextualFeedbackSeverity::OK;
if (EnableFileService::installToolEnableFileExists()) {
if (EnableFileService::isInstallToolEnableFilePermanent()) {
$severity = ContextualFeedbackSeverity::WARNING;
$disableInstallToolUrl = $request?->getAttribute('normalizedParams')?->getRequestUrl() . '&adminCmd=remove_ENABLE_INSTALL_TOOL';
$value = $this->getLanguageService()->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_enabledPermanently');
$message = sprintf(
$this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.install_enabled'),
'' . $enableInstallToolFile . ''
);
$message .= ' '
. $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.install_enabled_cmd') . '';
} else {
if (EnableFileService::installToolEnableFileLifetimeExpired()) {
EnableFileService::removeInstallToolEnableFile();
} else {
$severity = ContextualFeedbackSeverity::NOTICE;
$disableInstallToolUrl = $request?->getAttribute('normalizedParams')?->getRequestUrl() . '&adminCmd=remove_ENABLE_INSTALL_TOOL';
$value = $this->getLanguageService()->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_enabledTemporarily');
$message = sprintf(
$this->getLanguageService()->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_installEnabledTemporarily'),
'' . $enableInstallToolFile . '',
floor((@filemtime($enableInstallToolFile) + EnableFileService::INSTALL_TOOL_ENABLE_FILE_LIFETIME - time()) / 60)
);
$message .= ' '
. $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.install_enabled_cmd') . '';
}
}
}
return new Status(
$this->getLanguageService()->sL('LLL:EXT:install/Resources/Private/Language/Report/locallang.xlf:status_installTool'),
$value,
$message,
$severity
);
}
private function removeInstallToolEnableFilesIfRequested(ServerRequestInterface $request): void
{
// @todo: This should of course be a POST-only call! No idea how, but it should be.
// Also, the EnableFileService is pretty ugly nowadays, since it can handle
// multiple file locations, but does not reflect this in its methods properly.
// Thankfully, EnableFileService is @internal, so all this could be cleaned up
// without being breaking ...
if (($request->getQueryParams()['adminCmd'] ?? '') === 'remove_ENABLE_INSTALL_TOOL') {
EnableFileService::removeInstallToolEnableFile();
}
}
private function getLanguageService(): ?LanguageService
{
return $GLOBALS['LANG'] ?? null;
}
}