3 declare(strict_types
=1);
7 use Fig\Http\Message\StatusCodeInterface
;
8 use Laminas\HttpHandlerRunner\Emitter\SapiEmitter
;
9 use Laminas\HttpHandlerRunner\RequestHandlerRunner
;
10 use PhpMyAdmin\Container\ContainerBuilder
;
11 use PhpMyAdmin\Http\Factory\ResponseFactory
;
12 use PhpMyAdmin\Http\Factory\ServerRequestFactory
;
13 use PhpMyAdmin\Http\Handler\ApplicationHandler
;
14 use PhpMyAdmin\Http\Handler\QueueRequestHandler
;
15 use PhpMyAdmin\Http\Middleware\Authentication
;
16 use PhpMyAdmin\Http\Middleware\ConfigErrorAndPermissionChecking
;
17 use PhpMyAdmin\Http\Middleware\ConfigLoading
;
18 use PhpMyAdmin\Http\Middleware\CurrentServerGlobalSetting
;
19 use PhpMyAdmin\Http\Middleware\DatabaseAndTableSetting
;
20 use PhpMyAdmin\Http\Middleware\DatabaseServerVersionChecking
;
21 use PhpMyAdmin\Http\Middleware\EncryptedQueryParamsHandling
;
22 use PhpMyAdmin\Http\Middleware\ErrorHandling
;
23 use PhpMyAdmin\Http\Middleware\LanguageAndThemeCookieSaving
;
24 use PhpMyAdmin\Http\Middleware\LanguageLoading
;
25 use PhpMyAdmin\Http\Middleware\LoginCookieValiditySetting
;
26 use PhpMyAdmin\Http\Middleware\MinimumCommonRedirection
;
27 use PhpMyAdmin\Http\Middleware\OutputBuffering
;
28 use PhpMyAdmin\Http\Middleware\PhpExtensionsChecking
;
29 use PhpMyAdmin\Http\Middleware\PhpSettingsConfiguration
;
30 use PhpMyAdmin\Http\Middleware\ProfilingChecking
;
31 use PhpMyAdmin\Http\Middleware\RequestProblemChecking
;
32 use PhpMyAdmin\Http\Middleware\ResponseRendererLoading
;
33 use PhpMyAdmin\Http\Middleware\RouteParsing
;
34 use PhpMyAdmin\Http\Middleware\ServerConfigurationChecking
;
35 use PhpMyAdmin\Http\Middleware\SessionHandling
;
36 use PhpMyAdmin\Http\Middleware\SetupPageRedirection
;
37 use PhpMyAdmin\Http\Middleware\SqlDelimiterSetting
;
38 use PhpMyAdmin\Http\Middleware\SqlQueryGlobalSetting
;
39 use PhpMyAdmin\Http\Middleware\ThemeInitialization
;
40 use PhpMyAdmin\Http\Middleware\TokenMismatchChecking
;
41 use PhpMyAdmin\Http\Middleware\TokenRequestParamChecking
;
42 use PhpMyAdmin\Http\Middleware\TrackerEnabling
;
43 use PhpMyAdmin\Http\Middleware\UriSchemeUpdating
;
44 use PhpMyAdmin\Http\Middleware\UrlParamsSetting
;
45 use PhpMyAdmin\Http\Middleware\UrlRedirection
;
46 use PhpMyAdmin\Http\Middleware\UserPreferencesLoading
;
47 use PhpMyAdmin\Http\Middleware\ZeroConfPostConnection
;
48 use PhpMyAdmin\Http\Response
;
49 use PhpMyAdmin\Http\ServerRequest
;
50 use PhpMyAdmin\Routing\Routing
;
51 use Psr\Http\Message\ResponseInterface
;
52 use Psr\Http\Message\ServerRequestInterface
;
59 public function __construct(
60 private readonly ErrorHandler
$errorHandler,
61 private readonly Config
$config,
62 private readonly Template
$template,
63 private readonly ResponseFactory
$responseFactory,
67 public static function init(): self
69 /** @var Application $application */
70 $application = ContainerBuilder
::getContainer()->get(self
::class);
75 public function run(bool $isSetupPage = false): void
77 $requestHandler = new QueueRequestHandler(new ApplicationHandler($this));
78 $requestHandler->add(new ErrorHandling($this->errorHandler
));
79 $requestHandler->add(new OutputBuffering());
80 $requestHandler->add(new PhpExtensionsChecking($this->template
, $this->responseFactory
));
81 $requestHandler->add(new ServerConfigurationChecking($this->template
, $this->responseFactory
));
82 $requestHandler->add(new PhpSettingsConfiguration());
83 $requestHandler->add(new RouteParsing());
84 $requestHandler->add(new ConfigLoading($this->config
, $this->template
, $this->responseFactory
));
85 $requestHandler->add(new UriSchemeUpdating($this->config
));
86 $requestHandler->add(new SessionHandling(
90 $this->responseFactory
,
92 $requestHandler->add(new EncryptedQueryParamsHandling());
93 $requestHandler->add(new UrlParamsSetting($this->config
));
94 $requestHandler->add(new TokenRequestParamChecking());
95 $requestHandler->add(new DatabaseAndTableSetting());
96 $requestHandler->add(new SqlQueryGlobalSetting());
97 $requestHandler->add(new LanguageLoading());
98 $requestHandler->add(new ConfigErrorAndPermissionChecking(
101 $this->responseFactory
,
103 $requestHandler->add(new RequestProblemChecking($this->template
, $this->responseFactory
));
104 $requestHandler->add(new CurrentServerGlobalSetting($this->config
));
105 $requestHandler->add(new ThemeInitialization());
106 $requestHandler->add(new UrlRedirection($this->config
));
107 $requestHandler->add(new SetupPageRedirection($this->config
, $this->responseFactory
));
108 $requestHandler->add(new MinimumCommonRedirection($this->config
, $this->responseFactory
));
109 $requestHandler->add(new LanguageAndThemeCookieSaving($this->config
));
110 $requestHandler->add(new LoginCookieValiditySetting($this->config
));
111 $requestHandler->add(new Authentication($this->config
, $this->template
, $this->responseFactory
));
112 $requestHandler->add(new DatabaseServerVersionChecking($this->config
, $this->template
, $this->responseFactory
));
113 $requestHandler->add(new SqlDelimiterSetting($this->config
));
114 $requestHandler->add(new ResponseRendererLoading($this->config
));
115 $requestHandler->add(new TokenMismatchChecking());
116 $requestHandler->add(new ProfilingChecking());
117 $requestHandler->add(new UserPreferencesLoading($this->config
));
118 $requestHandler->add(new TrackerEnabling());
119 $requestHandler->add(new ZeroConfPostConnection($this->config
));
121 $runner = new RequestHandlerRunner(
124 static fn (): ServerRequestInterface
=> ServerRequestFactory
::create()
126 ->withAttribute('isSetupPage', $isSetupPage),
127 function (Throwable
$throwable): ResponseInterface
{
128 $response = $this->responseFactory
->createResponse(StatusCodeInterface
::STATUS_INTERNAL_SERVER_ERROR
);
129 $response->getBody()->write(sprintf('An error occurred: %s', $throwable->getMessage()));
138 public function handle(ServerRequest
$request): Response|
null
140 return Routing
::callControllerForRoute(
142 Routing
::getDispatcher(),
143 ContainerBuilder
::getContainer(),
144 $this->responseFactory
,