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\Http\Factory\ResponseFactory
;
11 use PhpMyAdmin\Http\Factory\ServerRequestFactory
;
12 use PhpMyAdmin\Http\Handler\ApplicationHandler
;
13 use PhpMyAdmin\Http\Handler\QueueRequestHandler
;
14 use PhpMyAdmin\Http\Middleware\Authentication
;
15 use PhpMyAdmin\Http\Middleware\ConfigErrorAndPermissionChecking
;
16 use PhpMyAdmin\Http\Middleware\ConfigLoading
;
17 use PhpMyAdmin\Http\Middleware\CurrentServerGlobalSetting
;
18 use PhpMyAdmin\Http\Middleware\DatabaseAndTableSetting
;
19 use PhpMyAdmin\Http\Middleware\DatabaseServerVersionChecking
;
20 use PhpMyAdmin\Http\Middleware\EncryptedQueryParamsHandling
;
21 use PhpMyAdmin\Http\Middleware\ErrorHandling
;
22 use PhpMyAdmin\Http\Middleware\LanguageAndThemeCookieSaving
;
23 use PhpMyAdmin\Http\Middleware\LanguageLoading
;
24 use PhpMyAdmin\Http\Middleware\LoginCookieValiditySetting
;
25 use PhpMyAdmin\Http\Middleware\MinimumCommonRedirection
;
26 use PhpMyAdmin\Http\Middleware\OutputBuffering
;
27 use PhpMyAdmin\Http\Middleware\PhpExtensionsChecking
;
28 use PhpMyAdmin\Http\Middleware\PhpSettingsConfiguration
;
29 use PhpMyAdmin\Http\Middleware\ProfilingChecking
;
30 use PhpMyAdmin\Http\Middleware\RequestProblemChecking
;
31 use PhpMyAdmin\Http\Middleware\ResponseRendererLoading
;
32 use PhpMyAdmin\Http\Middleware\RouteParsing
;
33 use PhpMyAdmin\Http\Middleware\ServerConfigurationChecking
;
34 use PhpMyAdmin\Http\Middleware\SessionHandling
;
35 use PhpMyAdmin\Http\Middleware\SetupPageRedirection
;
36 use PhpMyAdmin\Http\Middleware\SqlDelimiterSetting
;
37 use PhpMyAdmin\Http\Middleware\SqlQueryGlobalSetting
;
38 use PhpMyAdmin\Http\Middleware\ThemeInitialization
;
39 use PhpMyAdmin\Http\Middleware\TokenMismatchChecking
;
40 use PhpMyAdmin\Http\Middleware\TokenRequestParamChecking
;
41 use PhpMyAdmin\Http\Middleware\TrackerEnabling
;
42 use PhpMyAdmin\Http\Middleware\UriSchemeUpdating
;
43 use PhpMyAdmin\Http\Middleware\UrlParamsSetting
;
44 use PhpMyAdmin\Http\Middleware\UrlRedirection
;
45 use PhpMyAdmin\Http\Middleware\UserPreferencesLoading
;
46 use PhpMyAdmin\Http\Middleware\ZeroConfPostConnection
;
47 use PhpMyAdmin\Http\Response
;
48 use PhpMyAdmin\Http\ServerRequest
;
49 use PhpMyAdmin\Routing\Routing
;
50 use Psr\Http\Message\ResponseInterface
;
51 use Psr\Http\Message\ServerRequestInterface
;
58 public function __construct(
59 private readonly ErrorHandler
$errorHandler,
60 private readonly Config
$config,
61 private readonly Template
$template,
62 private readonly ResponseFactory
$responseFactory,
66 public static function init(): self
68 /** @var Application $application */
69 $application = Core
::getContainerBuilder()->get(self
::class);
74 public function run(bool $isSetupPage = false): void
76 $requestHandler = new QueueRequestHandler(new ApplicationHandler($this));
77 $requestHandler->add(new ErrorHandling($this->errorHandler
));
78 $requestHandler->add(new OutputBuffering());
79 $requestHandler->add(new PhpExtensionsChecking($this->template
, $this->responseFactory
));
80 $requestHandler->add(new ServerConfigurationChecking($this->template
, $this->responseFactory
));
81 $requestHandler->add(new PhpSettingsConfiguration());
82 $requestHandler->add(new RouteParsing());
83 $requestHandler->add(new ConfigLoading($this->config
, $this->template
, $this->responseFactory
));
84 $requestHandler->add(new UriSchemeUpdating($this->config
));
85 $requestHandler->add(new SessionHandling(
89 $this->responseFactory
,
91 $requestHandler->add(new EncryptedQueryParamsHandling());
92 $requestHandler->add(new UrlParamsSetting($this->config
));
93 $requestHandler->add(new TokenRequestParamChecking());
94 $requestHandler->add(new DatabaseAndTableSetting());
95 $requestHandler->add(new SqlQueryGlobalSetting());
96 $requestHandler->add(new LanguageLoading());
97 $requestHandler->add(new ConfigErrorAndPermissionChecking(
100 $this->responseFactory
,
102 $requestHandler->add(new RequestProblemChecking($this->template
, $this->responseFactory
));
103 $requestHandler->add(new CurrentServerGlobalSetting($this->config
));
104 $requestHandler->add(new ThemeInitialization());
105 $requestHandler->add(new UrlRedirection($this->config
));
106 $requestHandler->add(new SetupPageRedirection($this->config
, $this->responseFactory
));
107 $requestHandler->add(new MinimumCommonRedirection($this->config
, $this->responseFactory
));
108 $requestHandler->add(new LanguageAndThemeCookieSaving($this->config
));
109 $requestHandler->add(new LoginCookieValiditySetting($this->config
));
110 $requestHandler->add(new Authentication($this->config
, $this->template
, $this->responseFactory
));
111 $requestHandler->add(new DatabaseServerVersionChecking($this->config
, $this->template
, $this->responseFactory
));
112 $requestHandler->add(new SqlDelimiterSetting($this->config
));
113 $requestHandler->add(new ResponseRendererLoading($this->config
));
114 $requestHandler->add(new TokenMismatchChecking());
115 $requestHandler->add(new ProfilingChecking());
116 $requestHandler->add(new UserPreferencesLoading($this->config
));
117 $requestHandler->add(new TrackerEnabling());
118 $requestHandler->add(new ZeroConfPostConnection($this->config
));
120 $runner = new RequestHandlerRunner(
123 static fn (): ServerRequestInterface
=> ServerRequestFactory
::create()
125 ->withAttribute('isSetupPage', $isSetupPage),
126 function (Throwable
$throwable): ResponseInterface
{
127 $response = $this->responseFactory
->createResponse(StatusCodeInterface
::STATUS_INTERNAL_SERVER_ERROR
);
128 $response->getBody()->write(sprintf('An error occurred: %s', $throwable->getMessage()));
137 public function handle(ServerRequest
$request): Response|
null
139 return Routing
::callControllerForRoute(
141 Routing
::getDispatcher(),
142 Core
::getContainerBuilder(),
143 $this->responseFactory
,