diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Config')
36 files changed, 0 insertions, 6473 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Config/ConfigFile.php b/srcs/phpmyadmin/libraries/classes/Config/ConfigFile.php deleted file mode 100644 index 1e053dd..0000000 --- a/srcs/phpmyadmin/libraries/classes/Config/ConfigFile.php +++ /dev/null @@ -1,531 +0,0 @@ -<?php -/* vim: set expandtab sw=4 ts=4 sts=4: */ -/** - * Config file management - * - * @package PhpMyAdmin - */ -declare(strict_types=1); - -namespace PhpMyAdmin\Config; - -use PhpMyAdmin\Config; -use PhpMyAdmin\Core; - -/** - * Config file management class. - * Stores its data in $_SESSION - * - * @package PhpMyAdmin - */ -class ConfigFile -{ - /** - * Stores default PMA config from config.default.php - * @var array - */ - private $_defaultCfg; - - /** - * Stores allowed values for non-standard fields - * @var array - */ - private $_cfgDb; - - /** - * Stores original PMA config, not modified by user preferences - * @var array|null - */ - private $_baseCfg; - - /** - * Whether we are currently working in PMA Setup context - * @var bool - */ - private $_isInSetup; - - /** - * Keys which will be always written to config file - * @var array - */ - private $_persistKeys = []; - - /** - * Changes keys while updating config in {@link updateWithGlobalConfig()} - * or reading by {@link getConfig()} or {@link getConfigArray()} - * @var array - */ - private $_cfgUpdateReadMapping = []; - - /** - * Key filter for {@link set()} - * @var array|null - */ - private $_setFilter; - - /** - * Instance id (key in $_SESSION array, separate for each server - - * ConfigFile{server id}) - * @var string - */ - private $_id; - - /** - * Result for {@link _flattenArray()} - * @var array|null - */ - private $_flattenArrayResult; - - /** - * Constructor - * - * @param array|null $baseConfig base configuration read from - * {@link PhpMyAdmin\Config::$base_config}, - * use only when not in PMA Setup - */ - public function __construct($baseConfig = null) - { - // load default config values - $cfg = &$this->_defaultCfg; - include ROOT_PATH . 'libraries/config.default.php'; - - // load additional config information - $this->_cfgDb = include ROOT_PATH . 'libraries/config.values.php'; - - // apply default values overrides - if (count($this->_cfgDb['_overrides'])) { - foreach ($this->_cfgDb['_overrides'] as $path => $value) { - Core::arrayWrite($path, $cfg, $value); - } - } - - $this->_baseCfg = $baseConfig; - $this->_isInSetup = $baseConfig === null; - $this->_id = 'ConfigFile' . $GLOBALS['server']; - if (! isset($_SESSION[$this->_id])) { - $_SESSION[$this->_id] = []; - } - } - - /** - * Sets names of config options which will be placed in config file even if - * they are set to their default values (use only full paths) - * - * @param array $keys the names of the config options - * - * @return void - */ - public function setPersistKeys(array $keys) - { - // checking key presence is much faster than searching so move values - // to keys - $this->_persistKeys = array_flip($keys); - } - - /** - * Returns flipped array set by {@link setPersistKeys()} - * - * @return array - */ - public function getPersistKeysMap() - { - return $this->_persistKeys; - } - - /** - * By default ConfigFile allows setting of all configuration keys, use - * this method to set up a filter on {@link set()} method - * - * @param array|null $keys array of allowed keys or null to remove filter - * - * @return void - */ - public function setAllowedKeys($keys) - { - if ($keys === null) { - $this->_setFilter = null; - return; - } - // checking key presence is much faster than searching so move values - // to keys - $this->_setFilter = array_flip($keys); - } - - /** - * Sets path mapping for updating config in - * {@link updateWithGlobalConfig()} or reading - * by {@link getConfig()} or {@link getConfigArray()} - * - * @param array $mapping Contains the mapping of "Server/config options" - * to "Server/1/config options" - * - * @return void - */ - public function setCfgUpdateReadMapping(array $mapping) - { - $this->_cfgUpdateReadMapping = $mapping; - } - - /** - * Resets configuration data - * - * @return void - */ - public function resetConfigData() - { - $_SESSION[$this->_id] = []; - } - - /** - * Sets configuration data (overrides old data) - * - * @param array $cfg Configuration options - * - * @return void - */ - public function setConfigData(array $cfg) - { - $_SESSION[$this->_id] = $cfg; - } - - /** - * Sets config value - * - * @param string $path Path - * @param mixed $value Value - * @param string $canonicalPath Canonical path - * - * @return void - */ - public function set($path, $value, $canonicalPath = null) - { - if ($canonicalPath === null) { - $canonicalPath = $this->getCanonicalPath($path); - } - // apply key whitelist - if ($this->_setFilter !== null - && ! isset($this->_setFilter[$canonicalPath]) - ) { - return; - } - // if the path isn't protected it may be removed - if (isset($this->_persistKeys[$canonicalPath])) { - Core::arrayWrite($path, $_SESSION[$this->_id], $value); - return; - } - - $defaultValue = $this->getDefault($canonicalPath); - $removePath = $value === $defaultValue; - if ($this->_isInSetup) { - // remove if it has a default value or is empty - $removePath = $removePath - || (empty($value) && empty($defaultValue)); - } else { - // get original config values not overwritten by user - // preferences to allow for overwriting options set in - // config.inc.php with default values - $instanceDefaultValue = Core::arrayRead( - $canonicalPath, - $this->_baseCfg - ); - // remove if it has a default value and base config (config.inc.php) - // uses default value - $removePath = $removePath - && ($instanceDefaultValue === $defaultValue); - } - if ($removePath) { - Core::arrayRemove($path, $_SESSION[$this->_id]); - return; - } - - Core::arrayWrite($path, $_SESSION[$this->_id], $value); - } - - /** - * Flattens multidimensional array, changes indices to paths - * (eg. 'key/subkey'). - * Used as array_walk() callback. - * - * @param mixed $value Value - * @param mixed $key Key - * @param mixed $prefix Prefix - * - * @return void - */ - private function _flattenArray($value, $key, $prefix) - { - // no recursion for numeric arrays - if (is_array($value) && ! isset($value[0])) { - $prefix .= $key . '/'; - array_walk($value, [$this, '_flattenArray'], $prefix); - } else { - $this->_flattenArrayResult[$prefix . $key] = $value; - } - } - - /** - * Returns default config in a flattened array - * - * @return array - */ - public function getFlatDefaultConfig() - { - $this->_flattenArrayResult = []; - array_walk($this->_defaultCfg, [$this, '_flattenArray'], ''); - $flatConfig = $this->_flattenArrayResult; - $this->_flattenArrayResult = null; - return $flatConfig; - } - - /** - * Updates config with values read from given array - * (config will contain differences to defaults from config.defaults.php). - * - * @param array $cfg Configuration - * - * @return void - */ - public function updateWithGlobalConfig(array $cfg) - { - // load config array and flatten it - $this->_flattenArrayResult = []; - array_walk($cfg, [$this, '_flattenArray'], ''); - $flatConfig = $this->_flattenArrayResult; - $this->_flattenArrayResult = null; - - // save values map for translating a few user preferences paths, - // should be complemented by code reading from generated config - // to perform inverse mapping - foreach ($flatConfig as $path => $value) { - if (isset($this->_cfgUpdateReadMapping[$path])) { - $path = $this->_cfgUpdateReadMapping[$path]; - } - $this->set($path, $value, $path); - } - } - - /** - * Returns config value or $default if it's not set - * - * @param string $path Path of config file - * @param mixed $default Default values - * - * @return mixed - */ - public function get($path, $default = null) - { - return Core::arrayRead($path, $_SESSION[$this->_id], $default); - } - - /** - * Returns default config value or $default it it's not set ie. it doesn't - * exist in config.default.php ($cfg) and config.values.php - * ($_cfg_db['_overrides']) - * - * @param string $canonicalPath Canonical path - * @param mixed $default Default value - * - * @return mixed - */ - public function getDefault($canonicalPath, $default = null) - { - return Core::arrayRead($canonicalPath, $this->_defaultCfg, $default); - } - - /** - * Returns config value, if it's not set uses the default one; returns - * $default if the path isn't set and doesn't contain a default value - * - * @param string $path Path - * @param mixed $default Default value - * - * @return mixed - */ - public function getValue($path, $default = null) - { - $v = Core::arrayRead($path, $_SESSION[$this->_id], null); - if ($v !== null) { - return $v; - } - $path = $this->getCanonicalPath($path); - return $this->getDefault($path, $default); - } - - /** - * Returns canonical path - * - * @param string $path Path - * - * @return string - */ - public function getCanonicalPath($path) - { - return preg_replace('#^Servers/([\d]+)/#', 'Servers/1/', $path); - } - - /** - * Returns config database entry for $path - * - * @param string $path path of the variable in config db - * @param mixed $default default value - * - * @return mixed - */ - public function getDbEntry($path, $default = null) - { - return Core::arrayRead($path, $this->_cfgDb, $default); - } - - /** - * Returns server count - * - * @return int - */ - public function getServerCount() - { - return isset($_SESSION[$this->_id]['Servers']) - ? count($_SESSION[$this->_id]['Servers']) - : 0; - } - - /** - * Returns server list - * - * @return array|null - */ - public function getServers() - { - return isset($_SESSION[$this->_id]['Servers']) - ? $_SESSION[$this->_id]['Servers'] - : null; - } - - /** - * Returns DSN of given server - * - * @param integer $server server index - * - * @return string - */ - public function getServerDSN($server) - { - if (! isset($_SESSION[$this->_id]['Servers'][$server])) { - return ''; - } - - $path = 'Servers/' . $server; - $dsn = 'mysqli://'; - if ($this->getValue("$path/auth_type") == 'config') { - $dsn .= $this->getValue("$path/user"); - if (! empty($this->getValue("$path/password"))) { - $dsn .= ':***'; - } - $dsn .= '@'; - } - if ($this->getValue("$path/host") != 'localhost') { - $dsn .= $this->getValue("$path/host"); - $port = $this->getValue("$path/port"); - if ($port) { - $dsn .= ':' . $port; - } - } else { - $dsn .= $this->getValue("$path/socket"); - } - return $dsn; - } - - /** - * Returns server name - * - * @param int $id server index - * - * @return string - */ - public function getServerName($id) - { - if (! isset($_SESSION[$this->_id]['Servers'][$id])) { - return ''; - } - $verbose = $this->get("Servers/$id/verbose"); - if (! empty($verbose)) { - return $verbose; - } - $host = $this->get("Servers/$id/host"); - return empty($host) ? 'localhost' : $host; - } - - /** - * Removes server - * - * @param int $server server index - * - * @return void - */ - public function removeServer($server) - { - if (! isset($_SESSION[$this->_id]['Servers'][$server])) { - return; - } - $lastServer = $this->getServerCount(); - - for ($i = $server; $i < $lastServer; $i++) { - $_SESSION[$this->_id]['Servers'][$i] - = $_SESSION[$this->_id]['Servers'][$i + 1]; - } - unset($_SESSION[$this->_id]['Servers'][$lastServer]); - - if (isset($_SESSION[$this->_id]['ServerDefault']) - && $_SESSION[$this->_id]['ServerDefault'] == $lastServer - ) { - unset($_SESSION[$this->_id]['ServerDefault']); - } - } - - /** - * Returns configuration array (full, multidimensional format) - * - * @return array - */ - public function getConfig() - { - $c = $_SESSION[$this->_id]; - foreach ($this->_cfgUpdateReadMapping as $mapTo => $mapFrom) { - // if the key $c exists in $map_to - if (Core::arrayRead($mapTo, $c) !== null) { - Core::arrayWrite($mapTo, $c, Core::arrayRead($mapFrom, $c)); - Core::arrayRemove($mapFrom, $c); - } - } - return $c; - } - - /** - * Returns configuration array (flat format) - * - * @return array - */ - public function getConfigArray() - { - $this->_flattenArrayResult = []; - array_walk($_SESSION[$this->_id], [$this, '_flattenArray'], ''); - $c = $this->_flattenArrayResult; - $this->_flattenArrayResult = null; - - $persistKeys = array_diff( - array_keys($this->_persistKeys), - array_keys($c) - ); - foreach ($persistKeys as $k) { - $c[$k] = $this->getDefault($this->getCanonicalPath($k)); - } - - foreach ($this->_cfgUpdateReadMapping as $mapTo => $mapFrom) { - if (! isset($c[$mapFrom])) { - continue; - } - $c[$mapTo] = $c[$mapFrom]; - unset($c[$mapFrom]); - } - return $c; - } -} diff --git a/srcs/phpmyadmin/libraries/classes/Config/Descriptions.php b/srcs/phpmyadmin/libraries/classes/Config/Descriptions.php deleted file mode 100644 index 22e7c1f..0000000 --- a/srcs/phpmyadmin/libraries/classes/Config/Descriptions.php +++ /dev/null @@ -1,934 +0,0 @@ -<?php -/* vim: set expandtab sw=4 ts=4 sts=4: */ -/** - * Verbose descriptions for settings. - * - * @package PhpMyAdmin - */ -declare(strict_types=1); - -namespace PhpMyAdmin\Config; - -use PhpMyAdmin\Sanitize; - -/** - * Base class for forms, loads default configuration options, checks allowed - * values etc. - * - * @package PhpMyAdmin - */ -class Descriptions -{ - /** - * Return - * Return name or description for a configuration path. - * - * @param string $path Path of configuration - * @param string $type Type of message, either 'name', 'cmt' or 'desc' - * - * @return string - */ - public static function get($path, $type = 'name') - { - $key = str_replace( - [ - 'Servers/1/', - '/', - ], - [ - 'Servers/', - '_', - ], - $path - ); - $value = self::getString($key, $type); - - /* Fallback to path for name and empty string for description and comment */ - if ($value === null) { - if ($type == 'name') { - $value = $path; - } else { - $value = ''; - } - } - - return Sanitize::sanitizeMessage($value); - } - - /** - * Return name or description for a cleaned up configuration path. - * - * @param string $path Path of configuration - * @param string $type Type of message, either 'name', 'cmt' or 'desc' - * - * @return string|null Null if not found - */ - public static function getString($path, $type = 'name') - { - $descriptions = [ - 'AllowArbitraryServer_desc' => __('If enabled, user can enter any MySQL server in login form for cookie auth.'), - 'AllowArbitraryServer_name' => __('Allow login to any MySQL server'), - 'ArbitraryServerRegexp_desc' => __( - 'Restricts the MySQL servers the user can enter when a login to an arbitrary ' - . 'MySQL server is enabled by matching the IP or hostname of the MySQL server ' . - 'to the given regular expression.' - ), - 'ArbitraryServerRegexp_name' => __('Restrict login to MySQL server'), - 'AllowThirdPartyFraming_desc' => __( - 'Enabling this allows a page located on a different domain to call phpMyAdmin ' - . 'inside a frame, and is a potential [strong]security hole[/strong] allowing ' - . 'cross-frame scripting (XSS) attacks.' - ), - 'AllowThirdPartyFraming_name' => __('Allow third party framing'), - 'AllowUserDropDatabase_name' => __('Show "Drop database" link to normal users'), - 'blowfish_secret_desc' => __( - 'Secret passphrase used for encrypting cookies in [kbd]cookie[/kbd] ' - . 'authentication.' - ), - 'blowfish_secret_name' => __('Blowfish secret'), - 'BrowseMarkerEnable_desc' => __('Highlight selected rows.'), - 'BrowseMarkerEnable_name' => __('Row marker'), - 'BrowsePointerEnable_desc' => __('Highlight row pointed by the mouse cursor.'), - 'BrowsePointerEnable_name' => __('Highlight pointer'), - 'BZipDump_desc' => __( - 'Enable bzip2 compression for' - . ' import operations.' - ), - 'BZipDump_name' => __('Bzip2'), - 'CharEditing_desc' => __( - 'Defines which type of editing controls should be used for CHAR and VARCHAR ' - . 'columns; [kbd]input[/kbd] - allows limiting of input length, ' - . '[kbd]textarea[/kbd] - allows newlines in columns.' - ), - 'CharEditing_name' => __('CHAR columns editing'), - 'CodemirrorEnable_desc' => __( - 'Use user-friendly editor for editing SQL queries ' - . '(CodeMirror) with syntax highlighting and ' - . 'line numbers.' - ), - 'CodemirrorEnable_name' => __('Enable CodeMirror'), - 'LintEnable_desc' => __( - 'Find any errors in the query before executing it.' - . ' Requires CodeMirror to be enabled.' - ), - 'LintEnable_name' => __('Enable linter'), - 'MinSizeForInputField_desc' => __( - 'Defines the minimum size for input fields generated for CHAR and VARCHAR ' - . 'columns.' - ), - 'MinSizeForInputField_name' => __('Minimum size for input field'), - 'MaxSizeForInputField_desc' => __( - 'Defines the maximum size for input fields generated for CHAR and VARCHAR ' - . 'columns.' - ), - 'MaxSizeForInputField_name' => __('Maximum size for input field'), - 'CharTextareaCols_desc' => __('Number of columns for CHAR/VARCHAR textareas.'), - 'CharTextareaCols_name' => __('CHAR textarea columns'), - 'CharTextareaRows_desc' => __('Number of rows for CHAR/VARCHAR textareas.'), - 'CharTextareaRows_name' => __('CHAR textarea rows'), - 'CheckConfigurationPermissions_name' => __('Check config file permissions'), - 'CompressOnFly_desc' => __( - 'Compress gzip exports on the fly without the need for much memory; if ' - . 'you encounter problems with created gzip files disable this feature.' - ), - 'CompressOnFly_name' => __('Compress on the fly'), - 'Confirm_desc' => __( - 'Whether a warning ("Are your really sureā¦") should be displayed ' - . 'when you\'re about to lose data.' - ), - 'Confirm_name' => __('Confirm DROP queries'), - 'DBG_sql_desc' => __('Log SQL queries and their execution time, to be displayed in the console'), - 'DBG_sql_name' => __('Debug SQL'), - 'DefaultTabDatabase_desc' => __('Tab that is displayed when entering a database.'), - 'DefaultTabDatabase_name' => __('Default database tab'), - 'DefaultTabServer_desc' => __('Tab that is displayed when entering a server.'), - 'DefaultTabServer_name' => __('Default server tab'), - 'DefaultTabTable_desc' => __('Tab that is displayed when entering a table.'), - 'DefaultTabTable_name' => __('Default table tab'), - 'EnableAutocompleteForTablesAndColumns_desc' => __('Autocomplete of the table and column names in the SQL queries.'), - 'EnableAutocompleteForTablesAndColumns_name' => __('Enable autocomplete for table and column names'), - 'HideStructureActions_desc' => __('Whether the table structure actions should be hidden.'), - 'ShowColumnComments_name' => __('Show column comments'), - 'ShowColumnComments_desc' => __('Whether column comments should be shown in table structure view'), - 'HideStructureActions_name' => __('Hide table structure actions'), - 'DefaultTransformations_Hex_name' => __('Default transformations for Hex'), - 'DefaultTransformations_Hex_desc' => __('Values for options list for default transformations. These will be overwritten if transformation is filled in at table structure page.'), - 'DefaultTransformations_Substring_name' => __('Default transformations for Substring'), - 'DefaultTransformations_Substring_desc' => __('Values for options list for default transformations. These will be overwritten if transformation is filled in at table structure page.'), - 'DefaultTransformations_Bool2Text_name' => __('Default transformations for Bool2Text'), - 'DefaultTransformations_Bool2Text_desc' => __('Values for options list for default transformations. These will be overwritten if transformation is filled in at table structure page.'), - 'DefaultTransformations_External_name' => __('Default transformations for External'), - 'DefaultTransformations_External_desc' => __('Values for options list for default transformations. These will be overwritten if transformation is filled in at table structure page.'), - 'DefaultTransformations_PreApPend_name' => __('Default transformations for PreApPend'), - 'DefaultTransformations_PreApPend_desc' => __('Values for options list for default transformations. These will be overwrit |
