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; } }