From eb3703882b697f36efe451ca9743c5a032bb3821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 6 Jun 2022 23:36:57 -0300 Subject: [PATCH] Move `Routing::getCurrentRoute` to `ServerRequest` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The route is retrieved from the request, so it makes sense to move the method to the Http\ServerRequest class. Signed-off-by: MaurĂ­cio Meneghini Fauth --- index.php | 7 +-- libraries/classes/Common.php | 3 +- .../Preferences/ExportController.php | 8 +-- .../Preferences/FeaturesController.php | 8 +-- .../Preferences/ImportController.php | 8 +-- .../Preferences/MainPanelController.php | 8 +-- .../Preferences/ManageController.php | 6 +- .../Preferences/NavigationController.php | 8 +-- .../Controllers/Preferences/SqlController.php | 8 +-- .../Preferences/TwoFactorController.php | 8 +-- .../Server/PrivilegesController.php | 6 +- .../Controllers/Table/RelationController.php | 8 +-- .../Table/Structure/AddIndexController.php | 5 +- .../Table/Structure/AddKeyController.php | 5 +- .../Structure/CentralColumnsAddController.php | 5 +- .../CentralColumnsRemoveController.php | 5 +- .../Table/Structure/FulltextController.php | 5 +- .../Structure/PartitioningController.php | 5 +- .../Table/Structure/PrimaryController.php | 5 +- .../Table/Structure/SaveController.php | 5 +- .../Table/Structure/SpatialController.php | 5 +- .../Table/Structure/UniqueController.php | 5 +- .../Controllers/Table/StructureController.php | 13 +++-- .../Controllers/UserPasswordController.php | 6 +- .../Controllers/View/CreateController.php | 5 +- libraries/classes/DatabaseInterface.php | 2 +- libraries/classes/Footer.php | 2 +- libraries/classes/Http/ServerRequest.php | 34 +++++++++++ libraries/classes/Menu.php | 6 +- .../Plugins/Auth/AuthenticationCookie.php | 6 +- libraries/classes/Routing.php | 27 +-------- libraries/classes/Server/Privileges.php | 20 ++++--- libraries/classes/Table/Indexes.php | 3 +- libraries/classes/UserPassword.php | 7 ++- .../Server/PrivilegesControllerTest.php | 5 +- .../Table/Structure/SaveControllerTest.php | 7 ++- .../Table/StructureControllerTest.php | 7 ++- test/classes/Http/ServerRequestTest.php | 50 ++++++++++++++++ test/classes/RoutingTest.php | 58 ------------------- test/classes/Server/PrivilegesTest.php | 16 +++-- 40 files changed, 216 insertions(+), 194 deletions(-) create mode 100644 test/classes/Http/ServerRequestTest.php diff --git a/index.php b/index.php index 9ce7de8b88..caa57cf210 100644 --- a/index.php +++ b/index.php @@ -37,9 +37,4 @@ require AUTOLOAD_FILE; Common::run(); -Routing::callControllerForRoute( - Common::getRequest(), - Routing::getCurrentRoute(), - Routing::getDispatcher(), - $GLOBALS['containerBuilder'] -); +Routing::callControllerForRoute(Common::getRequest(), Routing::getDispatcher(), $GLOBALS['containerBuilder']); diff --git a/libraries/classes/Common.php b/libraries/classes/Common.php index 6fe423be15..496e166a6c 100644 --- a/libraries/classes/Common.php +++ b/libraries/classes/Common.php @@ -93,8 +93,7 @@ final class Common $GLOBALS['token_mismatch'] = $GLOBALS['token_mismatch'] ?? null; $request = self::getRequest(); - - $route = Routing::getCurrentRoute(); + $route = $request->getRoute(); if ($route === '/import-status') { $GLOBALS['isMinimumCommon'] = true; diff --git a/libraries/classes/Controllers/Preferences/ExportController.php b/libraries/classes/Controllers/Preferences/ExportController.php index 8a2e7f2802..438c0810a8 100644 --- a/libraries/classes/Controllers/Preferences/ExportController.php +++ b/libraries/classes/Controllers/Preferences/ExportController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\ExportForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class ExportController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class ExportController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class ExportController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/FeaturesController.php b/libraries/classes/Controllers/Preferences/FeaturesController.php index e35458ec76..d4a8872d15 100644 --- a/libraries/classes/Controllers/Preferences/FeaturesController.php +++ b/libraries/classes/Controllers/Preferences/FeaturesController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\FeaturesForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class FeaturesController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class FeaturesController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class FeaturesController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/ImportController.php b/libraries/classes/Controllers/Preferences/ImportController.php index b17a23c562..4a45ef60b1 100644 --- a/libraries/classes/Controllers/Preferences/ImportController.php +++ b/libraries/classes/Controllers/Preferences/ImportController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\ImportForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class ImportController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class ImportController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class ImportController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/MainPanelController.php b/libraries/classes/Controllers/Preferences/MainPanelController.php index 38b615767d..428030bb78 100644 --- a/libraries/classes/Controllers/Preferences/MainPanelController.php +++ b/libraries/classes/Controllers/Preferences/MainPanelController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\MainForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class MainPanelController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class MainPanelController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class MainPanelController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/ManageController.php b/libraries/classes/Controllers/Preferences/ManageController.php index 8258ef2f8a..8ba5d5977e 100644 --- a/libraries/classes/Controllers/Preferences/ManageController.php +++ b/libraries/classes/Controllers/Preferences/ManageController.php @@ -11,9 +11,9 @@ use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Core; use PhpMyAdmin\File; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\ThemeManager; use PhpMyAdmin\UserPreferences; @@ -65,7 +65,7 @@ class ManageController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -79,7 +79,7 @@ class ManageController extends AbstractController $GLOBALS['params'] = $GLOBALS['params'] ?? null; $GLOBALS['query'] = $GLOBALS['query'] ?? null; - $route = Routing::getCurrentRoute(); + $route = $request->getRoute(); $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); diff --git a/libraries/classes/Controllers/Preferences/NavigationController.php b/libraries/classes/Controllers/Preferences/NavigationController.php index 8e8481c8d1..e6d3edc72f 100644 --- a/libraries/classes/Controllers/Preferences/NavigationController.php +++ b/libraries/classes/Controllers/Preferences/NavigationController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\NaviForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class NavigationController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class NavigationController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class NavigationController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/SqlController.php b/libraries/classes/Controllers/Preferences/SqlController.php index 9a5c0587fc..ff5573277e 100644 --- a/libraries/classes/Controllers/Preferences/SqlController.php +++ b/libraries/classes/Controllers/Preferences/SqlController.php @@ -9,8 +9,8 @@ use PhpMyAdmin\Config\ConfigFile; use PhpMyAdmin\Config\Forms\User\SqlForm; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; use PhpMyAdmin\Url; @@ -43,7 +43,7 @@ class SqlController extends AbstractController $this->config = $config; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['cf'] = $GLOBALS['cf'] ?? null; $GLOBALS['error'] = $GLOBALS['error'] ?? null; @@ -51,8 +51,6 @@ class SqlController extends AbstractController $GLOBALS['hash'] = $GLOBALS['hash'] ?? null; $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $route = Routing::getCurrentRoute(); - $GLOBALS['cf'] = new ConfigFile($this->config->baseSettings); $this->userPreferences->pageInit($GLOBALS['cf']); @@ -92,7 +90,7 @@ class SqlController extends AbstractController $relationParameters = $this->relation->getRelationParameters(); $this->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Preferences/TwoFactorController.php b/libraries/classes/Controllers/Preferences/TwoFactorController.php index 314e423dfe..7107d56ea5 100644 --- a/libraries/classes/Controllers/Preferences/TwoFactorController.php +++ b/libraries/classes/Controllers/Preferences/TwoFactorController.php @@ -6,9 +6,9 @@ namespace PhpMyAdmin\Controllers\Preferences; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\AbstractController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\TwoFactor; @@ -26,14 +26,12 @@ class TwoFactorController extends AbstractController $this->relation = $relation; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { - $route = Routing::getCurrentRoute(); - $relationParameters = $this->relation->getRelationParameters(); echo $this->template->render('preferences/header', [ - 'route' => $route, + 'route' => $request->getRoute(), 'is_saved' => ! empty($_GET['saved']), 'has_config_storage' => $relationParameters->userPreferencesFeature !== null, ]); diff --git a/libraries/classes/Controllers/Server/PrivilegesController.php b/libraries/classes/Controllers/Server/PrivilegesController.php index 41f16fb5a2..943c8e3741 100644 --- a/libraries/classes/Controllers/Server/PrivilegesController.php +++ b/libraries/classes/Controllers/Server/PrivilegesController.php @@ -11,6 +11,7 @@ use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Server\Plugins; @@ -49,7 +50,7 @@ class PrivilegesController extends AbstractController $this->dbi = $dbi; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null; $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -435,7 +436,8 @@ class PrivilegesController extends AbstractController $GLOBALS['username'], $GLOBALS['hostname'] ?? '', $GLOBALS['dbname'] ?? '', - $GLOBALS['tablename'] ?? '' + $GLOBALS['tablename'] ?? '', + $request->getRoute() ) ); } diff --git a/libraries/classes/Controllers/Table/RelationController.php b/libraries/classes/Controllers/Table/RelationController.php index 2c3b36a518..187d681d8f 100644 --- a/libraries/classes/Controllers/Table/RelationController.php +++ b/libraries/classes/Controllers/Table/RelationController.php @@ -11,9 +11,9 @@ use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Index; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Table; use PhpMyAdmin\Template; use PhpMyAdmin\Util; @@ -56,10 +56,8 @@ final class RelationController extends AbstractController /** * Index */ - public function __invoke(): void + public function __invoke(ServerRequest $request): void { - $route = Routing::getCurrentRoute(); - $options = [ 'CASCADE' => 'CASCADE', 'SET_NULL' => 'SET NULL', @@ -224,7 +222,7 @@ final class RelationController extends AbstractController 'databases' => $GLOBALS['dblist']->databases, 'dbi' => $this->dbi, 'default_sliders_state' => $GLOBALS['cfg']['InitialSlidersState'], - 'route' => $route, + 'route' => $request->getRoute(), 'display_field' => $this->relation->getDisplayField($GLOBALS['db'], $GLOBALS['table']), 'foreign_key_row' => $foreignKeyRow, ]); diff --git a/libraries/classes/Controllers/Table/Structure/AddIndexController.php b/libraries/classes/Controllers/Table/Structure/AddIndexController.php index e23d6a89f1..cc80e547b7 100644 --- a/libraries/classes/Controllers/Table/Structure/AddIndexController.php +++ b/libraries/classes/Controllers/Table/Structure/AddIndexController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -34,7 +35,7 @@ final class AddIndexController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -67,6 +68,6 @@ final class AddIndexController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/AddKeyController.php b/libraries/classes/Controllers/Table/Structure/AddKeyController.php index d115830d84..cd6df11488 100644 --- a/libraries/classes/Controllers/Table/Structure/AddKeyController.php +++ b/libraries/classes/Controllers/Table/Structure/AddKeyController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Sql\SqlController; use PhpMyAdmin\Controllers\Table\StructureController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -29,7 +30,7 @@ final class AddKeyController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['reload'] = $GLOBALS['reload'] ?? null; @@ -37,6 +38,6 @@ final class AddKeyController extends AbstractController $GLOBALS['reload'] = true; - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php b/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php index 30bb3878da..6607f36d0a 100644 --- a/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php +++ b/libraries/classes/Controllers/Table/Structure/CentralColumnsAddController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\Database\CentralColumns; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -32,7 +33,7 @@ final class CentralColumnsAddController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -55,6 +56,6 @@ final class CentralColumnsAddController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php b/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php index bdceb1ed99..aa1962d4bb 100644 --- a/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php +++ b/libraries/classes/Controllers/Table/Structure/CentralColumnsRemoveController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\Database\CentralColumns; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -32,7 +33,7 @@ final class CentralColumnsRemoveController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -55,6 +56,6 @@ final class CentralColumnsRemoveController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/FulltextController.php b/libraries/classes/Controllers/Table/Structure/FulltextController.php index 37192f9bba..d5fcbd3c67 100644 --- a/libraries/classes/Controllers/Table/Structure/FulltextController.php +++ b/libraries/classes/Controllers/Table/Structure/FulltextController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -34,7 +35,7 @@ final class FulltextController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -67,6 +68,6 @@ final class FulltextController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/PartitioningController.php b/libraries/classes/Controllers/Table/Structure/PartitioningController.php index fa5f2b7bea..6984903742 100644 --- a/libraries/classes/Controllers/Table/Structure/PartitioningController.php +++ b/libraries/classes/Controllers/Table/Structure/PartitioningController.php @@ -10,6 +10,7 @@ use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\CreateAddField; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\Partitioning\TablePartitionDefinition; use PhpMyAdmin\ResponseRenderer; @@ -51,12 +52,12 @@ final class PartitioningController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { if (isset($_POST['save_partitioning'])) { $this->dbi->selectDb($GLOBALS['db']); $this->updatePartitioning(); - ($this->structureController)(); + ($this->structureController)($request); return; } diff --git a/libraries/classes/Controllers/Table/Structure/PrimaryController.php b/libraries/classes/Controllers/Table/Structure/PrimaryController.php index 53c96ff47c..f77ed101e6 100644 --- a/libraries/classes/Controllers/Table/Structure/PrimaryController.php +++ b/libraries/classes/Controllers/Table/Structure/PrimaryController.php @@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\DbTableExists; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -36,7 +37,7 @@ final class PrimaryController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; $GLOBALS['urlParams'] = $GLOBALS['urlParams'] ?? null; @@ -106,7 +107,7 @@ final class PrimaryController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } /** diff --git a/libraries/classes/Controllers/Table/Structure/SaveController.php b/libraries/classes/Controllers/Table/Structure/SaveController.php index 02c94f20e2..56d8e2209f 100644 --- a/libraries/classes/Controllers/Table/Structure/SaveController.php +++ b/libraries/classes/Controllers/Table/Structure/SaveController.php @@ -10,6 +10,7 @@ use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Index; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; @@ -62,7 +63,7 @@ final class SaveController extends AbstractController $this->tableObj = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']); } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $regenerate = $this->updateColumns(); if (! $regenerate) { @@ -70,7 +71,7 @@ final class SaveController extends AbstractController unset($_POST['selected']); } - ($this->structureController)(); + ($this->structureController)($request); } /** diff --git a/libraries/classes/Controllers/Table/Structure/SpatialController.php b/libraries/classes/Controllers/Table/Structure/SpatialController.php index 46a35958d6..74ab766bc8 100644 --- a/libraries/classes/Controllers/Table/Structure/SpatialController.php +++ b/libraries/classes/Controllers/Table/Structure/SpatialController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -34,7 +35,7 @@ final class SpatialController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -67,6 +68,6 @@ final class SpatialController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/Structure/UniqueController.php b/libraries/classes/Controllers/Table/Structure/UniqueController.php index 56fc0ecba8..3767f834e9 100644 --- a/libraries/classes/Controllers/Table/Structure/UniqueController.php +++ b/libraries/classes/Controllers/Table/Structure/UniqueController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Structure; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -34,7 +35,7 @@ final class UniqueController extends AbstractController $this->structureController = $structureController; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; @@ -67,6 +68,6 @@ final class UniqueController extends AbstractController $GLOBALS['message'] = Message::success(); } - ($this->structureController)(); + ($this->structureController)($request); } } diff --git a/libraries/classes/Controllers/Table/StructureController.php b/libraries/classes/Controllers/Table/StructureController.php index a30fe2d295..820696b231 100644 --- a/libraries/classes/Controllers/Table/StructureController.php +++ b/libraries/classes/Controllers/Table/StructureController.php @@ -18,11 +18,11 @@ use PhpMyAdmin\DbTableExists; use PhpMyAdmin\Engines\Innodb; use PhpMyAdmin\FlashMessages; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Index; use PhpMyAdmin\Partitioning\Partition; use PhpMyAdmin\Query\Utilities; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\StorageEngine; use PhpMyAdmin\Table; use PhpMyAdmin\Template; @@ -86,7 +86,7 @@ class StructureController extends AbstractController $this->tableObj = $this->dbi->getTable($GLOBALS['db'], $GLOBALS['table']); } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['reread_info'] = $GLOBALS['reread_info'] ?? null; $GLOBALS['showtable'] = $GLOBALS['showtable'] ?? null; @@ -150,7 +150,8 @@ class StructureController extends AbstractController $primary, $fields, $columns_with_index, - $isSystemSchema + $isSystemSchema, + $request->getRoute() )); } @@ -161,6 +162,7 @@ class StructureController extends AbstractController * @param Index|false $primary_index primary index or false if no one exists * @param array $fields Fields * @param array $columns_with_index Columns with index + * @psalm-param non-empty-string $route * * @return string */ @@ -170,13 +172,12 @@ class StructureController extends AbstractController $primary_index, array $fields, array $columns_with_index, - bool $isSystemSchema + bool $isSystemSchema, + string $route ) { $GLOBALS['tbl_is_view'] = $GLOBALS['tbl_is_view'] ?? null; $GLOBALS['tbl_storage_engine'] = $GLOBALS['tbl_storage_engine'] ?? null; - $route = Routing::getCurrentRoute(); - // prepare comments $comments_map = []; $mime_map = []; diff --git a/libraries/classes/Controllers/UserPasswordController.php b/libraries/classes/Controllers/UserPasswordController.php index bc4acf8eec..0f126547c2 100644 --- a/libraries/classes/Controllers/UserPasswordController.php +++ b/libraries/classes/Controllers/UserPasswordController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; @@ -35,7 +36,7 @@ class UserPasswordController extends AbstractController $this->dbi = $dbi; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $GLOBALS['hostname'] = $GLOBALS['hostname'] ?? null; $GLOBALS['username'] = $GLOBALS['username'] ?? null; @@ -116,7 +117,8 @@ class UserPasswordController extends AbstractController $this->response->addHTML($this->userPassword->getFormForChangePassword( $GLOBALS['username'], - $GLOBALS['hostname'] + $GLOBALS['hostname'], + $request->getRoute() )); } } diff --git a/libraries/classes/Controllers/View/CreateController.php b/libraries/classes/Controllers/View/CreateController.php index de99e9967a..12a5a732ab 100644 --- a/libraries/classes/Controllers/View/CreateController.php +++ b/libraries/classes/Controllers/View/CreateController.php @@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\SqlParser\Parser; @@ -42,7 +43,7 @@ class CreateController extends AbstractController $this->dbi = $dbi; } - public function __invoke(): void + public function __invoke(ServerRequest $request): void { $this->checkParameters(['db']); $GLOBALS['text_dir'] = $GLOBALS['text_dir'] ?? null; @@ -204,7 +205,7 @@ class CreateController extends AbstractController $GLOBALS['message'] = Message::success(); /** @var StructureController $controller */ $controller = $GLOBALS['containerBuilder']->get(StructureController::class); - $controller(); + $controller($request); } else { $this->response->addJSON( 'message', diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php index 89a6a08e4d..7df2397651 100644 --- a/libraries/classes/DatabaseInterface.php +++ b/libraries/classes/DatabaseInterface.php @@ -244,7 +244,7 @@ class DatabaseInterface implements DbalInterface sprintf( 'SQL[%s?route=%s]: %0.3f(W:%d,C:%s,L:0x%02X) > %s', basename($_SERVER['SCRIPT_NAME']), - Routing::getCurrentRoute(), + Common::getRequest()->getRoute(), $this->lastQueryExecutionTime, $warningsCount, $cacheAffectedRows ? 'y' : 'n', diff --git a/libraries/classes/Footer.php b/libraries/classes/Footer.php index 879d467827..162995c817 100644 --- a/libraries/classes/Footer.php +++ b/libraries/classes/Footer.php @@ -141,7 +141,7 @@ class Footer $GLOBALS['server'] = $GLOBALS['server'] ?? null; $params = []; - $params['route'] = Routing::getCurrentRoute(); + $params['route'] = Common::getRequest()->getRoute(); if (isset($GLOBALS['db']) && strlen($GLOBALS['db']) > 0) { $params['db'] = $GLOBALS['db']; diff --git a/libraries/classes/Http/ServerRequest.php b/libraries/classes/Http/ServerRequest.php index 379371a73f..dc2f911deb 100644 --- a/libraries/classes/Http/ServerRequest.php +++ b/libraries/classes/Http/ServerRequest.php @@ -10,6 +10,7 @@ use Psr\Http\Message\UriInterface; use function is_array; use function is_object; +use function is_string; use function property_exists; class ServerRequest implements ServerRequestInterface @@ -339,4 +340,37 @@ class ServerRequest implements ServerRequestInterface { return $this->getMethod() === 'POST'; } + + /** + * @psalm-return non-empty-string + */ + public function getRoute(): string + { + $getParams = $this->getQueryParams(); + $postParams = $this->getParsedBody(); + $route = '/'; + if (isset($getParams['route']) && is_string($getParams['route']) && $getParams['route'] !== '') { + $route = $getParams['route']; + } elseif ( + is_array($postParams) + && isset($postParams['route']) + && is_string($postParams['route']) + && $postParams['route'] !== '' + ) { + $route = $postParams['route']; + } + + /** + * See FAQ 1.34. + * + * @see https://docs.phpmyadmin.net/en/latest/faq.html#faq1-34 + */ + $db = isset($getParams['db']) && is_string($getParams['db']) ? $getParams['db'] : ''; + if ($route === '/' && $db !== '') { + $table = isset($getParams['table']) && is_string($getParams['table']) ? $getParams['table'] : ''; + $route = $table === '' ? '/database/structure' : '/sql'; + } + + return $route; + } } diff --git a/libraries/classes/Menu.php b/libraries/classes/Menu.php index 6a5f6224b2..4d9bf22d81 100644 --- a/libraries/classes/Menu.php +++ b/libraries/classes/Menu.php @@ -218,7 +218,7 @@ class Menu */ private function getTableTabs(): array { - $route = Routing::getCurrentRoute(); + $route = Common::getRequest()->getRoute(); $isSystemSchema = Utilities::isSystemSchema($this->db); $tableIsView = $this->dbi->getTable($this->db, $this->table) @@ -337,7 +337,7 @@ class Menu */ private function getDbTabs(): array { - $route = Routing::getCurrentRoute(); + $route = Common::getRequest()->getRoute(); $isSystemSchema = Utilities::isSystemSchema($this->db); $numTables = count($this->dbi->getTables($this->db)); @@ -452,7 +452,7 @@ class Menu */ private function getServerTabs(): array { - $route = Routing::getCurrentRoute(); + $route = Common::getRequest()->getRoute(); $isSuperUser = $this->dbi->isSuperUser(); $isCreateOrGrantUser = $this->dbi->isGrantUser() || $this->dbi->isCreateUser(); diff --git a/libraries/classes/Plugins/Auth/AuthenticationCookie.php b/libraries/classes/Plugins/Auth/AuthenticationCookie.php index f125b2b59d..b4a0b0bfde 100644 --- a/libraries/classes/Plugins/Auth/AuthenticationCookie.php +++ b/libraries/classes/Plugins/Auth/AuthenticationCookie.php @@ -7,13 +7,13 @@ declare(strict_types=1); namespace PhpMyAdmin\Plugins\Auth; +use PhpMyAdmin\Common; use PhpMyAdmin\Config; use PhpMyAdmin\Core; use PhpMyAdmin\LanguageManager; use PhpMyAdmin\Message; use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Server\Select; use PhpMyAdmin\Session; use PhpMyAdmin\Url; @@ -148,7 +148,7 @@ class AuthenticationCookie extends AuthenticationPlugin } $_form_params = []; - $_form_params['route'] = Routing::getCurrentRoute(); + $_form_params['route'] = Common::getRequest()->getRoute(); if (strlen($GLOBALS['db'])) { $_form_params['db'] = $GLOBALS['db']; @@ -467,7 +467,7 @@ class AuthenticationCookie extends AuthenticationPlugin // any parameters to pass? $url_params = []; - $url_params['route'] = Routing::getCurrentRoute(); + $url_params['route'] = Common::getRequest()->getRoute(); if (strlen($GLOBALS['db']) > 0) { $url_params['db'] = $GLOBALS['db']; diff --git a/libraries/classes/Routing.php b/libraries/classes/Routing.php index d9677808cd..47f160f707 100644 --- a/libraries/classes/Routing.php +++ b/libraries/classes/Routing.php @@ -116,40 +116,15 @@ class Routing return @file_put_contents(self::ROUTES_CACHE_FILE, $cacheContents) !== false; } - /** - * @psalm-return non-empty-string - */ - public static function getCurrentRoute(): string - { - /** @var mixed $route */ - $route = $_GET['route'] ?? $_POST['route'] ?? '/'; - if (! is_string($route) || $route === '') { - $route = '/'; - } - - /** - * See FAQ 1.34. - * - * @see https://docs.phpmyadmin.net/en/latest/faq.html#faq1-34 - */ - $db = isset($_GET['db']) && is_string($_GET['db']) ? $_GET['db'] : ''; - if ($route === '/' && $db !== '') { - $table = isset($_GET['table']) && is_string($_GET['table']) ? $_GET['table'] : ''; - $route = $table === '' ? '/database/structure' : '/sql'; - } - - return $route; - } - /** * Call associated controller for a route using the dispatcher */ public static function callControllerForRoute( ServerRequest $request, - string $route, Dispatcher $dispatcher, ContainerInterface $container ): void { + $route = $request->getRoute(); $routeInfo = $dispatcher->dispatch($request->getMethod(), rawurldecode($route)); if ($routeInfo[0] === Dispatcher::NOT_FOUND) { diff --git a/libraries/classes/Server/Privileges.php b/libraries/classes/Server/Privileges.php index df4d8a2f77..ff1d329e51 100644 --- a/libraries/classes/Server/Privileges.php +++ b/libraries/classes/Server/Privileges.php @@ -19,7 +19,6 @@ use PhpMyAdmin\Html\MySQLDocumentation; use PhpMyAdmin\Message; use PhpMyAdmin\Query\Compatibility; use PhpMyAdmin\ResponseRenderer; -use PhpMyAdmin\Routing; use PhpMyAdmin\Template; use PhpMyAdmin\Url; use PhpMyAdmin\Util; @@ -3071,6 +3070,7 @@ class Privileges * @param string $hostname host name * @param string|array $dbname database name * @param string $tablename table name + * @psalm-param non-empty-string $route * * @return string */ @@ -3080,7 +3080,8 @@ class Privileges $username, $hostname, $dbname, - $tablename + $tablename, + string $route ) { $sql = "SELECT '1' FROM `mysql`.`user`" . " WHERE `User` = '" . $this->dbi->escapeString($username) . "'" @@ -3151,7 +3152,7 @@ class Privileges $changeLoginInfoFields = ''; if (! is_array($dbname) && strlen($dbname) === 0 && ! $userDoesNotExists) { //change login information - $changePassword = $this->getFormForChangePassword($username, $hostname, true); + $changePassword = $this->getFormForChangePassword($username, $hostname, true, $route); $userGroup = $this->getUserGroupForUser($username); $changeLoginInfoFields = $this->getHtmlForLoginInformationFields('change', $username, $hostname); } @@ -3701,10 +3702,15 @@ class Privileges return $this->parseProcPriv($privileges); } - public function getFormForChangePassword(string $username, string $hostname, bool $editOthers): string - { - $route = Routing::getCurrentRoute(); - + /** + * @psalm-param non-empty-string $route + */ + public function getFormForChangePassword( + string $username, + string $hostname, + bool $editOthers, + string $route + ): string { $isPrivileges = $route === '/server/privileges'; $serverVersion = $this->dbi->getVersion(); diff --git a/libraries/classes/Table/Indexes.php b/libraries/classes/Table/Indexes.php index ab6d601eef..8d1e460f2e 100644 --- a/libraries/classes/Table/Indexes.php +++ b/libraries/classes/Table/Indexes.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Table; +use PhpMyAdmin\Common; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; @@ -107,7 +108,7 @@ final class Indexes } else { /** @var StructureController $controller */ $controller = $GLOBALS['containerBuilder']->get(StructureController::class); - $controller(); + $controller(Common::getRequest()); } } else { $this->response->setRequestStatus(false); diff --git a/libraries/classes/UserPassword.php b/libraries/classes/UserPassword.php index ffe5ca4879..b15476c3d8 100644 --- a/libraries/classes/UserPassword.php +++ b/libraries/classes/UserPassword.php @@ -208,8 +208,11 @@ class UserPassword $GLOBALS['dbi']->tryQuery('FLUSH PRIVILEGES;'); } - public function getFormForChangePassword(?string $username, ?string $hostname): string + /** + * @psalm-param non-empty-string $route + */ + public function getFormForChangePassword(?string $username, ?string $hostname, string $route): string { - return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false); + return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false, $route); } } diff --git a/test/classes/Controllers/Server/PrivilegesControllerTest.php b/test/classes/Controllers/Server/PrivilegesControllerTest.php index 345aa9d24b..424a49ab7d 100644 --- a/test/classes/Controllers/Server/PrivilegesControllerTest.php +++ b/test/classes/Controllers/Server/PrivilegesControllerTest.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Tests\Controllers\Server; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\Server\PrivilegesController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\ResponseRenderer; @@ -54,8 +55,10 @@ class PrivilegesControllerTest extends AbstractTestCase ); // phpcs:enable + $request = $this->createStub(ServerRequest::class); + $response = new ResponseRenderer(); - (new PrivilegesController($response, new Template(), new Relation($this->dbi), $this->dbi))(); + (new PrivilegesController($response, new Template(), new Relation($this->dbi), $this->dbi))($request); $actual = $response->getHTMLResult(); $this->assertStringContainsString('User accounts overview', $actual); diff --git a/test/classes/Controllers/Table/Structure/SaveControllerTest.php b/test/classes/Controllers/Table/Structure/SaveControllerTest.php index b229833074..da2e80a4d7 100644 --- a/test/classes/Controllers/Table/Structure/SaveControllerTest.php +++ b/test/classes/Controllers/Table/Structure/SaveControllerTest.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Controllers\Table\Structure; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\Table\Structure\SaveController; use PhpMyAdmin\Controllers\Table\StructureController; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\ResponseRenderer; @@ -76,8 +77,10 @@ class SaveControllerTest extends AbstractTestCase ); $dbi = $this->createDatabaseInterface($dummyDbi); + $request = $this->createStub(ServerRequest::class); + $mock = $this->createMock(StructureController::class); - $mock->expects($this->once())->method('__invoke'); + $mock->expects($this->once())->method('__invoke')->with($request); (new SaveController( new ResponseRenderer(), @@ -86,7 +89,7 @@ class SaveControllerTest extends AbstractTestCase new Transformations(), $dbi, $mock - ))(); + ))($request); $this->assertArrayNotHasKey('selected', $_POST); } diff --git a/test/classes/Controllers/Table/StructureControllerTest.php b/test/classes/Controllers/Table/StructureControllerTest.php index 9ae2974a53..f3e6a2334d 100644 --- a/test/classes/Controllers/Table/StructureControllerTest.php +++ b/test/classes/Controllers/Table/StructureControllerTest.php @@ -10,6 +10,7 @@ use PhpMyAdmin\ConfigStorage\RelationCleanup; use PhpMyAdmin\Controllers\Table\StructureController; use PhpMyAdmin\CreateAddField; use PhpMyAdmin\FlashMessages; +use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Index; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; @@ -34,7 +35,6 @@ class StructureControllerTest extends AbstractTestCase $GLOBALS['cfg']['Server']['DisableIS'] = true; $GLOBALS['cfg']['ShowStats'] = false; $GLOBALS['cfg']['ShowPropertyComments'] = false; - $_GET['route'] = '/table/structure'; $_SESSION['relation'] = []; $this->dummyDbi->addSelectDb('test_db'); @@ -68,6 +68,9 @@ class StructureControllerTest extends AbstractTestCase $pageSettings = new PageSettings('TableStructure'); $fields = $this->dbi->getColumns($GLOBALS['db'], $GLOBALS['table'], true); + $request = $this->createStub(ServerRequest::class); + $request->method('getRoute')->willReturn('/table/structure'); + $response = new ResponseRenderer(); $relation = new Relation($this->dbi); $template = new Template(); @@ -80,7 +83,7 @@ class StructureControllerTest extends AbstractTestCase new RelationCleanup($this->dbi, $relation), $this->dbi, new FlashMessages() - ))(); + ))($request); $expected = $pageSettings->getHTML(); $expected .= $template->render('table/structure/display_structure', [ diff --git a/test/classes/Http/ServerRequestTest.php b/test/classes/Http/ServerRequestTest.php new file mode 100644 index 0000000000..3cabf9ba81 --- /dev/null +++ b/test/classes/Http/ServerRequestTest.php @@ -0,0 +1,50 @@ + $get + * @param array $post + * + * @dataProvider providerForTestGetRoute + */ + public function testGetRoute(string $expected, array $get, array $post): void + { + $requestStub = $this->createStub(ServerRequestInterface::class); + $requestStub->method('getQueryParams')->willReturn($get); + $requestStub->method('getParsedBody')->willReturn($post); + $request = new ServerRequest($requestStub); + $this->assertSame($expected, $request->getRoute()); + } + + /** + * @return array|string>> + * @psalm-return array, array}> + */ + public function providerForTestGetRoute(): iterable + { + return [ + ['/', [], []], + ['/test', ['route' => '/test'], []], + ['/test', [], ['route' => '/test']], + ['/test-get', ['route' => '/test-get'], ['route' => '/test-post']], + ['/database/structure', ['db' => 'db'], []], + ['/sql', ['db' => 'db', 'table' => 'table'], []], + ['/test', ['route' => '/test', 'db' => 'db'], []], + ['/test', ['route' => '/test', 'db' => 'db', 'table' => 'table'], []], + ['/', [], ['db' => 'db']], + ['/', [], ['db' => 'db', 'table' => 'table']], + ]; + } +} diff --git a/test/classes/RoutingTest.php b/test/classes/RoutingTest.php index b7677e0a4a..a505754e7f 100644 --- a/test/classes/RoutingTest.php +++ b/test/classes/RoutingTest.php @@ -60,62 +60,4 @@ class RoutingTest extends AbstractTestCase $this->assertInstanceOf(Dispatcher::class, $dispatcher); $this->assertSame($expected, $dispatcher->dispatch('GET', '/')); } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRouteNoParams(): void - { - $this->assertSame('/', Routing::getCurrentRoute()); - } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRouteGet(): void - { - $_GET['route'] = '/test'; - $this->assertSame('/test', Routing::getCurrentRoute()); - } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRoutePost(): void - { - unset($_GET['route']); - $_POST['route'] = '/testpost'; - $this->assertSame('/testpost', Routing::getCurrentRoute()); - } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRouteGetIsOverPost(): void - { - $_GET['route'] = '/testget'; - $_POST['route'] = '/testpost'; - $this->assertSame('/testget', Routing::getCurrentRoute()); - } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRouteRedirectDbStructure(): void - { - unset($_POST['route']); - unset($_GET['route']); - $_GET['db'] = 'testDB'; - $this->assertSame('/database/structure', Routing::getCurrentRoute()); - } - - /** - * Test for Routing::getCurrentRoute - */ - public function testGetCurrentRouteRedirectSql(): void - { - $_GET['db'] = 'testDB'; - $_GET['table'] = 'tableTest'; - $this->assertSame('/sql', Routing::getCurrentRoute()); - } } diff --git a/test/classes/Server/PrivilegesTest.php b/test/classes/Server/PrivilegesTest.php index 422b2c2f35..2412cd81c7 100644 --- a/test/classes/Server/PrivilegesTest.php +++ b/test/classes/Server/PrivilegesTest.php @@ -1438,7 +1438,8 @@ class PrivilegesTest extends AbstractTestCase $username, $hostname, $tablename, - $_REQUEST['tablename'] + $_REQUEST['tablename'], + '/server/privileges' ); //title @@ -1549,7 +1550,15 @@ class PrivilegesTest extends AbstractTestCase $GLOBALS['username'] = 'user'; $GLOBALS['hostname'] = 'host'; - $actual = $serverPrivileges->getHtmlForUserProperties(false, 'sakila', 'user', 'host', 'sakila', 'actor'); + $actual = $serverPrivileges->getHtmlForUserProperties( + false, + 'sakila', + 'user', + 'host', + 'sakila', + 'actor', + '/server/privileges' + ); $this->assertStringContainsString('addUsersForm', $actual); $this->assertStringContainsString('SELECT', $actual); $this->assertStringContainsString('Allows reading data.', $actual); @@ -1813,9 +1822,8 @@ class PrivilegesTest extends AbstractTestCase { $username = 'pma_username'; $hostname = 'pma_hostname'; - $_GET['route'] = '/server/privileges'; - $html = $this->serverPrivileges->getFormForChangePassword($username, $hostname, false); + $html = $this->serverPrivileges->getFormForChangePassword($username, $hostname, false, '/server/privileges'); $this->assertStringContainsString( Url::getFromRoute('/server/privileges'),