phpmyadmin/libraries/classes/Middleware/MinimumCommonRedirection.php
Maurício Meneghini Fauth 5bee001cd5
Create the MinimumCommonRedirection middleware
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2023-08-16 20:51:24 -03:00

64 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Exceptions\ExitException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Routing;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\Tracking\Tracker;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use function assert;
final class MinimumCommonRedirection implements MiddlewareInterface
{
public function __construct(private readonly Config $config, private readonly ResponseFactory $responseFactory)
{
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if (! $this->isMinimumCommon($request->getAttribute('route'))) {
return $handler->handle($request);
}
$container = Core::getContainerBuilder();
/** @var ThemeManager $themeManager */
$themeManager = $container->get(ThemeManager::class);
$this->config->loadUserPreferences($themeManager, true);
Tracker::enable();
assert($request instanceof ServerRequest);
try {
$response = Routing::callControllerForRoute(
$request,
Routing::getDispatcher(),
$container,
$this->responseFactory,
);
if ($response === null) {
throw new ExitException();
}
} catch (ExitException) {
$response = ResponseRenderer::getInstance()->response();
}
return $response;
}
private function isMinimumCommon(mixed $route): bool
{
return $route === '/import-status' || $route === '/messages';
}
}