From d58057daeceb09103bab83ada547248be9610799 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Fri, 27 May 2022 17:13:23 -0300 Subject: [PATCH] Extract Database\PrivilegesController from Server\PrivilegesController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- .../Database/PrivilegesController.php | 66 ++++++++++++++++--- .../Server/PrivilegesController.php | 48 +------------- libraries/classes/Footer.php | 14 ---- libraries/classes/Menu.php | 7 +- libraries/classes/Server/Privileges.php | 9 +-- libraries/classes/Url.php | 1 - libraries/routes.php | 1 + psalm-baseline.xml | 3 - templates/database/privileges/index.twig | 2 +- templates/server/databases/index.twig | 5 +- .../server/privileges/add_user_fieldset.twig | 5 +- templates/server/privileges/initials_row.twig | 4 +- templates/server/privileges/subnav.twig | 2 +- .../Database/PrivilegesControllerTest.php | 31 +++++---- .../Server/PrivilegesControllerTest.php | 2 - 15 files changed, 91 insertions(+), 109 deletions(-) diff --git a/libraries/classes/Controllers/Database/PrivilegesController.php b/libraries/classes/Controllers/Database/PrivilegesController.php index 2f08cd48eb..bc2f3ab4b4 100644 --- a/libraries/classes/Controllers/Database/PrivilegesController.php +++ b/libraries/classes/Controllers/Database/PrivilegesController.php @@ -7,14 +7,19 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Database; +use PhpMyAdmin\CheckUserPrivileges; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Server\Privileges; use PhpMyAdmin\Template; use PhpMyAdmin\Util; +use function __; use function mb_strtolower; +use function ob_get_clean; +use function ob_start; /** * Controller for database privileges @@ -38,18 +43,62 @@ class PrivilegesController extends AbstractController $this->dbi = $dbi; } - /** - * @param string[] $params Request parameters - * @psalm-param array{checkprivsdb: string} $params - */ - public function __invoke(array $params): string + public function __invoke(): void { $GLOBALS['text_dir'] = $GLOBALS['text_dir'] ?? null; + + $checkUserPrivileges = new CheckUserPrivileges($this->dbi); + $checkUserPrivileges->getPrivileges(); + + $this->addScriptFiles(['server/privileges.js', 'vendor/zxcvbn-ts.js']); + + /** + * Checks if the user is allowed to do what they try to... + */ + $isGrantUser = $this->dbi->isGrantUser(); + $isCreateUser = $this->dbi->isCreateUser(); + + if (! $this->dbi->isSuperUser() && ! $isGrantUser && ! $isCreateUser) { + $this->render('server/sub_page_header', [ + 'type' => 'privileges', + 'is_image' => false, + ]); + $this->response->addHTML( + Message::error(__('No Privileges')) + ->getDisplay() + ); + + return; + } + + if (! $isGrantUser && ! $isCreateUser) { + $this->response->addHTML(Message::notice( + __('You do not have the privileges to administrate the users!') + )->getDisplay()); + } + + // Gets the database structure + $GLOBALS['sub_part'] = '_structure'; + ob_start(); + + [ + $GLOBALS['tables'], + $GLOBALS['num_tables'], + $GLOBALS['total_num_tables'], + $GLOBALS['sub_part'],,, + $GLOBALS['tooltip_truename'], + $GLOBALS['tooltip_aliasname'], + $GLOBALS['pos'], + ] = Util::getDbInfo($GLOBALS['db'], $GLOBALS['sub_part']); + + $content = ob_get_clean(); + $this->response->addHTML($content . "\n"); + $scriptName = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabDatabase'], 'database'); - $db = $params['checkprivsdb']; + $db = $GLOBALS['db']; if ($this->dbi->getLowerCaseNames() === '1') { - $db = mb_strtolower($params['checkprivsdb']); + $db = mb_strtolower($GLOBALS['db']); } $privileges = []; @@ -57,7 +106,7 @@ class PrivilegesController extends AbstractController $privileges = $this->privileges->getAllPrivileges($db); } - return $this->template->render('database/privileges/index', [ + $this->render('database/privileges/index', [ 'is_superuser' => $this->dbi->isSuperUser(), 'db' => $db, 'database_url' => $scriptName, @@ -66,5 +115,6 @@ class PrivilegesController extends AbstractController 'is_grantuser' => $this->dbi->isGrantUser(), 'privileges' => $privileges, ]); + $this->render('export_modal'); } } diff --git a/libraries/classes/Controllers/Server/PrivilegesController.php b/libraries/classes/Controllers/Server/PrivilegesController.php index 61e308f59a..41f16fb5a2 100644 --- a/libraries/classes/Controllers/Server/PrivilegesController.php +++ b/libraries/classes/Controllers/Server/PrivilegesController.php @@ -8,7 +8,6 @@ use PhpMyAdmin\CheckUserPrivileges; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\ConfigStorage\RelationCleanup; use PhpMyAdmin\Controllers\AbstractController; -use PhpMyAdmin\Controllers\Database\PrivilegesController as DatabaseController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Html\Generator; @@ -25,8 +24,6 @@ use function header; use function implode; use function is_array; use function is_string; -use function ob_get_clean; -use function ob_start; use function str_replace; use function urlencode; @@ -101,13 +98,7 @@ class PrivilegesController extends AbstractController new Plugins($this->dbi) ); - $databaseController = new DatabaseController($this->response, $this->template, $serverPrivileges, $this->dbi); - - if ( - (isset($_GET['viewing_mode']) - && $_GET['viewing_mode'] === 'server') - && $relationParameters->configurableMenusFeature !== null - ) { + if ($relationParameters->configurableMenusFeature !== null) { $this->response->addHTML('
'); $this->render('server/privileges/subnav', [ 'active' => 'privileges', @@ -368,26 +359,7 @@ class PrivilegesController extends AbstractController /** * Displays the links */ - if (isset($_GET['viewing_mode']) && $_GET['viewing_mode'] === 'db') { - $GLOBALS['db'] = $_REQUEST['db'] = $_GET['checkprivsdb']; - - // Gets the database structure - $GLOBALS['sub_part'] = '_structure'; - ob_start(); - - [ - $GLOBALS['tables'], - $GLOBALS['num_tables'], - $GLOBALS['total_num_tables'], - $GLOBALS['sub_part'],,, - $GLOBALS['tooltip_truename'], - $GLOBALS['tooltip_aliasname'], - $GLOBALS['pos'], - ] = Util::getDbInfo($GLOBALS['db'], $GLOBALS['sub_part']); - - $content = ob_get_clean(); - $this->response->addHTML($content . "\n"); - } elseif (! empty($GLOBALS['message'])) { + if (! empty($GLOBALS['message'])) { $this->response->addHTML(Generator::getMessage($GLOBALS['message'])); unset($GLOBALS['message']); } @@ -417,16 +389,6 @@ class PrivilegesController extends AbstractController $this->response->addHTML($serverPrivileges->getHtmlForAddUser( Util::escapeMysqlWildcards(is_string($GLOBALS['dbname']) ? $GLOBALS['dbname'] : '') )); - } elseif (isset($_GET['checkprivsdb']) && is_string($_GET['checkprivsdb'])) { - if ($this->response->isAjax() === true && empty($_REQUEST['ajax_page_request'])) { - $GLOBALS['message'] = Message::success(__('User has been added.')); - $this->response->addJSON('message', $GLOBALS['message']); - - return; - } - - $this->response->addHTML($databaseController(['checkprivsdb' => $_GET['checkprivsdb']])); - $this->render('export_modal'); } else { if (isset($GLOBALS['dbname']) && ! is_array($GLOBALS['dbname'])) { $GLOBALS['url_dbname'] = urlencode( @@ -479,11 +441,7 @@ class PrivilegesController extends AbstractController } } - if ( - ! isset($_GET['viewing_mode']) - || $_GET['viewing_mode'] !== 'server' - || $relationParameters->configurableMenusFeature === null - ) { + if ($relationParameters->configurableMenusFeature === null) { return; } diff --git a/libraries/classes/Footer.php b/libraries/classes/Footer.php index a54bcf568a..879d467827 100644 --- a/libraries/classes/Footer.php +++ b/libraries/classes/Footer.php @@ -153,20 +153,6 @@ class Footer $params['server'] = $GLOBALS['server']; - // needed for server privileges tabs - if (isset($_GET['viewing_mode']) && in_array($_GET['viewing_mode'], ['server', 'db'])) { - $params['viewing_mode'] = $_GET['viewing_mode']; - } - - /** - * @todo coming from /server/privileges, here $db is not set, - * add the following condition below when that is fixed - * && $_GET['checkprivsdb'] == $db - */ - if (isset($_GET['checkprivsdb'])) { - $params['checkprivsdb'] = $_GET['checkprivsdb']; - } - if (isset($_REQUEST['single_table']) && in_array($_REQUEST['single_table'], [true, false])) { $params['single_table'] = $_REQUEST['single_table']; } diff --git a/libraries/classes/Menu.php b/libraries/classes/Menu.php index 299bc986e0..6a5f6224b2 100644 --- a/libraries/classes/Menu.php +++ b/libraries/classes/Menu.php @@ -394,13 +394,11 @@ class Menu $tabs['operation']['active'] = $route === '/database/operations'; if ($isSuperUser || $isCreateOrGrantUser) { - $tabs['privileges']['route'] = '/server/privileges'; - $tabs['privileges']['args']['checkprivsdb'] = $this->db; + $tabs['privileges']['route'] = '/database/privileges'; // stay on database view - $tabs['privileges']['args']['viewing_mode'] = 'db'; $tabs['privileges']['text'] = __('Privileges'); $tabs['privileges']['icon'] = 's_rights'; - $tabs['privileges']['active'] = $route === '/server/privileges'; + $tabs['privileges']['active'] = $route === '/database/privileges'; } $tabs['routines']['route'] = '/database/routines'; @@ -500,7 +498,6 @@ class Menu '/server/privileges', '/server/user-groups', ]); - $tabs['rights']['args']['viewing_mode'] = 'server'; } $tabs['export']['icon'] = 'b_export'; diff --git a/libraries/classes/Server/Privileges.php b/libraries/classes/Server/Privileges.php index 2678e6aa6f..df4d8a2f77 100644 --- a/libraries/classes/Server/Privileges.php +++ b/libraries/classes/Server/Privileges.php @@ -2101,7 +2101,6 @@ class Privileges return $this->template->render('server/privileges/initials_row', [ 'array_initials' => $arrayInitials, 'initial' => $_GET['initial'] ?? null, - 'viewing_mode' => $_GET['viewing_mode'] ?? null, ]); } @@ -2901,20 +2900,16 @@ class Privileges return ''; } - $relParams = []; $urlParams = ['adduser' => 1]; if (! empty($db)) { - $urlParams['dbname'] = $relParams['checkprivsdb'] = $db; + $urlParams['dbname'] = $db; } if (! empty($table)) { $urlParams['tablename'] = $table; } - return $this->template->render('server/privileges/add_user_fieldset', [ - 'url_params' => $urlParams, - 'rel_params' => $relParams, - ]); + return $this->template->render('server/privileges/add_user_fieldset', ['url_params' => $urlParams]); } /** diff --git a/libraries/classes/Url.php b/libraries/classes/Url.php index b7aa92a6dc..dfb363b7d8 100644 --- a/libraries/classes/Url.php +++ b/libraries/classes/Url.php @@ -270,7 +270,6 @@ class Url 'hostname', 'dbname', 'tablename', - 'checkprivsdb', ]; $paramsToEncrypt = []; foreach ($params as $paramKey => $paramValue) { diff --git a/libraries/routes.php b/libraries/routes.php index 205450ede1..508c8deb63 100644 --- a/libraries/routes.php +++ b/libraries/routes.php @@ -71,6 +71,7 @@ return static function (RouteCollector $routes): void { $routes->addRoute(['GET', 'POST'], '', Database\OperationsController::class); $routes->post('/collation', Database\Operations\CollationController::class); }); + $routes->get('/privileges', Database\PrivilegesController::class); $routes->addRoute(['GET', 'POST'], '/qbe', Database\QueryByExampleController::class); $routes->addRoute(['GET', 'POST'], '/routines', Database\RoutinesController::class); $routes->addRoute(['GET', 'POST'], '/search', Database\SearchController::class); diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 699e0c2b7b..fa0687f8ca 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -6706,10 +6706,7 @@ $info - $params['checkprivsdb'] - $params['checkprivstable'] $params['single_table'] - $params['viewing_mode'] $subObject diff --git a/templates/database/privileges/index.twig b/templates/database/privileges/index.twig index 773c361168..9c68d50feb 100644 --- a/templates/database/privileges/index.twig +++ b/templates/database/privileges/index.twig @@ -132,7 +132,7 @@ + }) }}"> {{ get_icon('b_usradd', 'Add user account'|trans) }} diff --git a/templates/server/databases/index.twig b/templates/server/databases/index.twig index 63b1acb48b..c876f87825 100644 --- a/templates/server/databases/index.twig +++ b/templates/server/databases/index.twig @@ -235,10 +235,7 @@ {{ get_icon('s_rights', 'Check privileges'|trans) }} diff --git a/templates/server/privileges/add_user_fieldset.twig b/templates/server/privileges/add_user_fieldset.twig index ecb594e8fa..892eea75ff 100644 --- a/templates/server/privileges/add_user_fieldset.twig +++ b/templates/server/privileges/add_user_fieldset.twig @@ -2,10 +2,7 @@
{% trans %}New{% context %}Create new user{% endtrans %} - + {{ get_icon('b_usradd') }}{% trans 'Add user account' %}
diff --git a/templates/server/privileges/initials_row.twig b/templates/server/privileges/initials_row.twig index 622310d65b..c546433b0a 100644 --- a/templates/server/privileges/initials_row.twig +++ b/templates/server/privileges/initials_row.twig @@ -4,7 +4,7 @@ {% if tmp_initial is not same as(null) %} {% if initial_was_found %}
  • - {{ tmp_initial }} + {{ tmp_initial }}
  • {% else %}
  • @@ -14,7 +14,7 @@ {% endif %} {% endfor %}
  • - {% trans 'Show all' %} + {% trans 'Show all' %}
  • diff --git a/templates/server/privileges/subnav.twig b/templates/server/privileges/subnav.twig index 84c7443625..29f0da1bda 100644 --- a/templates/server/privileges/subnav.twig +++ b/templates/server/privileges/subnav.twig @@ -1,7 +1,7 @@