64 lines
1.9 KiB
PHP
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';
|
|
}
|
|
}
|