diff --git a/src/Controllers/Setup/ConfigController.php b/src/Controllers/Setup/ConfigController.php index 926c500afa..2a7078d973 100644 --- a/src/Controllers/Setup/ConfigController.php +++ b/src/Controllers/Setup/ConfigController.php @@ -4,22 +4,15 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Setup\ConfigGenerator; use function is_string; class ConfigController extends AbstractController { - /** - * @param mixed[] $params Request parameters - * - * @return string HTML - */ - public function __invoke(array $params): string + public function __invoke(ServerRequest $request): string { - $formset = isset($params['formset']) && is_string($params['formset']) ? $params['formset'] : ''; - $eol = isset($params['eol']) && $params['eol'] === 'win' ? 'win' : 'unix'; - $pages = $this->getPages(); static $hasCheckPageRefresh = false; @@ -30,11 +23,22 @@ class ConfigController extends AbstractController $config = ConfigGenerator::getConfigFile($this->config); return $this->template->render('setup/config/index', [ - 'formset' => $formset, + 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'pages' => $pages, - 'eol' => $eol, + 'eol' => $this->getEolParam($request->getQueryParam('eol')), 'config' => $config, 'has_check_page_refresh' => $hasCheckPageRefresh, ]); } + + private function getFormSetParam(mixed $formSetParam): string + { + return is_string($formSetParam) ? $formSetParam : ''; + } + + /** @psalm-return 'win'|'unix' */ + private function getEolParam(mixed $eolParam): string + { + return $eolParam === 'win' ? 'win' : 'unix'; + } } diff --git a/src/Controllers/Setup/FormController.php b/src/Controllers/Setup/FormController.php index e21314805e..3cbedd762f 100644 --- a/src/Controllers/Setup/FormController.php +++ b/src/Controllers/Setup/FormController.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config\Forms\Setup\SetupFormList; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\LanguageManager; use PhpMyAdmin\Setup\FormProcessing; @@ -15,18 +16,13 @@ use function ob_start; class FormController extends AbstractController { - /** - * @param mixed[] $params Request parameters - * - * @return string HTML - */ - public function __invoke(array $params): string + public function __invoke(ServerRequest $request): string { $pages = $this->getPages(); - $formset = isset($params['formset']) && is_string($params['formset']) ? $params['formset'] : ''; + $formSet = $this->getFormSetParam($request->getQueryParam('formset')); - $formClass = SetupFormList::get($formset); + $formClass = SetupFormList::get($formSet); if ($formClass === null) { return $this->template->render('error/generic', [ 'lang' => $GLOBALS['lang'] ?? 'en', @@ -41,10 +37,15 @@ class FormController extends AbstractController $page = ob_get_clean(); return $this->template->render('setup/form/index', [ - 'formset' => $formset, + 'formset' => $formSet, 'pages' => $pages, 'name' => $form::getName(), 'page' => $page, ]); } + + private function getFormSetParam(mixed $formSetParam): string + { + return is_string($formSetParam) ? $formSetParam : ''; + } } diff --git a/src/Controllers/Setup/HomeController.php b/src/Controllers/Setup/HomeController.php index 4866bd8299..be6d07ac5c 100644 --- a/src/Controllers/Setup/HomeController.php +++ b/src/Controllers/Setup/HomeController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config; use PhpMyAdmin\Config\ServerConfigChecks; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\LanguageManager; use PhpMyAdmin\Setup\Index; @@ -16,22 +17,15 @@ use function is_string; class HomeController extends AbstractController { - /** - * @param mixed[] $params Request parameters - * - * @return string HTML - */ - public function __invoke(array $params): string + public function __invoke(ServerRequest $request): string { - $formset = isset($params['formset']) && is_string($params['formset']) ? $params['formset'] : ''; - $pages = $this->getPages(); // message handling Index::messagesBegin(); // Check phpMyAdmin version - if (isset($params['version_check'])) { + if ($request->hasQueryParam('version_check')) { Index::versionCheck(); } @@ -86,7 +80,7 @@ class HomeController extends AbstractController } return $this->template->render('setup/home/index', [ - 'formset' => $formset, + 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'languages' => $languages, 'messages' => $messages, 'server_count' => $this->config->getServerCount(), @@ -98,4 +92,9 @@ class HomeController extends AbstractController : (Config::getInstance()->get('PMA_IS_WINDOWS') ? 'win' : 'unix'), ]); } + + private function getFormSetParam(mixed $formSetParam): string + { + return is_string($formSetParam) ? $formSetParam : ''; + } } diff --git a/src/Controllers/Setup/MainController.php b/src/Controllers/Setup/MainController.php index 71bc2703ff..17e47b44f1 100644 --- a/src/Controllers/Setup/MainController.php +++ b/src/Controllers/Setup/MainController.php @@ -56,24 +56,17 @@ final class MainController implements InvocableController } if ($page === 'form') { - return $response->write((new FormController($GLOBALS['ConfigFile'], $this->template))([ - 'formset' => $request->getQueryParam('formset'), - ])); + return $response->write((new FormController($GLOBALS['ConfigFile'], $this->template))($request)); } if ($page === 'config') { - return $response->write((new ConfigController($GLOBALS['ConfigFile'], $this->template))([ - 'formset' => $request->getQueryParam('formset'), - 'eol' => $request->getQueryParam('eol'), - ])); + return $response->write((new ConfigController($GLOBALS['ConfigFile'], $this->template))($request)); } if ($page === 'servers') { $controller = new ServersController($GLOBALS['ConfigFile'], $this->template); - /** @var mixed $mode */ - $mode = $request->getQueryParam('mode'); - if ($mode === 'remove' && $request->isPost()) { - $controller->destroy(['id' => $request->getQueryParam('id')]); + if ($request->getQueryParam('mode') === 'remove' && $request->isPost()) { + $controller->destroy($request); $response = $response->withStatus(StatusCodeInterface::STATUS_FOUND); return $response->withHeader( @@ -82,16 +75,9 @@ final class MainController implements InvocableController ); } - return $response->write($controller->index([ - 'formset' => $request->getQueryParam('formset'), - 'mode' => $mode, - 'id' => $request->getQueryParam('id'), - ])); + return $response->write($controller->index($request)); } - return $response->write((new HomeController($GLOBALS['ConfigFile'], $this->template))([ - 'formset' => $request->getQueryParam('formset'), - 'version_check' => $request->getQueryParam('version_check'), - ])); + return $response->write((new HomeController($GLOBALS['ConfigFile'], $this->template))($request)); } } diff --git a/src/Controllers/Setup/ServersController.php b/src/Controllers/Setup/ServersController.php index a935596496..a47ff27e91 100644 --- a/src/Controllers/Setup/ServersController.php +++ b/src/Controllers/Setup/ServersController.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Setup; use PhpMyAdmin\Config\Forms\Setup\ServersForm; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Setup\FormProcessing; use function in_array; @@ -15,19 +16,10 @@ use function ob_start; class ServersController extends AbstractController { - /** - * @param mixed[] $params Request parameters - * - * @return string HTML - */ - public function index(array $params): string + public function index(ServerRequest $request): string { - $formset = isset($params['formset']) && is_string($params['formset']) ? $params['formset'] : ''; - $id = isset($params['id']) && is_numeric($params['id']) && (int) $params['id'] >= 1 ? (int) $params['id'] : 0; - $mode = ''; - if (isset($params['mode']) && in_array($params['mode'], ['add', 'edit', 'revert'], true)) { - $mode = $params['mode']; - } + $id = $this->getIdParam($request->getQueryParam('id')); + $mode = $this->getModeParam($request->getQueryParam('mode')); $pages = $this->getPages(); @@ -42,7 +34,7 @@ class ServersController extends AbstractController $page = ob_get_clean(); return $this->template->render('setup/servers/index', [ - 'formset' => $formset, + 'formset' => $this->getFormSetParam($request->getQueryParam('formset')), 'pages' => $pages, 'has_server' => $hasServer, 'mode' => $mode, @@ -52,17 +44,37 @@ class ServersController extends AbstractController ]); } - /** @param mixed[] $params Request parameters */ - public function destroy(array $params): void + public function destroy(ServerRequest $request): void { - $id = isset($params['id']) && is_numeric($params['id']) && (int) $params['id'] >= 1 ? (int) $params['id'] : 0; - + $id = $this->getIdParam($request->getQueryParam('id')); $hasServer = $id >= 1 && $this->config->get('Servers/' . $id) !== null; - if (! $hasServer) { return; } $this->config->removeServer($id); } + + private function getFormSetParam(mixed $formSetParam): string + { + return is_string($formSetParam) ? $formSetParam : ''; + } + + /** @psalm-return 'add'|'edit'|'revert'|'' */ + private function getModeParam(mixed $modeParam): string + { + return in_array($modeParam, ['add', 'edit', 'revert'], true) ? $modeParam : ''; + } + + /** @psalm-return int<0, max> */ + private function getIdParam(mixed $idParam): int + { + if (! is_numeric($idParam)) { + return 0; + } + + $id = (int) $idParam; + + return $id >= 1 ? $id : 0; + } }