From 9706987031f8ed516395bdee56c36dd5ca68afd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 22 Oct 2022 15:31:43 -0300 Subject: [PATCH] Move /messages HTTP headers to the JavaScriptMessagesController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- libraries/classes/Common.php | 20 ++----------------- .../JavaScriptMessagesController.php | 13 ++++++++++++ .../JavaScriptMessagesControllerTest.php | 11 ++++------ 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/libraries/classes/Common.php b/libraries/classes/Common.php index c1f8433a31..d525b2b36b 100644 --- a/libraries/classes/Common.php +++ b/libraries/classes/Common.php @@ -20,13 +20,10 @@ use function count; use function date_default_timezone_get; use function date_default_timezone_set; use function define; -use function defined; use function explode; use function extension_loaded; use function function_exists; -use function gmdate; use function hash_equals; -use function header; use function htmlspecialchars; use function implode; use function ini_get; @@ -44,7 +41,6 @@ use function register_shutdown_function; use function restore_error_handler; use function session_id; use function strlen; -use function time; use function trigger_error; use function urldecode; @@ -98,16 +94,6 @@ final class Common $isMinimumCommon = $isSetupPage || $route === '/import-status' || $route === '/url' || $route === '/messages'; - if ($route === '/messages') { - // Send correct type. - header('Content-Type: text/javascript; charset=UTF-8'); - // Cache output in client - // the nocache query parameter makes sure that this file is reloaded when config changes. - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT'); - - define('PMA_NO_SESSION', true); - } - $GLOBALS['containerBuilder'] = Core::getContainerBuilder(); /** @var ErrorHandler $errorHandler */ @@ -129,10 +115,8 @@ final class Common $config = $GLOBALS['containerBuilder']->get('config'); $GLOBALS['config'] = $config; - /** - * include session handling after the globals, to prevent overwriting - */ - if (! defined('PMA_NO_SESSION')) { + if ($route !== '/messages') { + // Include session handling after the globals, to prevent overwriting. Session::setUp($config, $errorHandler); } diff --git a/libraries/classes/Controllers/JavaScriptMessagesController.php b/libraries/classes/Controllers/JavaScriptMessagesController.php index 952b7671aa..98e2012855 100644 --- a/libraries/classes/Controllers/JavaScriptMessagesController.php +++ b/libraries/classes/Controllers/JavaScriptMessagesController.php @@ -6,8 +6,11 @@ namespace PhpMyAdmin\Controllers; use function __; use function _pgettext; +use function gmdate; +use function header; use function json_encode; use function json_last_error_msg; +use function time; /** * Exporting of translated messages from PHP to JavaScript. @@ -24,6 +27,7 @@ final class JavaScriptMessagesController public function __invoke(): void { + $this->setHTTPHeaders(); $messages = json_encode($this->messages); if ($messages === false) { echo '// Error when encoding messages: ' . json_last_error_msg(); @@ -34,6 +38,15 @@ final class JavaScriptMessagesController echo 'window.Messages = ' . $messages . ';'; } + private function setHTTPHeaders(): void + { + // Send correct type. + header('Content-Type: text/javascript; charset=UTF-8'); + // Cache output in client + // the nocache query parameter makes sure that this file is reloaded when config changes. + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT'); + } + /** * @return array */ diff --git a/test/classes/Controllers/JavaScriptMessagesControllerTest.php b/test/classes/Controllers/JavaScriptMessagesControllerTest.php index 49097f0c2b..b9cac1e3d2 100644 --- a/test/classes/Controllers/JavaScriptMessagesControllerTest.php +++ b/test/classes/Controllers/JavaScriptMessagesControllerTest.php @@ -8,9 +8,6 @@ use PhpMyAdmin\Controllers\JavaScriptMessagesController; use PHPUnit\Framework\TestCase; use function json_decode; -use function ob_end_clean; -use function ob_get_contents; -use function ob_start; use function strlen; use function substr; @@ -19,14 +16,14 @@ use function substr; */ class JavaScriptMessagesControllerTest extends TestCase { + /** + * @runInSeparateProcess + */ public function testIndex(): void { - ob_start(); (new JavaScriptMessagesController())(); - $actual = ob_get_contents(); - ob_end_clean(); + $actual = $this->getActualOutputForAssertion(); - $this->assertIsString($actual); $this->assertStringStartsWith('window.Messages = {', $actual); $this->assertStringEndsWith('};', $actual);