aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/Controllers/Setup
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/Controllers/Setup
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Controllers/Setup')
-rw-r--r--srcs/phpmyadmin/libraries/classes/Controllers/Setup/AbstractController.php70
-rw-r--r--srcs/phpmyadmin/libraries/classes/Controllers/Setup/ConfigController.php55
-rw-r--r--srcs/phpmyadmin/libraries/classes/Controllers/Setup/FormController.php50
-rw-r--r--srcs/phpmyadmin/libraries/classes/Controllers/Setup/HomeController.php228
-rw-r--r--srcs/phpmyadmin/libraries/classes/Controllers/Setup/ServersController.php66
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);
+ }
+ }
+}