diff --git a/index.php b/index.php index 84a06cafe8..4ddbe89a4d 100644 --- a/index.php +++ b/index.php @@ -46,6 +46,9 @@ if (isset($_GET['route']) || isset($_POST['route'])) { $routes->addRoute('GET', '/plugins', function () { require_once ROOT_PATH . 'libraries/entry_points/server/plugins.php'; }); + $routes->addRoute(['GET', 'POST'], '/privileges', function () { + require_once ROOT_PATH . 'libraries/entry_points/server/privileges.php'; + }); $routes->addGroup('/status', function (RouteCollector $routes) { $routes->addRoute('GET', '/queries', function () { require_once ROOT_PATH . 'libraries/entry_points/server/status/queries.php'; diff --git a/js/server/privileges.js b/js/server/privileges.js index 20134bed7b..a3832bec9f 100644 --- a/js/server/privileges.js +++ b/js/server/privileges.js @@ -65,7 +65,7 @@ function checkPasswordStrength (value, meterObject, meterObjectLabel, username) } /** - * AJAX scripts for server_privileges page. + * AJAX scripts for /server/privileges page. * * Actions ajaxified here: * Add user @@ -245,7 +245,7 @@ AJAX.registerOnload('server/privileges.js', function () { var $message = Functions.ajaxShowMessage(); var argsep = CommonParams.get('arg_separator'); $.post( - 'server_privileges.php', + 'index.php?route=/server/privileges', $('#changeUserGroupDialog').find('form').serialize() + argsep + 'ajax_request=1', function (data) { Functions.ajaxRemoveMessage($message); diff --git a/libraries/classes/Config/SpecialSchemaLinks.php b/libraries/classes/Config/SpecialSchemaLinks.php index 173db1f34f..9a36341f0a 100644 --- a/libraries/classes/Config/SpecialSchemaLinks.php +++ b/libraries/classes/Config/SpecialSchemaLinks.php @@ -45,7 +45,7 @@ class SpecialSchemaLinks * ) * ), * // Page to link - * 'default_page' => './server_privileges.php' + * 'default_page' => './' . Url::getFromRoute('/server/privileges') * ) * ) * ) @@ -73,7 +73,7 @@ class SpecialSchemaLinks 'column_name' => 'host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], 'table_name' => [ 'link_param' => 'table', @@ -109,7 +109,7 @@ class SpecialSchemaLinks 'column_name' => 'host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], ], 'event' => [ @@ -202,7 +202,7 @@ class SpecialSchemaLinks 'column_name' => 'Host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], 'routine_name' => [ 'link_param' => 'item_name', @@ -228,7 +228,7 @@ class SpecialSchemaLinks 'column_name' => 'Host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], ], 'tables_priv' => [ @@ -240,7 +240,7 @@ class SpecialSchemaLinks 'column_name' => 'Host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], 'table_name' => [ 'link_param' => 'table', @@ -262,7 +262,7 @@ class SpecialSchemaLinks 'column_name' => 'host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], ], ], @@ -364,7 +364,7 @@ class SpecialSchemaLinks 'column_name' => 'host', ], ], - 'default_page' => './server_privileges.php', + 'default_page' => './' . Url::getFromRoute('/server/privileges'), ], ], 'referential_constraints' => [ diff --git a/libraries/classes/Core.php b/libraries/classes/Core.php index d1a0ae4516..f2bb05ec88 100644 --- a/libraries/classes/Core.php +++ b/libraries/classes/Core.php @@ -45,7 +45,6 @@ class Core 'server_binlog.php', 'server_export.php', 'server_import.php', - 'server_privileges.php', 'server_sql.php', 'server_status.php', 'server_status_advisor.php', diff --git a/libraries/classes/Display/ChangePassword.php b/libraries/classes/Display/ChangePassword.php index a786b6caad..c5c540a6e3 100644 --- a/libraries/classes/Display/ChangePassword.php +++ b/libraries/classes/Display/ChangePassword.php @@ -50,16 +50,21 @@ class ChangePassword */ $chg_evt_handler = 'onchange'; - $is_privileges = basename($_SERVER['SCRIPT_NAME']) === 'server_privileges.php'; + $is_privileges = isset($_REQUEST['route']) && $_REQUEST['route'] === '/server/privileges'; + + $action = basename($GLOBALS['PMA_PHP_SELF']); + if ($is_privileges) { + $action = Url::getFromRoute('/server/privileges'); + } $html = '
'; $html .= Url::getHiddenInputs(); - if (strpos($GLOBALS['PMA_PHP_SELF'], 'server_privileges') !== false) { + if ($is_privileges) { $html .= '' . '_db; $tabs['privileges']['args']['checkprivstable'] = $this->_table; // stay on table view @@ -502,7 +502,7 @@ class Menu $tabs['operation']['icon'] = 'b_tblops'; if ($is_superuser || $isCreateOrGrantUser) { - $tabs['privileges']['link'] = 'server_privileges.php'; + $tabs['privileges']['link'] = Url::getFromRoute('/server/privileges'); $tabs['privileges']['args']['checkprivsdb'] = $this->_db; // stay on database view $tabs['privileges']['args']['viewing_mode'] = 'db'; @@ -599,15 +599,10 @@ class Menu if ($is_superuser || $isCreateOrGrantUser) { $tabs['rights']['icon'] = 's_rights'; - $tabs['rights']['link'] = 'server_privileges.php'; + $tabs['rights']['link'] = Url::getFromRoute('/server/privileges'); $tabs['rights']['text'] = __('User accounts'); - $tabs['rights']['active'] = in_array( - basename($GLOBALS['PMA_PHP_SELF']), - [ - 'server_privileges.php', - 'server_user_groups.php', - ] - ); + $tabs['rights']['active'] = basename($GLOBALS['PMA_PHP_SELF']) === 'server_user_groups.php' || + (isset($_REQUEST['route']) && in_array($_REQUEST['route'], ['/server/privileges'])); $tabs['rights']['args']['viewing_mode'] = 'server'; } diff --git a/libraries/classes/Sanitize.php b/libraries/classes/Sanitize.php index e7e91fbd27..98f56a8412 100644 --- a/libraries/classes/Sanitize.php +++ b/libraries/classes/Sanitize.php @@ -38,7 +38,6 @@ class Sanitize // possible return values from Util::getScriptNameForOption './index.php?', './server_status.php?', - './server_privileges.php?', './db_sql.php?', './db_search.php?', './db_operations.php?', @@ -49,7 +48,6 @@ class Sanitize // Hardcoded options in \PhpMyAdmin\Config\SpecialSchemaLinks './db_events.php?', './db_routines.php?', - './server_privileges.php?', ]; $is_setup = $GLOBALS['PMA_Config'] !== null && $GLOBALS['PMA_Config']->get('is_setup'); // Adjust path to setup script location diff --git a/libraries/classes/Server/Privileges.php b/libraries/classes/Server/Privileges.php index 2e8073b098..dca21f1212 100644 --- a/libraries/classes/Server/Privileges.php +++ b/libraries/classes/Server/Privileges.php @@ -474,12 +474,12 @@ class Privileges [ 'Delete_history_priv', 'DELETE HISTORY', - $GLOBALS['strPrivDescDeleteHistoricalRows'], + __('Allows deleting historical rows.'), ], [ 'Delete versioning rows_priv', 'DELETE HISTORY', - $GLOBALS['strPrivDescDeleteHistoricalRows'], + __('Allows deleting historical rows.'), ], [ 'Create_routine_priv', @@ -2304,7 +2304,7 @@ class Privileges . '' . "\n" . '' . "\n" + . ' action="' . Url::getFromRoute('/server/privileges') . '" method="post" autocomplete="off" >' . "\n" . Url::getHiddenInputs('', '') . $this->getHtmlForLoginInformationFields('new'); @@ -2499,7 +2499,7 @@ class Privileges if ($this->dbi->isSuperuser()) { // check the privileges for a particular database. - $html_output = ''; + $html_output = ''; $html_output .= Url::getHiddenInputs($db); $html_output .= '
'; $html_output .= '
'; @@ -2577,7 +2577,7 @@ class Privileges $html_output = ''; if ($this->dbi->isSuperuser()) { // check the privileges for a particular table. - $html_output = ''; + $html_output = ''; $html_output .= Url::getHiddenInputs($db, $table); $html_output .= '
'; $scriptName = Util::getScriptNameForOption( @@ -2975,11 +2975,11 @@ class Privileges break; } - $html .= ' href="server_privileges.php'; + $html .= ' href="' . Url::getFromRoute('/server/privileges'); if ($linktype == 'revoke') { $html .= '" data-post="' . Url::getCommon($params, ''); } else { - $html .= Url::getCommon($params); + $html .= Url::getCommon($params, '&'); } $html .= '">'; @@ -3009,8 +3009,7 @@ class Privileges public function getUserGroupEditLink($username) { return ' $username]) . '">' . Util::getIcon('b_usrlist', __('Edit user group')) . ''; @@ -3191,8 +3190,7 @@ class Privileges $new_user_initial = mb_strtoupper( mb_substr($username, 0, 1) ); - $newUserInitialString = '' + $newUserInitialString = '' . $new_user_initial . ''; $extra_data['new_user_initial'] = $new_user_initial; $extra_data['new_user_initial_string'] = $newUserInitialString; @@ -3248,8 +3246,8 @@ class Privileges ), ]; - $html_output = '' . "\n" . Url::getHiddenInputs('', '') . '' . "\n" + = '' . "\n" . Url::getHiddenInputs('', '') . '
' . '' . "\n" @@ -4716,15 +4714,12 @@ class Privileges if (! empty($dbname)) { $html_output .= ' $username, + 'hostname' => $hostname, + 'dbname' => '', + 'tablename' => '', + ]) . '">\'' . htmlspecialchars($username) . '\'@\'' . htmlspecialchars($hostname) . '\'' . "\n"; @@ -4734,30 +4729,24 @@ class Privileges || is_array($dbname) && count($dbname) > 1 ? __('Databases') : __('Database'); if (! empty($entity_name) && $entity_type === 'table') { - $html_output .= ' $username, + 'hostname' => $hostname, + 'dbname' => $url_dbname, + 'tablename' => '', + ]) . '">' . htmlspecialchars($dbname) . ''; $html_output .= ' - ' . __('Table') . ' ' . htmlspecialchars($entity_name) . ''; } elseif (! empty($entity_name)) { - $html_output .= ' $username, + 'hostname' => $hostname, + 'dbname' => $url_dbname, + 'routinename' => '', + ]) . '">' . htmlspecialchars($dbname) . ''; @@ -4933,8 +4922,7 @@ class Privileges Message::NOTICE ); $flushnote->addParamHtml( - ' 1]) . '" id="reload_privileges_anchor">' ); $flushnote->addParamHtml(''); @@ -5023,7 +5011,7 @@ class Privileges } $html_output .= '' . "\n"; + . 'id="addUsersForm" action="' . Url::getFromRoute('/server/privileges') . '" method="post">' . "\n"; $html_output .= Url::getHiddenInputs($_params); $html_output .= $this->getHtmlToDisplayPrivilegesTable( // If $dbname is an array, pass any one db as all have same privs. diff --git a/libraries/classes/Server/UserGroups.php b/libraries/classes/Server/UserGroups.php index 2cd21330bd..b54c54e5d5 100644 --- a/libraries/classes/Server/UserGroups.php +++ b/libraries/classes/Server/UserGroups.php @@ -83,7 +83,7 @@ class UserGroups if ($result && $GLOBALS['dbi']->numRows($result)) { $html_output .= ''; + . ' action="' . Url::getFromRoute('/server/privileges') . '" method="post">'; $html_output .= Url::getHiddenInputs(); $html_output .= '
'; $html_output .= ''; diff --git a/libraries/classes/Server/Users.php b/libraries/classes/Server/Users.php index 5bc7908b0c..0326712e34 100644 --- a/libraries/classes/Server/Users.php +++ b/libraries/classes/Server/Users.php @@ -30,8 +30,8 @@ class Users $items = [ [ 'name' => __('User accounts overview'), - 'url' => 'server_privileges.php', - 'params' => Url::getCommon(['viewing_mode' => 'server']), + 'url' => Url::getFromRoute('/server/privileges'), + 'params' => Url::getCommon(['viewing_mode' => 'server'], '&'), ], ]; diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index 62199f654c..25edb217fc 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -3183,7 +3183,7 @@ class Util case 'variables': return Url::getFromRoute('/server/variables'); case 'privileges': - return 'server_privileges.php'; + return Url::getFromRoute('/server/privileges'); } } elseif ($location == 'database') { // Values for $cfg['DefaultTabDatabase'] diff --git a/server_privileges.php b/libraries/entry_points/server/privileges.php similarity index 98% rename from server_privileges.php rename to libraries/entry_points/server/privileges.php index a56cb61b32..1c5d5e4cee 100644 --- a/server_privileges.php +++ b/libraries/entry_points/server/privileges.php @@ -17,14 +17,13 @@ use PhpMyAdmin\Response; use PhpMyAdmin\Server\Privileges; use PhpMyAdmin\Server\Users; use PhpMyAdmin\Template; +use PhpMyAdmin\Url; -if (! defined('ROOT_PATH')) { - define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR); +if (! defined('PHPMYADMIN')) { + exit; } -global $db, $pmaThemeImage, $text_dir, $url_query; - -require_once ROOT_PATH . 'libraries/common.inc.php'; +global $containerBuilder, $db, $pmaThemeImage, $text_dir, $url_query; /** @var Response $response */ $response = $containerBuilder->get(Response::class); @@ -57,7 +56,7 @@ if ((isset($_GET['viewing_mode']) && $GLOBALS['cfgRelation']['menuswork'] ) { $response->addHTML('
'); - $response->addHTML(Users::getHtmlForSubMenusOnUsersPage('server_privileges.php')); + $response->addHTML(Users::getHtmlForSubMenusOnUsersPage(Url::getFromRoute('/server/privileges'))); } /** diff --git a/templates/server/databases/index.twig b/templates/server/databases/index.twig index c102a676c3..5517905d26 100644 --- a/templates/server/databases/index.twig +++ b/templates/server/databases/index.twig @@ -238,11 +238,10 @@
@@ -15,8 +14,7 @@ {% endif %} {% endfor %} diff --git a/templates/server/privileges/privileges_summary.twig b/templates/server/privileges/privileges_summary.twig index 438ecb77db..64b92da401 100644 --- a/templates/server/privileges/privileges_summary.twig +++ b/templates/server/privileges/privileges_summary.twig @@ -1,4 +1,4 @@ - + {{ get_hidden_inputs() }} diff --git a/templates/server/replication/master_add_slave_user.twig b/templates/server/replication/master_add_slave_user.twig index 5c2eec329a..91ebe60665 100644 --- a/templates/server/replication/master_add_slave_user.twig +++ b/templates/server/replication/master_add_slave_user.twig @@ -1,5 +1,5 @@
- + {{ get_hidden_inputs('', '') }}
diff --git a/test/classes/Display/ChangePasswordTest.php b/test/classes/Display/ChangePasswordTest.php index 0cc317c923..0449964450 100644 --- a/test/classes/Display/ChangePasswordTest.php +++ b/test/classes/Display/ChangePasswordTest.php @@ -46,7 +46,7 @@ class ChangePasswordTest extends TestCase $GLOBALS['cfg']['ShowHint'] = true; $GLOBALS['cfg']['ActionLinksMode'] = 'icons'; $GLOBALS['cfg']['Server']['DisableIS'] = false; - $GLOBALS['PMA_PHP_SELF'] = "server_privileges.php"; + $GLOBALS['PMA_PHP_SELF'] = ''; $GLOBALS['server'] = 0; //$_SESSION @@ -62,13 +62,13 @@ class ChangePasswordTest extends TestCase { $username = "pma_username"; $hostname = "pma_hostname"; + $_REQUEST['route'] = '/server/privileges'; //Call the test function $html = ChangePassword::getHtml('change_pw', $username, $hostname); - //PMA_PHP_SELF $this->assertStringContainsString( - $GLOBALS['PMA_PHP_SELF'], + Url::getFromRoute('/server/privileges'), $html ); diff --git a/test/classes/Display/CreateTableTest.php b/test/classes/Display/CreateTableTest.php index b35892e5bc..488e3c8ed5 100644 --- a/test/classes/Display/CreateTableTest.php +++ b/test/classes/Display/CreateTableTest.php @@ -44,7 +44,7 @@ class CreateTableTest extends TestCase $GLOBALS['cfg']['Server']['user'] = "pma_user"; $GLOBALS['cfg']['ShowHint'] = true; $GLOBALS['cfg']['ActionLinksMode'] = 'icons'; - $GLOBALS['PMA_PHP_SELF'] = "server_privileges.php"; + $GLOBALS['PMA_PHP_SELF'] = Url::getFromRoute('/server/privileges'); //$_SESSION $_SESSION['relation'][$GLOBALS['server']] = "relation"; diff --git a/test/classes/Server/PrivilegesTest.php b/test/classes/Server/PrivilegesTest.php index 04cc8a027e..5a882781bd 100644 --- a/test/classes/Server/PrivilegesTest.php +++ b/test/classes/Server/PrivilegesTest.php @@ -1850,15 +1850,13 @@ class PrivilegesTest extends TestCase '' ); - $url_html = Url::getCommon( - [ - 'username' => $username, - 'hostname' => $hostname, - 'dbname' => $dbname, - 'tablename' => $tablename, - 'routinename' => '', - ] - ); + $url_html = Url::getCommon([ + 'username' => $username, + 'hostname' => $hostname, + 'dbname' => $dbname, + 'tablename' => $tablename, + 'routinename' => '', + ], ''); $this->assertStringContainsString( $url_html, $html @@ -1899,14 +1897,12 @@ class PrivilegesTest extends TestCase $html = $this->serverPrivileges->getUserLink('export', $username, $hostname); - $url_html = Url::getCommon( - [ - 'username' => $username, - 'hostname' => $hostname, - 'initial' => "", - 'export' => 1, - ] - ); + $url_html = Url::getCommon([ + 'username' => $username, + 'hostname' => $hostname, + 'initial' => '', + 'export' => 1, + ], ''); $this->assertStringContainsString( $url_html, $html @@ -2282,7 +2278,7 @@ class PrivilegesTest extends TestCase //Url::getCommon $this->assertStringContainsString( - Url::getCommon(['adduser' => 1]), + Url::getCommon(['adduser' => 1], ''), $html ); @@ -2353,7 +2349,7 @@ class PrivilegesTest extends TestCase $html = $this->serverPrivileges->getAddUserHtmlFieldset(); $this->assertStringContainsString( - Url::getCommon(['adduser' => 1]), + Url::getCommon(['adduser' => 1], ''), $html ); $this->assertStringContainsString( @@ -2402,14 +2398,12 @@ class PrivilegesTest extends TestCase ); //Url::getCommon - $item = Url::getCommon( - [ - 'username' => $username, - 'hostname' => $hostname, - 'dbname' => '', - 'tablename' => '', - ] - ); + $item = Url::getCommon([ + 'username' => $username, + 'hostname' => $hostname, + 'dbname' => '', + 'tablename' => '', + ], ''); $this->assertStringContainsString( $item, $html @@ -2438,14 +2432,12 @@ class PrivilegesTest extends TestCase ); //Url::getCommon - $item = Url::getCommon( - [ - 'username' => $username, - 'hostname' => $hostname, - 'dbname' => $url_dbname, - 'tablename' => '', - ] - ); + $item = Url::getCommon([ + 'username' => $username, + 'hostname' => $hostname, + 'dbname' => $url_dbname, + 'tablename' => '', + ], ''); $this->assertStringContainsString( $item, $html @@ -2575,12 +2567,12 @@ class PrivilegesTest extends TestCase $this->assertStringContainsString('
', $actual); $this->assertStringContainsString('', $actual); $this->assertStringContainsString( - '-', $actual ); $this->assertStringContainsString( - '"', $actual ); diff --git a/test/classes/Server/UsersTest.php b/test/classes/Server/UsersTest.php index 0422543155..39662f5e02 100644 --- a/test/classes/Server/UsersTest.php +++ b/test/classes/Server/UsersTest.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Server; use PhpMyAdmin\Server\Users; +use PhpMyAdmin\Url; use PHPUnit\Framework\TestCase; /** @@ -31,7 +32,7 @@ class UsersTest extends TestCase $GLOBALS['server'] = 1; $GLOBALS['cfg']['ServerDefault'] = 1; $GLOBALS['cfg']['Server']['DisableIS'] = false; - $html = Users::getHtmlForSubMenusOnUsersPage('server_privileges.php'); + $html = Users::getHtmlForSubMenusOnUsersPage(Url::getFromRoute('/server/privileges')); //validate 1: topmenu2 $this->assertStringContainsString( @@ -39,9 +40,9 @@ class UsersTest extends TestCase $html ); - //validate 2: tabactive for server_privileges.php + //validate 2: tabactive for /server/privileges $this->assertStringContainsString( - '
{{ 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 b859c8c339..aea6d31b69 100644 --- a/templates/server/privileges/add_user_fieldset.twig +++ b/templates/server/privileges/add_user_fieldset.twig @@ -2,7 +2,7 @@ + " href="{{ url('/server/privileges', {'initial': tmp_initial}) }}"> {{- tmp_initial|raw -}} - + {% trans 'Show all' %} AZ