Skip to content

Commit

Permalink
Make all setup controllers implement InvocableController
Browse files Browse the repository at this point in the history
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
  • Loading branch information
MauricioFauth committed May 11, 2024
1 parent 32447c6 commit 0a681ea
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 57 deletions.
2 changes: 1 addition & 1 deletion app/services_controllers.php
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@
],
Setup\MainController::class => [
'class' => Setup\MainController::class,
'arguments' => ['@' . ResponseFactory::class, '@template', '@console'],
'arguments' => ['@' . ResponseFactory::class, '@response', '@template'],
],
Setup\ShowConfigController::class => [
'class' => Setup\ShowConfigController::class,
Expand Down
24 changes: 18 additions & 6 deletions src/Controllers/Setup/ConfigController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,33 @@

namespace PhpMyAdmin\Controllers\Setup;

use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Setup\ConfigGenerator;
use PhpMyAdmin\Setup\SetupHelper;
use PhpMyAdmin\Template;

use function is_string;

final class ConfigController
final class ConfigController implements InvocableController
{
public function __construct(private readonly Template $template)
{
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
private readonly Template $template,
) {
}

public function __invoke(ServerRequest $request): string
public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse();
foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}

$pages = SetupHelper::getPages();

static $hasCheckPageRefresh = false;
Expand All @@ -30,13 +42,13 @@ public function __invoke(ServerRequest $request): string

$config = ConfigGenerator::getConfigFile($configFile);

return $this->template->render('setup/config/index', [
return $response->write($this->template->render('setup/config/index', [
'formset' => $this->getFormSetParam($request->getQueryParam('formset')),
'pages' => $pages,
'eol' => $this->getEolParam($request->getQueryParam('eol')),
'config' => $config,
'has_check_page_refresh' => $hasCheckPageRefresh,
]);
]));
}

private function getFormSetParam(mixed $formSetParam): string
Expand Down
28 changes: 20 additions & 8 deletions src/Controllers/Setup/FormController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@
namespace PhpMyAdmin\Controllers\Setup;

use PhpMyAdmin\Config\Forms\Setup\SetupFormList;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Setup\FormProcessing;
use PhpMyAdmin\Setup\SetupHelper;
use PhpMyAdmin\Template;
Expand All @@ -16,25 +20,33 @@
use function ob_get_clean;
use function ob_start;

final class FormController
final class FormController implements InvocableController
{
public function __construct(private readonly Template $template)
{
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
private readonly Template $template,
) {
}

public function __invoke(ServerRequest $request): string
public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse();
foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}

$pages = SetupHelper::getPages();

$formSet = $this->getFormSetParam($request->getQueryParam('formset'));

$formClass = SetupFormList::get($formSet);
if ($formClass === null) {
return $this->template->render('error/generic', [
return $response->write($this->template->render('error/generic', [
'lang' => $GLOBALS['lang'] ?? 'en',
'dir' => LanguageManager::$textDir,
'error_message' => __('Incorrect form specified!'),
]);
]));
}

$configFile = SetupHelper::createConfigFile();
Expand All @@ -44,12 +56,12 @@ public function __invoke(ServerRequest $request): string
FormProcessing::process($form);
$page = ob_get_clean();

return $this->template->render('setup/form/index', [
return $response->write($this->template->render('setup/form/index', [
'formset' => $formSet,
'pages' => $pages,
'name' => $form::getName(),
'page' => $page,
]);
]));
}

private function getFormSetParam(mixed $formSetParam): string
Expand Down
24 changes: 18 additions & 6 deletions src/Controllers/Setup/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@

use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ServerConfigChecks;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Setup\Index;
use PhpMyAdmin\Setup\SetupHelper;
use PhpMyAdmin\Template;
Expand All @@ -17,14 +21,22 @@
use function is_scalar;
use function is_string;

final class HomeController
final class HomeController implements InvocableController
{
public function __construct(private readonly Template $template)
{
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
private readonly Template $template,
) {
}

public function __invoke(ServerRequest $request): string
public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse();
foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}

$pages = SetupHelper::getPages();

// message handling
Expand Down Expand Up @@ -87,7 +99,7 @@ public function __invoke(ServerRequest $request): string
$hasCheckPageRefresh = true;
}

return $this->template->render('setup/home/index', [
return $response->write($this->template->render('setup/home/index', [
'formset' => $this->getFormSetParam($request->getQueryParam('formset')),
'languages' => $languages,
'messages' => $messages,
Expand All @@ -98,7 +110,7 @@ public function __invoke(ServerRequest $request): string
'eol' => isset($_SESSION['eol']) && is_scalar($_SESSION['eol'])
? $_SESSION['eol']
: (Config::getInstance()->get('PMA_IS_WINDOWS') ? 'win' : 'unix'),
]);
]));
}

private function getFormSetParam(mixed $formSetParam): string
Expand Down
35 changes: 10 additions & 25 deletions src/Controllers/Setup/MainController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,13 @@

use Fig\Http\Message\StatusCodeInterface;
use PhpMyAdmin\Config;
use PhpMyAdmin\Console;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Header;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\LanguageManager;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;

use function __;
use function file_exists;
Expand All @@ -26,8 +24,8 @@ final class MainController implements InvocableController
{
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
private readonly Template $template,
private readonly Console $console,
) {
}

Expand All @@ -48,35 +46,22 @@ public function __invoke(ServerRequest $request): Response
$pageParam = $request->getQueryParam('page');
$page = in_array($pageParam, ['form', 'config', 'servers'], true) ? $pageParam : 'index';

$response = $this->responseFactory->createResponse();
$header = new Header($this->template, $this->console, $config);
foreach ($header->getHttpHeaders() as $name => $value) {
// Sent security-related headers
$response = $response->withHeader($name, $value);
}

if ($page === 'form') {
return $response->write((new FormController($this->template))($request));
return (new FormController($this->responseFactory, $this->responseRenderer, $this->template))($request);
}

if ($page === 'config') {
return $response->write((new ConfigController($this->template))($request));
return (new ConfigController($this->responseFactory, $this->responseRenderer, $this->template))($request);
}

if ($page === 'servers') {
if ($request->getQueryParam('mode') === 'remove' && $request->isPost()) {
(new ServerDestroyController())($request);
$response = $response->withStatus(StatusCodeInterface::STATUS_FOUND);

return $response->withHeader(
'Location',
'../setup/index.php' . Url::getCommonRaw(['route' => '/setup']),
);
}
if ($page === 'servers' && $request->getQueryParam('mode') === 'remove' && $request->isPost()) {
return (new ServerDestroyController($this->responseFactory, $this->responseRenderer))($request);
}

return $response->write((new ServersController($this->template))($request));
if ($page === 'servers') {
return (new ServersController($this->responseFactory, $this->responseRenderer, $this->template))($request);
}

return $response->write((new HomeController($this->template))($request));
return (new HomeController($this->responseFactory, $this->responseRenderer, $this->template))($request);
}
}
30 changes: 25 additions & 5 deletions src/Controllers/Setup/ServerDestroyController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,44 @@

namespace PhpMyAdmin\Controllers\Setup;

use Fig\Http\Message\StatusCodeInterface;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Setup\SetupHelper;
use PhpMyAdmin\Url;

use function is_numeric;

final class ServerDestroyController
final class ServerDestroyController implements InvocableController
{
public function __invoke(ServerRequest $request): void
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
) {
}

public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse();
foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}

$configFile = SetupHelper::createConfigFile();

$id = $this->getIdParam($request->getQueryParam('id'));
$hasServer = $id >= 1 && $configFile->get('Servers/' . $id) !== null;
if (! $hasServer) {
return;
if ($hasServer) {
$configFile->removeServer($id);
}

$configFile->removeServer($id);
return $response->withStatus(StatusCodeInterface::STATUS_FOUND)->withHeader(
'Location',
'../setup/index.php' . Url::getCommonRaw(['route' => '/setup']),
);
}

/** @psalm-return int<0, max> */
Expand Down
24 changes: 18 additions & 6 deletions src/Controllers/Setup/ServersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
namespace PhpMyAdmin\Controllers\Setup;

use PhpMyAdmin\Config\Forms\Setup\ServersForm;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Setup\FormProcessing;
use PhpMyAdmin\Setup\SetupHelper;
use PhpMyAdmin\Template;
Expand All @@ -16,14 +20,22 @@
use function ob_get_clean;
use function ob_start;

final class ServersController
final class ServersController implements InvocableController
{
public function __construct(private readonly Template $template)
{
public function __construct(
private readonly ResponseFactory $responseFactory,
private readonly ResponseRenderer $responseRenderer,
private readonly Template $template,
) {
}

public function __invoke(ServerRequest $request): string
public function __invoke(ServerRequest $request): Response
{
$response = $this->responseFactory->createResponse();
foreach ($this->responseRenderer->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}

$configFile = SetupHelper::createConfigFile();

$id = $this->getIdParam($request->getQueryParam('id'));
Expand All @@ -41,15 +53,15 @@ public function __invoke(ServerRequest $request): string
FormProcessing::process(new ServersForm($configFile, $id));
$page = ob_get_clean();

return $this->template->render('setup/servers/index', [
return $response->write($this->template->render('setup/servers/index', [
'formset' => $this->getFormSetParam($request->getQueryParam('formset')),
'pages' => $pages,
'has_server' => $hasServer,
'mode' => $mode,
'server_id' => $id,
'server_dsn' => $configFile->getServerDSN($id),
'page' => $page,
]);
]));
}

private function getFormSetParam(mixed $formSetParam): string
Expand Down

0 comments on commit 0a681ea

Please sign in to comment.