From eebbd6b3f16f8ef7eef8f7512dcf67240167406c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 15 Aug 2023 13:50:24 -0300 Subject: [PATCH] Create the ServerConfigurationChecking middleware MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- libraries/classes/Application.php | 27 ++-------- .../ServerConfigurationChecking.php | 52 +++++++++++++++++++ 2 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 libraries/classes/Middleware/ServerConfigurationChecking.php diff --git a/libraries/classes/Application.php b/libraries/classes/Application.php index 8293fc79ed..55d7bbf63d 100644 --- a/libraries/classes/Application.php +++ b/libraries/classes/Application.php @@ -25,6 +25,7 @@ use PhpMyAdmin\Identifiers\TableName; use PhpMyAdmin\Middleware\ErrorHandling; use PhpMyAdmin\Middleware\OutputBuffering; use PhpMyAdmin\Middleware\PhpExtensionsChecking; +use PhpMyAdmin\Middleware\ServerConfigurationChecking; use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\Plugins\AuthenticationPluginFactory; use PhpMyAdmin\Routing\Routing; @@ -79,10 +80,13 @@ class Application public function run(bool $isSetupPage = false): void { + $GLOBALS['errorHandler'] = $this->errorHandler; + $requestHandler = new QueueRequestHandler(new ApplicationHandler($this)); $requestHandler->add(new ErrorHandling($this->errorHandler)); $requestHandler->add(new OutputBuffering()); $requestHandler->add(new PhpExtensionsChecking($this, $this->template, $this->responseFactory)); + $requestHandler->add(new ServerConfigurationChecking($this->template, $this->responseFactory)); $runner = new RequestHandlerRunner( $requestHandler, @@ -105,13 +109,6 @@ class Application { $isSetupPage = (bool) $request->getAttribute('isSetupPage'); - $GLOBALS['errorHandler'] = $this->errorHandler; - - $resultOfServerConfigurationCheck = $this->checkServerConfiguration(); - if ($resultOfServerConfigurationCheck !== null) { - return $this->getGenericErrorResponse($resultOfServerConfigurationCheck); - } - $this->configurePhpSettings(); try { @@ -500,22 +497,6 @@ class Application $container->setParameter('url_params', $GLOBALS['urlParams']); } - /** - * Check whether PHP configuration matches our needs. - */ - private function checkServerConfiguration(): string|null - { - /** - * The ini_set and ini_get functions can be disabled using - * disable_functions but we're relying quite a lot of them. - */ - if (function_exists('ini_get') && function_exists('ini_set')) { - return null; - } - - return __('The ini_get and/or ini_set functions are disabled in php.ini. phpMyAdmin requires these functions!'); - } - /** * Checks request and fails with fatal error if something problematic is found */ diff --git a/libraries/classes/Middleware/ServerConfigurationChecking.php b/libraries/classes/Middleware/ServerConfigurationChecking.php new file mode 100644 index 0000000000..a094730c39 --- /dev/null +++ b/libraries/classes/Middleware/ServerConfigurationChecking.php @@ -0,0 +1,52 @@ +handle($request); + } + + // Disables template caching because the cache directory is not known yet. + $this->template->disableCache(); + $message = __( + 'The ini_get and/or ini_set functions are disabled in php.ini. phpMyAdmin requires these functions!', + ); + $response = $this->responseFactory->createResponse(StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR); + + return $response->write($this->template->render('error/generic', [ + 'lang' => 'en', + 'dir' => 'ltr', + 'error_message' => $message, + ])); + } +}