From 0a681ea9ed7dc04701746012636aa20477211105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 11 May 2024 15:25:06 -0300 Subject: [PATCH] Make all setup controllers implement InvocableController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- app/services_controllers.php | 2 +- src/Controllers/Setup/ConfigController.php | 24 +++++++++---- src/Controllers/Setup/FormController.php | 28 ++++++++++----- src/Controllers/Setup/HomeController.php | 24 +++++++++---- src/Controllers/Setup/MainController.php | 35 ++++++------------- .../Setup/ServerDestroyController.php | 30 +++++++++++++--- src/Controllers/Setup/ServersController.php | 24 +++++++++---- 7 files changed, 110 insertions(+), 57 deletions(-) diff --git a/app/services_controllers.php b/app/services_controllers.php index d8983f7e2a..167bc5c7ab 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -869,7 +869,7 @@ return [ ], Setup\MainController::class => [ 'class' => Setup\MainController::class, - 'arguments' => ['@' . ResponseFactory::class, '@template', '@console'], + 'arguments' => ['@' . ResponseFactory::class, '@response', '@template'], ], Setup\ShowConfigController::class => [ 'class' => Setup\ShowConfigController::class, diff --git a/src/Controllers/Setup/ConfigController.php b/src/Controllers/Setup/ConfigController.php index a136e88089..12e6a7857f 100644 --- a/src/Controllers/Setup/ConfigController.php +++ b/src/Controllers/Setup/ConfigController.php @@ -4,21 +4,33 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; +use PhpMyAdmin\Controllers\InvocableController; +use PhpMyAdmin\Http\Factory\ResponseFactory; +use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Setup\ConfigGenerator; use PhpMyAdmin\Setup\SetupHelper; use PhpMyAdmin\Template; use function is_string; -final class ConfigController +final class ConfigController implements InvocableController { - public function __construct(private readonly Template $template) - { + public function __construct( + private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, + private readonly Template $template, + ) { } - public function __invoke(ServerRequest $request): string + public function __invoke(ServerRequest $request): Response { + $response = $this->responseFactory->createResponse(); + foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + $pages = SetupHelper::getPages(); static $hasCheckPageRefresh = false; @@ -30,13 +42,13 @@ final class ConfigController $config = ConfigGenerator::getConfigFile($configFile); - return $this->template->render('setup/config/index', [ + return $response->write($this->template->render('setup/config/index', [ 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'pages' => $pages, 'eol' => $this->getEolParam($request->getQueryParam('eol')), 'config' => $config, 'has_check_page_refresh' => $hasCheckPageRefresh, - ]); + ])); } private function getFormSetParam(mixed $formSetParam): string diff --git a/src/Controllers/Setup/FormController.php b/src/Controllers/Setup/FormController.php index 874fb07569..2eed3ac88a 100644 --- a/src/Controllers/Setup/FormController.php +++ b/src/Controllers/Setup/FormController.php @@ -5,8 +5,12 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config\Forms\Setup\SetupFormList; +use PhpMyAdmin\Controllers\InvocableController; +use PhpMyAdmin\Http\Factory\ResponseFactory; +use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\LanguageManager; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Setup\FormProcessing; use PhpMyAdmin\Setup\SetupHelper; use PhpMyAdmin\Template; @@ -16,25 +20,33 @@ use function is_string; use function ob_get_clean; use function ob_start; -final class FormController +final class FormController implements InvocableController { - public function __construct(private readonly Template $template) - { + public function __construct( + private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, + private readonly Template $template, + ) { } - public function __invoke(ServerRequest $request): string + public function __invoke(ServerRequest $request): Response { + $response = $this->responseFactory->createResponse(); + foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + $pages = SetupHelper::getPages(); $formSet = $this->getFormSetParam($request->getQueryParam('formset')); $formClass = SetupFormList::get($formSet); if ($formClass === null) { - return $this->template->render('error/generic', [ + return $response->write($this->template->render('error/generic', [ 'lang' => $GLOBALS['lang'] ?? 'en', 'dir' => LanguageManager::$textDir, 'error_message' => __('Incorrect form specified!'), - ]); + ])); } $configFile = SetupHelper::createConfigFile(); @@ -44,12 +56,12 @@ final class FormController FormProcessing::process($form); $page = ob_get_clean(); - return $this->template->render('setup/form/index', [ + return $response->write($this->template->render('setup/form/index', [ 'formset' => $formSet, 'pages' => $pages, 'name' => $form::getName(), 'page' => $page, - ]); + ])); } private function getFormSetParam(mixed $formSetParam): string diff --git a/src/Controllers/Setup/HomeController.php b/src/Controllers/Setup/HomeController.php index 0f44fc140e..e9188326cf 100644 --- a/src/Controllers/Setup/HomeController.php +++ b/src/Controllers/Setup/HomeController.php @@ -6,8 +6,12 @@ namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config; use PhpMyAdmin\Config\ServerConfigChecks; +use PhpMyAdmin\Controllers\InvocableController; +use PhpMyAdmin\Http\Factory\ResponseFactory; +use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\LanguageManager; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Setup\Index; use PhpMyAdmin\Setup\SetupHelper; use PhpMyAdmin\Template; @@ -17,14 +21,22 @@ use function array_keys; use function is_scalar; use function is_string; -final class HomeController +final class HomeController implements InvocableController { - public function __construct(private readonly Template $template) - { + public function __construct( + private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, + private readonly Template $template, + ) { } - public function __invoke(ServerRequest $request): string + public function __invoke(ServerRequest $request): Response { + $response = $this->responseFactory->createResponse(); + foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + $pages = SetupHelper::getPages(); // message handling @@ -87,7 +99,7 @@ final class HomeController $hasCheckPageRefresh = true; } - return $this->template->render('setup/home/index', [ + return $response->write($this->template->render('setup/home/index', [ 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'languages' => $languages, 'messages' => $messages, @@ -98,7 +110,7 @@ final class HomeController 'eol' => isset($_SESSION['eol']) && is_scalar($_SESSION['eol']) ? $_SESSION['eol'] : (Config::getInstance()->get('PMA_IS_WINDOWS') ? 'win' : 'unix'), - ]); + ])); } private function getFormSetParam(mixed $formSetParam): string diff --git a/src/Controllers/Setup/MainController.php b/src/Controllers/Setup/MainController.php index 64a90d9610..287b6072e9 100644 --- a/src/Controllers/Setup/MainController.php +++ b/src/Controllers/Setup/MainController.php @@ -6,15 +6,13 @@ namespace PhpMyAdmin\Controllers\Setup; use Fig\Http\Message\StatusCodeInterface; use PhpMyAdmin\Config; -use PhpMyAdmin\Console; use PhpMyAdmin\Controllers\InvocableController; -use PhpMyAdmin\Header; use PhpMyAdmin\Http\Factory\ResponseFactory; use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\LanguageManager; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; -use PhpMyAdmin\Url; use function __; use function file_exists; @@ -26,8 +24,8 @@ final class MainController implements InvocableController { public function __construct( private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, private readonly Template $template, - private readonly Console $console, ) { } @@ -48,35 +46,22 @@ final class MainController implements InvocableController $pageParam = $request->getQueryParam('page'); $page = in_array($pageParam, ['form', 'config', 'servers'], true) ? $pageParam : 'index'; - $response = $this->responseFactory->createResponse(); - $header = new Header($this->template, $this->console, $config); - foreach ($header->getHttpHeaders() as $name => $value) { - // Sent security-related headers - $response = $response->withHeader($name, $value); - } - if ($page === 'form') { - return $response->write((new FormController($this->template))($request)); + return (new FormController($this->responseFactory, $this->responseRenderer, $this->template))($request); } if ($page === 'config') { - return $response->write((new ConfigController($this->template))($request)); + return (new ConfigController($this->responseFactory, $this->responseRenderer, $this->template))($request); + } + + if ($page === 'servers' && $request->getQueryParam('mode') === 'remove' && $request->isPost()) { + return (new ServerDestroyController($this->responseFactory, $this->responseRenderer))($request); } if ($page === 'servers') { - if ($request->getQueryParam('mode') === 'remove' && $request->isPost()) { - (new ServerDestroyController())($request); - $response = $response->withStatus(StatusCodeInterface::STATUS_FOUND); - - return $response->withHeader( - 'Location', - '../setup/index.php' . Url::getCommonRaw(['route' => '/setup']), - ); - } - - return $response->write((new ServersController($this->template))($request)); + return (new ServersController($this->responseFactory, $this->responseRenderer, $this->template))($request); } - return $response->write((new HomeController($this->template))($request)); + return (new HomeController($this->responseFactory, $this->responseRenderer, $this->template))($request); } } diff --git a/src/Controllers/Setup/ServerDestroyController.php b/src/Controllers/Setup/ServerDestroyController.php index 5a0607c086..9cb0d3be2f 100644 --- a/src/Controllers/Setup/ServerDestroyController.php +++ b/src/Controllers/Setup/ServerDestroyController.php @@ -4,24 +4,44 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; +use Fig\Http\Message\StatusCodeInterface; +use PhpMyAdmin\Controllers\InvocableController; +use PhpMyAdmin\Http\Factory\ResponseFactory; +use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Setup\SetupHelper; +use PhpMyAdmin\Url; use function is_numeric; -final class ServerDestroyController +final class ServerDestroyController implements InvocableController { - public function __invoke(ServerRequest $request): void + public function __construct( + private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, + ) { + } + + public function __invoke(ServerRequest $request): Response { + $response = $this->responseFactory->createResponse(); + foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + $configFile = SetupHelper::createConfigFile(); $id = $this->getIdParam($request->getQueryParam('id')); $hasServer = $id >= 1 && $configFile->get('Servers/' . $id) !== null; - if (! $hasServer) { - return; + if ($hasServer) { + $configFile->removeServer($id); } - $configFile->removeServer($id); + return $response->withStatus(StatusCodeInterface::STATUS_FOUND)->withHeader( + 'Location', + '../setup/index.php' . Url::getCommonRaw(['route' => '/setup']), + ); } /** @psalm-return int<0, max> */ diff --git a/src/Controllers/Setup/ServersController.php b/src/Controllers/Setup/ServersController.php index 00fee14e98..20a50bf49c 100644 --- a/src/Controllers/Setup/ServersController.php +++ b/src/Controllers/Setup/ServersController.php @@ -5,7 +5,11 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config\Forms\Setup\ServersForm; +use PhpMyAdmin\Controllers\InvocableController; +use PhpMyAdmin\Http\Factory\ResponseFactory; +use PhpMyAdmin\Http\Response; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Setup\FormProcessing; use PhpMyAdmin\Setup\SetupHelper; use PhpMyAdmin\Template; @@ -16,14 +20,22 @@ use function is_string; use function ob_get_clean; use function ob_start; -final class ServersController +final class ServersController implements InvocableController { - public function __construct(private readonly Template $template) - { + public function __construct( + private readonly ResponseFactory $responseFactory, + private readonly ResponseRenderer $responseRenderer, + private readonly Template $template, + ) { } - public function __invoke(ServerRequest $request): string + public function __invoke(ServerRequest $request): Response { + $response = $this->responseFactory->createResponse(); + foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) { + $response = $response->withHeader($name, $value); + } + $configFile = SetupHelper::createConfigFile(); $id = $this->getIdParam($request->getQueryParam('id')); @@ -41,7 +53,7 @@ final class ServersController FormProcessing::process(new ServersForm($configFile, $id)); $page = ob_get_clean(); - return $this->template->render('setup/servers/index', [ + return $response->write($this->template->render('setup/servers/index', [ 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'pages' => $pages, 'has_server' => $hasServer, @@ -49,7 +61,7 @@ final class ServersController 'server_id' => $id, 'server_dsn' => $configFile->getServerDSN($id), 'page' => $page, - ]); + ])); } private function getFormSetParam(mixed $formSetParam): string