diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Controllers/Setup')
5 files changed, 469 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Setup/AbstractController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/AbstractController.php new file mode 100644 index 0000000..8dae377 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/AbstractController.php @@ -0,0 +1,70 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Holds the PhpMyAdmin\Controllers\Setup\AbstractController + * + * @package PhpMyAdmin\Controllers\Setup + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Controllers\Setup; + +use PhpMyAdmin\Config\ConfigFile; +use PhpMyAdmin\Config\Forms\BaseForm; +use PhpMyAdmin\Config\Forms\Setup\SetupFormList; +use PhpMyAdmin\Template; + +/** + * Class AbstractController + * @package PhpMyAdmin\Controllers\Setup + */ +abstract class AbstractController +{ + /** + * @var ConfigFile + */ + protected $config; + + /** + * @var Template + */ + protected $template; + + /** + * AbstractController constructor. + * + * @param ConfigFile $config ConfigFile instance + * @param Template $template Template instance + */ + public function __construct($config, $template) + { + $this->config = $config; + $this->template = $template; + } + + /** + * @return array + */ + protected function getPages(): array + { + $ignored = [ + 'Config', + 'Servers', + ]; + $pages = []; + foreach (SetupFormList::getAll() as $formset) { + if (in_array($formset, $ignored)) { + continue; + } + /** @var BaseForm $formClass */ + $formClass = SetupFormList::get($formset); + + $pages[$formset] = [ + 'name' => $formClass::getName(), + 'formset' => $formset, + ]; + } + + return $pages; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ConfigController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ConfigController.php new file mode 100644 index 0000000..f6e37a2 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ConfigController.php @@ -0,0 +1,55 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Holds the PhpMyAdmin\Controllers\Setup\ConfigController + * + * @package PhpMyAdmin\Controllers\Setup + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Controllers\Setup; + +use PhpMyAdmin\Config\FormDisplayTemplate; +use PhpMyAdmin\Core; +use PhpMyAdmin\Setup\ConfigGenerator; + +/** + * Class ConfigController + * @package PhpMyAdmin\Controllers\Setup + */ +class ConfigController extends AbstractController +{ + /** + * @param array $params Request parameters + * @return string HTML + */ + public function index(array $params): string + { + $pages = $this->getPages(); + + $formDisplayTemplate = new FormDisplayTemplate($GLOBALS['PMA_Config']); + + $formTop = $formDisplayTemplate->displayFormTop('config.php'); + $fieldsetTop = $formDisplayTemplate->displayFieldsetTop( + 'config.inc.php', + '', + null, + ['class' => 'simple'] + ); + $formBottom = $formDisplayTemplate->displayFieldsetBottom(false); + $fieldsetBottom = $formDisplayTemplate->displayFormBottom(); + + $config = ConfigGenerator::getConfigFile($this->config); + + return $this->template->render('setup/config/index', [ + 'formset' => $params['formset'] ?? '', + 'pages' => $pages, + 'form_top_html' => $formTop, + 'fieldset_top_html' => $fieldsetTop, + 'form_bottom_html' => $formBottom, + 'fieldset_bottom_html' => $fieldsetBottom, + 'eol' => Core::ifSetOr($params['eol'], 'unix'), + 'config' => $config, + ]); + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Setup/FormController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/FormController.php new file mode 100644 index 0000000..c2caf01 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/FormController.php @@ -0,0 +1,50 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Holds the PhpMyAdmin\Controllers\Setup\FormController + * + * @package PhpMyAdmin\Controllers\Setup + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Controllers\Setup; + +use PhpMyAdmin\Config\Forms\BaseForm; +use PhpMyAdmin\Config\Forms\Setup\SetupFormList; +use PhpMyAdmin\Core; +use PhpMyAdmin\Setup\FormProcessing; + +/** + * Class FormController + * @package PhpMyAdmin\Controllers\Setup + */ +class FormController extends AbstractController +{ + /** + * @param array $params Request parameters + * @return string HTML + */ + public function index(array $params): string + { + $pages = $this->getPages(); + + $formset = Core::isValid($params['formset'], 'scalar') ? $params['formset'] : null; + + /** @var BaseForm $formClass */ + $formClass = SetupFormList::get($formset); + if ($formClass === null) { + Core::fatalError(__('Incorrect form specified!')); + } + + ob_start(); + FormProcessing::process(new $formClass($this->config)); + $page = ob_get_clean(); + + return $this->template->render('setup/form/index', [ + 'formset' => $params['formset'] ?? '', + 'pages' => $pages, + 'name' => $formClass::getName(), + 'page' => $page, + ]); + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Setup/HomeController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/HomeController.php new file mode 100644 index 0000000..37e3ea2 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/HomeController.php @@ -0,0 +1,228 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Holds the PhpMyAdmin\Controllers\Setup\HomeController + * + * @package PhpMyAdmin\Controllers\Setup + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Controllers\Setup; + +use PhpMyAdmin\Config\FormDisplay; +use PhpMyAdmin\Config\FormDisplayTemplate; +use PhpMyAdmin\Config\ServerConfigChecks; +use PhpMyAdmin\Core; +use PhpMyAdmin\LanguageManager; +use PhpMyAdmin\Sanitize; +use PhpMyAdmin\Setup\Index; + +/** + * Class HomeController + * @package PhpMyAdmin\Controllers\Setup + */ +class HomeController extends AbstractController +{ + /** + * @param array $params Request parameters + * @return string HTML + */ + public function index(array $params): string + { + $pages = $this->getPages(); + + // Handle done action info + $actionDone = Core::isValid($params['action_done'], 'scalar') ? $params['action_done'] : null; + $actionDone = preg_replace('/[^a-z_]/', '', $actionDone); + + // message handling + Index::messagesBegin(); + + // Check phpMyAdmin version + if (isset($params['version_check'])) { + Index::versionCheck(); + } + + // Perform various security, compatibility and consistency checks + $configChecker = new ServerConfigChecks($this->config); + $configChecker->performConfigChecks(); + + $text = __( + 'You are not using a secure connection; all data (including potentially ' + . 'sensitive information, like passwords) is transferred unencrypted!' + ); + $text .= ' <a href="#">'; + $text .= __( + 'If your server is also configured to accept HTTPS requests ' + . 'follow this link to use a secure connection.' + ); + $text .= '</a>'; + Index::messagesSet('notice', 'no_https', __('Insecure connection'), $text); + + // Check for done action info and set notice message if present + switch ($actionDone) { + case 'config_saved': + /* Use uniqid to display this message every time configuration is saved */ + Index::messagesSet( + 'notice', + uniqid('config_saved'), + __('Configuration saved.'), + Sanitize::sanitizeMessage( + __( + 'Configuration saved to file config/config.inc.php in phpMyAdmin ' + . 'top level directory, copy it to top level one and delete ' + . 'directory config to use it.' + ) + ) + ); + break; + case 'config_not_saved': + /* Use uniqid to display this message every time configuration is saved */ + Index::messagesSet( + 'notice', + uniqid('config_not_saved'), + __('Configuration not saved!'), + Sanitize::sanitizeMessage( + __( + 'Please create web server writable folder [em]config[/em] in ' + . 'phpMyAdmin top level directory as described in ' + . '[doc@setup_script]documentation[/doc]. Otherwise you will be ' + . 'only able to download or display it.' + ) + ) + ); + break; + default: + break; + } + + Index::messagesEnd(); + $messages = Index::messagesShowHtml(); + + $formDisplay = new FormDisplay($this->config); + + $defaultLanguageOptions = [ + 'doc' => $formDisplay->getDocLink('DefaultLang'), + 'values' => [], + 'values_escaped' => true, + ]; + + // prepare unfiltered language list + $sortedLanguages = LanguageManager::getInstance()->sortedLanguages(); + $languages = []; + foreach ($sortedLanguages as $language) { + $languages[] = [ + 'code' => $language->getCode(), + 'name' => $language->getName(), + 'is_active' => $language->isActive(), + ]; + $defaultLanguageOptions['values'][$language->getCode()] = $language->getName(); + } + + $serverDefaultOptions = [ + 'doc' => $formDisplay->getDocLink('ServerDefault'), + 'values' => [], + 'values_disabled' => [], + ]; + + $servers = []; + if ($this->config->getServerCount() > 0) { + $serverDefaultOptions['values']['0'] = __('let the user choose'); + $serverDefaultOptions['values']['-'] = '------------------------------'; + if ($this->config->getServerCount() === 1) { + $serverDefaultOptions['values_disabled'][] = '0'; + } + $serverDefaultOptions['values_disabled'][] = '-'; + + foreach ($this->config->getServers() as $id => $server) { + $servers[$id] = [ + 'id' => $id, + 'name' => $this->config->getServerName($id), + 'auth_type' => $this->config->getValue("Servers/$id/auth_type"), + 'dsn' => $this->config->getServerDSN($id), + 'params' => [ + 'token' => $_SESSION[' PMA_token '], + 'edit' => [ + 'page' => 'servers', + 'mode' => 'edit', + 'id' => $id, + ], + 'remove' => [ + 'page' => 'servers', + 'mode' => 'remove', + 'id' => $id, + ], + ], + ]; + $serverDefaultOptions['values'][(string) $id] = $this->config->getServerName($id) . " [$id]"; + } + } else { + $serverDefaultOptions['values']['1'] = __('- none -'); + $serverDefaultOptions['values_escaped'] = true; + } + + $formDisplayTemplate = new FormDisplayTemplate($GLOBALS['PMA_Config']); + $serversFormTopHtml = $formDisplayTemplate->displayFormTop( + 'index.php', + 'get', + [ + 'page' => 'servers', + 'mode' => 'add', + ] + ); + $configFormTopHtml = $formDisplayTemplate->displayFormTop('config.php'); + $formBottomHtml = $formDisplayTemplate->displayFormBottom(); + + $defaultLanguageInput = $formDisplayTemplate->displayInput( + 'DefaultLang', + __('Default language'), + 'select', + $this->config->getValue('DefaultLang'), + '', + true, + $defaultLanguageOptions + ); + $serverDefaultInput = $formDisplayTemplate->displayInput( + 'ServerDefault', + __('Default server'), + 'select', + $this->config->getValue('ServerDefault'), + '', + true, + $serverDefaultOptions + ); + + $eolOptions = [ + 'values' => [ + 'unix' => 'UNIX / Linux (\n)', + 'win' => 'Windows (\r\n)', + ], + 'values_escaped' => true, + ]; + $eol = Core::ifSetOr($_SESSION['eol'], (PMA_IS_WINDOWS ? 'win' : 'unix')); + $eolInput = $formDisplayTemplate->displayInput( + 'eol', + __('End of line'), + 'select', + $eol, + '', + true, + $eolOptions + ); + + return $this->template->render('setup/home/index', [ + 'formset' => $params['formset'] ?? '', + 'languages' => $languages, + 'messages' => $messages, + 'servers_form_top_html' => $serversFormTopHtml, + 'config_form_top_html' => $configFormTopHtml, + 'form_bottom_html' => $formBottomHtml, + 'server_count' => $this->config->getServerCount(), + 'servers' => $servers, + 'default_language_input' => $defaultLanguageInput, + 'server_default_input' => $serverDefaultInput, + 'eol_input' => $eolInput, + 'pages' => $pages, + ]); + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ServersController.php b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ServersController.php new file mode 100644 index 0000000..eedb94e --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Controllers/Setup/ServersController.php @@ -0,0 +1,66 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Holds the PhpMyAdmin\Controllers\Setup\ServersController + * + * @package PhpMyAdmin\Controllers\Setup + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Controllers\Setup; + +use PhpMyAdmin\Config\Forms\Setup\ServersForm; +use PhpMyAdmin\Core; +use PhpMyAdmin\Setup\FormProcessing; + +/** + * Class ServersController + * @package PhpMyAdmin\Controllers\Setup + */ +class ServersController extends AbstractController +{ + /** + * @param array $params Request parameters + * @return string HTML + */ + public function index(array $params): string + { + $pages = $this->getPages(); + + $id = Core::isValid($params['id'], 'numeric') ? (int) $params['id'] : null; + $hasServer = ! empty($id) && $this->config->get("Servers/$id") !== null; + + if (! $hasServer && ($params['mode'] !== 'revert' && $params['mode'] !== 'edit')) { + $id = 0; + } + + ob_start(); + FormProcessing::process(new ServersForm($this->config, $id)); + $page = ob_get_clean(); + + return $this->template->render('setup/servers/index', [ + 'formset' => $params['formset'] ?? '', + 'pages' => $pages, + 'has_server' => $hasServer, + 'mode' => $params['mode'], + 'server_id' => $id, + 'server_dsn' => $this->config->getServerDSN($id), + 'page' => $page, + ]); + } + + /** + * @param array $params Request parameters + * @return void + */ + public function destroy(array $params): void + { + $id = Core::isValid($params['id'], 'numeric') ? (int) $params['id'] : null; + + $hasServer = ! empty($id) && $this->config->get("Servers/$id") !== null; + + if ($hasServer) { + $this->config->removeServer($id); + } + } +} |
