‪TYPO3CMS  ‪main
InstallerController.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Doctrine\DBAL\DriverManager;
21 use Psr\Http\Message\ResponseInterface;
22 use Psr\Http\Message\ServerRequestInterface;
25 use TYPO3\CMS\Core\Configuration\ConfigurationManager;
62 use TYPO3Fluid\Fluid\View\TemplateView as FluidTemplateView;
63 
71 {
73 
74  public function ‪__construct(
75  private readonly ‪LateBootService $lateBootService,
76  private readonly ‪SilentConfigurationUpgradeService $silentConfigurationUpgradeService,
77  private readonly ‪SilentTemplateFileUpgradeService $silentTemplateFileUpgradeService,
78  private readonly ConfigurationManager $configurationManager,
79  private readonly ‪FailsafePackageManager $packageManager,
80  private readonly ‪VerifyHostHeader $verifyHostHeader,
81  private readonly ‪FormProtectionFactory $formProtectionFactory,
82  private readonly ‪SetupService $setupService,
83  private readonly ‪SetupDatabaseService $setupDatabaseService,
84  private readonly ‪HashService $hashService,
85  ) {}
86 
90  public function ‪initAction(ServerRequestInterface $request): ResponseInterface
91  {
92  $bust = ‪$GLOBALS['EXEC_TIME'];
93  if (!‪Environment::getContext()->isDevelopment()) {
94  $bust = $this->hashService->hmac((new ‪Typo3Version()) . ‪Environment::getProjectPath(), self::class);
95  }
96  $packages = [
97  $this->packageManager->getPackage('core'),
98  $this->packageManager->getPackage('backend'),
99  $this->packageManager->getPackage('install'),
100  ];
101  $importMap = new ImportMap($this->hashService, $packages);
102  $sitePath = $request->getAttribute('normalizedParams')->getSitePath();
103  $initModule = $sitePath . $importMap->resolveImport('@typo3/install/init-installer.js');
104  $view = $this->‪initializeView();
105  $view->assign('bust', $bust);
106  $view->assign('initModule', $initModule);
107  $nonce = new ConsumableNonce();
108  $view->assign('importmap', $importMap->render($sitePath, $nonce));
109 
110  return new HtmlResponse(
111  $view->render('Installer/Init'),
112  200,
113  [
114  'Content-Security-Policy' => $this->createContentSecurityPolicy()->compile($nonce),
115  'Cache-Control' => 'no-cache, no-store',
116  'Pragma' => 'no-cache',
117  ]
118  );
119  }
120 
124  public function ‪mainLayoutAction(ServerRequestInterface $request): ResponseInterface
125  {
126  $view = $this->‪initializeView();
127  return new JsonResponse([
128  'success' => true,
129  'html' => $view->render('Installer/MainLayout'),
130  ]);
131  }
132 
136  public function ‪showInstallerNotAvailableAction(): ResponseInterface
137  {
138  $view = $this->‪initializeView();
139  return new JsonResponse([
140  'success' => true,
141  'html' => $view->render('Installer/ShowInstallerNotAvailable'),
142  ]);
143  }
144 
148  public function ‪checkEnvironmentAndFoldersAction(): ResponseInterface
149  {
150  return new JsonResponse([
151  'success' => @is_file($this->configurationManager->getSystemConfigurationFileLocation()),
152  ]);
153  }
154 
158  public function ‪showEnvironmentAndFoldersAction(ServerRequestInterface $request): ResponseInterface
159  {
160  $view = $this->‪initializeView();
161  $systemCheckMessageQueue = new FlashMessageQueue('install');
162  $checkMessages = (new Check())->getStatus();
163  foreach ($checkMessages as $message) {
164  $systemCheckMessageQueue->enqueue($message);
165  }
166  $setupCheckMessages = (new SetupCheck())->getStatus();
167  foreach ($setupCheckMessages as $message) {
168  $systemCheckMessageQueue->enqueue($message);
169  }
170  $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
171  $structureFacade = $folderStructureFactory->getStructure(‪WebserverType::fromRequest($request));
172  $structureMessageQueue = $structureFacade->getStatus();
173  return new JsonResponse([
174  'success' => true,
175  'html' => $view->render('Installer/ShowEnvironmentAndFolders'),
176  'environmentStatusErrors' => $systemCheckMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR),
177  'environmentStatusWarnings' => $systemCheckMessageQueue->getAllMessages(ContextualFeedbackSeverity::WARNING),
178  'structureErrors' => $structureMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR),
179  ]);
180  }
181 
185  public function ‪executeEnvironmentAndFoldersAction(ServerRequestInterface $request): ResponseInterface
186  {
187  $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
188  $structureFacade = $folderStructureFactory->getStructure(‪WebserverType::fromRequest($request));
189  $structureFixMessageQueue = $structureFacade->fix();
190  $errorsFromStructure = $structureFixMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR);
191 
192  if (@is_dir(‪Environment::getLegacyConfigPath())) {
193  $this->configurationManager->createLocalConfigurationFromFactoryConfiguration();
194  // Create a PackageStates.php with all packages activated marked as "part of factory default"
195  $this->packageManager->recreatePackageStatesFileIfMissing(true);
196  $extensionConfiguration = new ExtensionConfiguration();
197  $extensionConfiguration->synchronizeExtConfTemplateWithLocalConfigurationOfAllExtensions();
198 
199  return new JsonResponse([
200  'success' => true,
201  ]);
202  }
203  return new JsonResponse([
204  'success' => false,
205  'status' => $errorsFromStructure,
206  ]);
207  }
208 
212  public function ‪checkTrustedHostsPatternAction(ServerRequestInterface $request): ResponseInterface
213  {
214  $serverParams = $request->getServerParams();
215  $host = $serverParams['HTTP_HOST'] ?? '';
216 
217  return new JsonResponse([
218  'success' => $this->verifyHostHeader->isAllowedHostHeaderValue($host, $serverParams),
219  ]);
220  }
221 
225  public function ‪executeAdjustTrustedHostsPatternAction(ServerRequestInterface $request): ResponseInterface
226  {
227  $serverParams = $request->getServerParams();
228  $host = $serverParams['HTTP_HOST'] ?? '';
229 
230  if (!$this->verifyHostHeader->isAllowedHostHeaderValue($host, $serverParams)) {
231  $this->configurationManager->setLocalConfigurationValueByPath('SYS/trustedHostsPattern', '.*');
232  }
233  return new JsonResponse([
234  'success' => true,
235  ]);
236  }
237 
243  public function ‪executeSilentConfigurationUpdateAction(): ResponseInterface
244  {
245  $success = true;
246  try {
247  $this->silentConfigurationUpgradeService->execute();
248  } catch (ConfigurationChangedException) {
249  $success = false;
250  } catch (SettingsWriteException $e) {
251  throw new SilentConfigurationUpgradeReadonlyException(code: 1688464086, throwable: $e);
252  }
253  return new JsonResponse([
254  'success' => $success,
255  ]);
256  }
257 
263  public function ‪executeSilentTemplateFileUpdateAction(): ResponseInterface
264  {
265  $success = true;
266  try {
267  $this->silentTemplateFileUpgradeService->execute();
268  } catch (TemplateFileChangedException $e) {
269  $success = false;
270  }
271  return new JsonResponse([
272  'success' => $success,
273  ]);
274  }
275 
279  public function ‪checkDatabaseConnectAction(): ResponseInterface
280  {
281  return new JsonResponse([
282  'success' => $this->setupDatabaseService->isDatabaseConfigurationComplete() && $this->setupDatabaseService->isDatabaseConnectSuccessful(),
283  ]);
284  }
285 
289  public function ‪showDatabaseConnectAction(ServerRequestInterface $request): ResponseInterface
290  {
291  $view = $this->‪initializeView();
292 
293  $driverOptions = $this->setupDatabaseService->getDriverOptions();
294  $formProtection = $this->formProtectionFactory->createFromRequest($request);
295  $driverOptions['executeDatabaseConnectToken'] = $formProtection->generateToken('installTool', 'executeDatabaseConnect');
296  $view->assignMultiple($driverOptions);
297 
298  return new JsonResponse([
299  'success' => true,
300  'html' => $view->render('Installer/ShowDatabaseConnect'),
301  ]);
302  }
303 
307  public function ‪executeDatabaseConnectAction(ServerRequestInterface $request): ResponseInterface
308  {
309  $postValues = $request->getParsedBody()['install']['values'];
310  [$success, $messages] = $this->setupDatabaseService->setDefaultConnectionSettings($postValues);
311 
312  return new JsonResponse([
313  'success' => $success,
314  'status' => $messages,
315  ]);
316  }
317 
321  public function ‪checkDatabaseSelectAction(): ResponseInterface
322  {
323  return new JsonResponse([
324  'success' => $this->setupDatabaseService->checkDatabaseSelect(),
325  ]);
326  }
327 
331  public function ‪showDatabaseSelectAction(ServerRequestInterface $request): ResponseInterface
332  {
333  $view = $this->‪initializeView();
334  $formProtection = $this->formProtectionFactory->createFromRequest($request);
335  ‪$errors = [];
336  try {
337  $view->assign('databaseList', $this->setupDatabaseService->getDatabaseList());
338  } catch (\Exception $exception) {
339  ‪$errors[] = $exception->getMessage();
340  }
341  $view->assignMultiple([
342  'errors' => ‪$errors,
343  'executeDatabaseSelectToken' => $formProtection->generateToken('installTool', 'executeDatabaseSelect'),
344  'executeCheckDatabaseRequirementsToken' => $formProtection->generateToken('installTool', 'checkDatabaseRequirements'),
345  ]);
346  return new JsonResponse([
347  'success' => true,
348  'html' => $view->render('Installer/ShowDatabaseSelect'),
349  ]);
350  }
351 
355  public function ‪checkDatabaseRequirementsAction(ServerRequestInterface $request): ResponseInterface
356  {
357  $success = true;
358  $messages = [];
359  $databaseDriverName = ‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['driver'];
360 
361  $databaseName = $this->‪retrieveDatabaseNameFromRequest($request);
362  if ($databaseName === '') {
363  return new JsonResponse([
364  'success' => false,
365  'status' => [
366  new FlashMessage(
367  'You must select a database.',
368  'No Database selected',
369  ContextualFeedbackSeverity::ERROR
370  ),
371  ],
372  ]);
373  }
374 
375  ‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['dbname'] = $databaseName;
376 
377  foreach ($this->setupDatabaseService->checkDatabaseRequirementsForDriver($databaseDriverName) as $message) {
378  if ($message->getSeverity() === ContextualFeedbackSeverity::ERROR) {
379  $success = false;
380  $messages[] = $message;
381  }
382  }
383 
384  // Check create and drop permissions
385  $statusMessages = [];
386  foreach ($this->setupDatabaseService->checkRequiredDatabasePermissions() as $checkRequiredPermission) {
387  $statusMessages[] = new FlashMessage(
388  $checkRequiredPermission,
389  'Missing required permissions',
390  ContextualFeedbackSeverity::ERROR
391  );
392  }
393  if ($statusMessages !== []) {
394  return new JsonResponse([
395  'success' => false,
396  'status' => $statusMessages,
397  ]);
398  }
399 
400  // if requirements are not fulfilled
401  if ($success === false) {
402  // remove the database again if we created it
403  if ($request->getParsedBody()['install']['values']['type'] === 'new') {
404  $connection = GeneralUtility::makeInstance(ConnectionPool::class)
405  ->getConnectionByName(‪ConnectionPool::DEFAULT_CONNECTION_NAME);
406  $connection
407  ->createSchemaManager()
408  ->dropDatabase($connection->quoteIdentifier($databaseName));
409  }
410 
411  $this->configurationManager->removeLocalConfigurationKeysByPath(['DB/Connections/Default/dbname']);
412 
413  $message = new FlashMessage(
414  sprintf(
415  'Database with name "%s" has been removed due to the following errors. '
416  . 'Please solve them first and try again. If you tried to create a new database make also sure, that the DBMS charset is to use UTF-8',
417  $databaseName
418  ),
419  '',
420  ContextualFeedbackSeverity::INFO
421  );
422  array_unshift($messages, $message);
423  }
424 
425  unset(‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['dbname']);
426 
427  return new JsonResponse([
428  'success' => $success,
429  'status' => $messages,
430  ]);
431  }
432 
433  private function ‪retrieveDatabaseNameFromRequest(ServerRequestInterface $request): string
434  {
435  $postValues = $request->getParsedBody()['install']['values'];
436  if ($postValues['type'] === 'new') {
437  return $postValues['new'];
438  }
439 
440  if ($postValues['type'] === 'existing' && !empty($postValues['existing'])) {
441  return $postValues['existing'];
442  }
443  return '';
444  }
445 
449  public function ‪executeDatabaseSelectAction(ServerRequestInterface $request): ResponseInterface
450  {
451  $databaseName = $this->‪retrieveDatabaseNameFromRequest($request);
452  if ($databaseName === '') {
453  return new ‪JsonResponse([
454  'success' => false,
455  'status' => [
456  new ‪FlashMessage(
457  'You must select a database.',
458  'No Database selected',
459  ContextualFeedbackSeverity::ERROR
460  ),
461  ],
462  ]);
463  }
464 
465  $postValues = $request->getParsedBody()['install']['values'];
466  if ($postValues['type'] === 'new') {
467  $status = $this->setupDatabaseService->createNewDatabase($databaseName);
468  if ($status->getSeverity() === ContextualFeedbackSeverity::ERROR) {
469  return new JsonResponse([
470  'success' => false,
471  'status' => [$status],
472  ]);
473  }
474  } elseif ($postValues['type'] === 'existing') {
475  $status = $this->setupDatabaseService->checkExistingDatabase($databaseName);
476  if ($status->getSeverity() === ContextualFeedbackSeverity::ERROR) {
477  return new JsonResponse([
478  'success' => false,
479  'status' => [$status],
480  ]);
481  }
482  }
483  return new JsonResponse([
484  'success' => true,
485  ]);
486  }
487 
491  public function ‪checkDatabaseDataAction(): ResponseInterface
492  {
493  $existingTables = GeneralUtility::makeInstance(ConnectionPool::class)
494  ->getConnectionByName(‪ConnectionPool::DEFAULT_CONNECTION_NAME)
495  ->createSchemaManager()
496  ->listTableNames();
497  return new JsonResponse([
498  'success' => !empty($existingTables),
499  ]);
500  }
501 
505  public function ‪showDatabaseDataAction(ServerRequestInterface $request): ResponseInterface
506  {
507  $view = $this->‪initializeView();
508  $formProtection = $this->formProtectionFactory->createFromRequest($request);
509  $view->assignMultiple([
510  'siteName' => ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'],
511  'executeDatabaseDataToken' => $formProtection->generateToken('installTool', 'executeDatabaseData'),
512  ]);
513  return new JsonResponse([
514  'success' => true,
515  'html' => $view->render('Installer/ShowDatabaseData'),
516  ]);
517  }
518 
522  public function ‪executeDatabaseDataAction(ServerRequestInterface $request): ResponseInterface
523  {
524  $messages = [];
525  $postValues = $request->getParsedBody()['install']['values'];
526  $username = (string)$postValues['username'] !== '' ? $postValues['username'] : 'admin';
527  // Check password and return early if not good enough
528  $password = (string)($postValues['password'] ?? '');
529  $email = $postValues['email'] ?? '';
530  $passwordValidationErrors = $this->setupDatabaseService->getBackendUserPasswordValidationErrors($password);
531  if (!empty($passwordValidationErrors)) {
532  $messages[] = new FlashMessage(
533  'Administrator password not secure enough!',
534  '',
535  ContextualFeedbackSeverity::ERROR
536  );
537 
538  // Add all password validation errors to the messages array
539  foreach ($passwordValidationErrors as $error) {
540  $messages[] = new FlashMessage(
541  $error,
542  '',
543  ContextualFeedbackSeverity::ERROR
544  );
545  }
546 
547  return new JsonResponse([
548  'success' => false,
549  'status' => $messages,
550  ]);
551  }
552  // Set site name
553  if (!empty($postValues['sitename'])) {
554  $this->setupService->setSiteName($postValues['sitename']);
555  }
556  try {
557  $messages = $this->setupDatabaseService->importDatabaseData();
558  if (!empty($messages)) {
559  return new JsonResponse([
560  'success' => false,
561  'status' => $messages,
562  ]);
563  }
564  } catch (StatementException $exception) {
565  $messages[] = new FlashMessage(
566  'Error detected in SQL statement:' . LF . $exception->getMessage(),
567  'Import of database data could not be performed',
568  ContextualFeedbackSeverity::ERROR
569  );
570  return new JsonResponse([
571  'success' => false,
572  'status' => $messages,
573  ]);
574  }
575 
576  $this->setupService->createUser($username, $password, $email);
577  $this->setupService->setInstallToolPassword($password);
578 
579  return new JsonResponse([
580  'success' => true,
581  'status' => $messages,
582  ]);
583  }
584 
588  public function ‪showDefaultConfigurationAction(ServerRequestInterface $request): ResponseInterface
589  {
590  $view = $this->‪initializeView();
591  $formProtection = $this->formProtectionFactory->createFromRequest($request);
592  $view->assignMultiple([
593  'composerMode' => ‪Environment::isComposerMode(),
594  'executeDefaultConfigurationToken' => $formProtection->generateToken('installTool', 'executeDefaultConfiguration'),
595  ]);
596  return new JsonResponse([
597  'success' => true,
598  'html' => $view->render('Installer/ShowDefaultConfiguration'),
599  ]);
600  }
601 
605  public function ‪executeDefaultConfigurationAction(ServerRequestInterface $request): ResponseInterface
606  {
607  $featureManager = new FeatureManager();
608  // Get best matching configuration presets
609  $configurationValues = $featureManager->getBestMatchingConfigurationForAllFeatures();
610 
611  $container = $this->lateBootService->loadExtLocalconfDatabaseAndExtTables();
612  // Use the container here instead of makeInstance() to use the factory of the container for building the UriBuilder
613  $uriBuilder = $container->get(UriBuilder::class);
614  $nextStepUrl = $uriBuilder->buildUriFromRoute('login');
615  // Let the admin user redirect to the distributions page on first login
616  if ($request->getParsedBody()['install']['values']['sitesetup'] === 'createsite') {
617  // Create a page with UID 1 and PID1 and fluid_styled_content for page TS config, respect ownership
618  $pageUid = $this->setupService->createSite();
619  $normalizedParams = $request->getAttribute('normalizedParams');
620  if (!($normalizedParams instanceof NormalizedParams)) {
621  $normalizedParams = ‪NormalizedParams::createFromRequest($request);
622  }
623  // Check for siteUrl, despite there currently is no UI to provide it,
624  // to allow TYPO3 Console (for TYPO3 v10) to set this value to something reasonable,
625  // because on cli there is no way to find out which hostname the site is supposed to have.
626  // In the future this controller should be refactored to a generic service, where site URL is
627  // just one input argument.
628  $siteUrl = $request->getParsedBody()['install']['values']['siteUrl'] ?? $normalizedParams->getSiteUrl();
629  $this->setupService->createSiteConfiguration('main', (int)$pageUid, $siteUrl);
630  } elseif ($request->getParsedBody()['install']['values']['sitesetup'] === 'loaddistribution'
632  && $this->packageManager->isPackageActive('extensionmanager')
633  ) {
634  // Update the URL to redirect after login to the extension manager distributions list
635  $nextStepUrl = $uriBuilder->buildUriWithRedirect(
636  'login',
637  [],
639  'tools_ExtensionmanagerExtensionmanager',
640  [
641  'action' => 'distributions',
642  ]
643  )
644  );
645  }
646  if (($request->getParsedBody()['install']['values']['backendgroups'] ?? '') === 'creategroups') {
647  $this->setupService->createBackendUserGroups();
648  }
649  // Mark upgrade wizards as done
650  $this->setupDatabaseService->markWizardsDone($container);
651 
652  $this->configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationValues);
653 
654  $formProtection = $this->formProtectionFactory->createFromRequest($request);
655  $formProtection->clean();
656 
658 
659  return new JsonResponse([
660  'success' => true,
661  'redirect' => (string)$nextStepUrl,
662  ]);
663  }
664 
668  protected function ‪initializeView(): ViewInterface
669  {
670  $templatePaths = [
671  'templateRootPaths' => ['EXT:install/Resources/Private/Templates'],
672  ];
673  $renderingContext = GeneralUtility::makeInstance(RenderingContextFactory::class)->create($templatePaths);
674  $fluidView = new FluidTemplateView($renderingContext);
675  return new FluidViewAdapter($fluidView);
676  }
677 }
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseDataAction
‪executeDatabaseDataAction(ServerRequestInterface $request)
Definition: InstallerController.php:521
‪TYPO3\CMS\Install\Controller\InstallerController\initAction
‪initAction(ServerRequestInterface $request)
Definition: InstallerController.php:89
‪TYPO3\CMS\Backend\Routing\RouteRedirect\create
‪static create(string $name, $params)
Definition: RouteRedirect.php:42
‪TYPO3\CMS\Install\Configuration\FeatureManager
Definition: FeatureManager.php:30
‪TYPO3\CMS\Core\Database\Schema\Exception\StatementException
Definition: StatementException.php:24
‪TYPO3\CMS\Core\Package\FailsafePackageManager
Definition: FailsafePackageManager.php:27
‪TYPO3\CMS\Core\View\ViewInterface
Definition: ViewInterface.php:24
‪TYPO3\CMS\Install\Service\Exception\ConfigurationChangedException
Definition: ConfigurationChangedException.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\mainLayoutAction
‪mainLayoutAction(ServerRequestInterface $request)
Definition: InstallerController.php:123
‪TYPO3\CMS\Core\Information\Typo3Version
Definition: Typo3Version.php:21
‪TYPO3\CMS\Install\Controller\InstallerController\checkEnvironmentAndFoldersAction
‪checkEnvironmentAndFoldersAction()
Definition: InstallerController.php:147
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:47
‪TYPO3\CMS\Install\Controller\InstallerController\initializeView
‪initializeView()
Definition: InstallerController.php:667
‪TYPO3\CMS\Install\Service\SilentConfigurationUpgradeService
Definition: SilentConfigurationUpgradeService.php:45
‪TYPO3\CMS\Core\Configuration\Exception\SettingsWriteException
Definition: SettingsWriteException.php:25
‪TYPO3\CMS\Core\Core\Environment\isComposerMode
‪static isComposerMode()
Definition: Environment.php:137
‪TYPO3\CMS\Install\Controller\InstallerController\executeSilentTemplateFileUpdateAction
‪ResponseInterface executeSilentTemplateFileUpdateAction()
Definition: InstallerController.php:262
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseSelectAction
‪executeDatabaseSelectAction(ServerRequestInterface $request)
Definition: InstallerController.php:448
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseConnectAction
‪showDatabaseConnectAction(ServerRequestInterface $request)
Definition: InstallerController.php:288
‪TYPO3\CMS\Install\Controller\InstallerController\showDefaultConfigurationAction
‪showDefaultConfigurationAction(ServerRequestInterface $request)
Definition: InstallerController.php:587
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\ConsumableNonce
Definition: ConsumableNonce.php:24
‪TYPO3\CMS\Core\Page\ImportMap
Definition: ImportMap.php:35
‪TYPO3\CMS\Core\View\FluidViewAdapter
Definition: FluidViewAdapter.php:28
‪TYPO3\CMS\Install\Service\EnableFileService
Definition: EnableFileService.php:26
‪TYPO3\CMS\Install\FolderStructure\DefaultFactory
Definition: DefaultFactory.php:26
‪TYPO3\CMS\Install\Service\SetupService
Definition: SetupService.php:42
‪TYPO3\CMS\Install\Service\EnableFileService\removeFirstInstallFile
‪static removeFirstInstallFile()
Definition: EnableFileService.php:82
‪TYPO3\CMS\Install\Controller\InstallerController\showEnvironmentAndFoldersAction
‪showEnvironmentAndFoldersAction(ServerRequestInterface $request)
Definition: InstallerController.php:157
‪TYPO3\CMS\Install\Controller\ControllerTrait
Definition: ControllerTrait.php:30
‪TYPO3\CMS\Install\WebserverType
‪WebserverType
Definition: WebserverType.php:26
‪TYPO3\CMS\Core\Core\Environment\getLegacyConfigPath
‪static getLegacyConfigPath()
Definition: Environment.php:268
‪TYPO3\CMS\Core\Database\ConnectionPool\DEFAULT_CONNECTION_NAME
‪const DEFAULT_CONNECTION_NAME
Definition: ConnectionPool.php:50
‪TYPO3\CMS\Install\Service\Exception\SilentConfigurationUpgradeReadonlyException
Definition: SilentConfigurationUpgradeReadonlyException.php:28
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseSelectAction
‪showDatabaseSelectAction(ServerRequestInterface $request)
Definition: InstallerController.php:330
‪TYPO3\CMS\Install\Controller\InstallerController\executeAdjustTrustedHostsPatternAction
‪executeAdjustTrustedHostsPatternAction(ServerRequestInterface $request)
Definition: InstallerController.php:224
‪TYPO3\CMS\Core\Core\Environment\getProjectPath
‪static string getProjectPath()
Definition: Environment.php:160
‪TYPO3\CMS\Install\Exception
Definition: Exception.php:23
‪TYPO3\CMS\Install\Controller\InstallerController\executeSilentConfigurationUpdateAction
‪ResponseInterface executeSilentConfigurationUpdateAction()
Definition: InstallerController.php:242
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseConnectAction
‪executeDatabaseConnectAction(ServerRequestInterface $request)
Definition: InstallerController.php:306
‪TYPO3\CMS\Backend\Routing\RouteRedirect
Definition: RouteRedirect.php:30
‪TYPO3\CMS\Install\Controller
Definition: AbstractController.php:18
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Install\Service\SilentTemplateFileUpgradeService
Definition: SilentTemplateFileUpgradeService.php:35
‪TYPO3\CMS\Install\Service\Exception\TemplateFileChangedException
Definition: TemplateFileChangedException.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\checkTrustedHostsPatternAction
‪checkTrustedHostsPatternAction(ServerRequestInterface $request)
Definition: InstallerController.php:211
‪TYPO3\CMS\Install\Controller\InstallerController\retrieveDatabaseNameFromRequest
‪retrieveDatabaseNameFromRequest(ServerRequestInterface $request)
Definition: InstallerController.php:432
‪TYPO3\CMS\Install\Controller\InstallerController\__construct
‪__construct(private readonly LateBootService $lateBootService, private readonly SilentConfigurationUpgradeService $silentConfigurationUpgradeService, private readonly SilentTemplateFileUpgradeService $silentTemplateFileUpgradeService, private readonly ConfigurationManager $configurationManager, private readonly FailsafePackageManager $packageManager, private readonly VerifyHostHeader $verifyHostHeader, private readonly FormProtectionFactory $formProtectionFactory, private readonly SetupService $setupService, private readonly SetupDatabaseService $setupDatabaseService, private readonly HashService $hashService,)
Definition: InstallerController.php:73
‪TYPO3\CMS\Install\Service\LateBootService
Definition: LateBootService.php:27
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseDataAction
‪showDatabaseDataAction(ServerRequestInterface $request)
Definition: InstallerController.php:504
‪TYPO3\CMS\Install\Service\SetupDatabaseService
Definition: SetupDatabaseService.php:52
‪$errors
‪$errors
Definition: annotationChecker.php:116
‪TYPO3\CMS\Install\Controller\InstallerController
Definition: InstallerController.php:71
‪TYPO3\CMS\Install\Controller\InstallerController\executeEnvironmentAndFoldersAction
‪executeEnvironmentAndFoldersAction(ServerRequestInterface $request)
Definition: InstallerController.php:184
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:27
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory
Definition: FormProtectionFactory.php:43
‪TYPO3\CMS\Install\SystemEnvironment\Check
Definition: Check.php:45
‪TYPO3\CMS\Install\Controller\InstallerController\showInstallerNotAvailableAction
‪showInstallerNotAvailableAction()
Definition: InstallerController.php:135
‪TYPO3\CMS\Core\Http\JsonResponse
Definition: JsonResponse.php:28
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\executeDefaultConfigurationAction
‪executeDefaultConfigurationAction(ServerRequestInterface $request)
Definition: InstallerController.php:604
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Install\SystemEnvironment\SetupCheck
Definition: SetupCheck.php:38
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseRequirementsAction
‪checkDatabaseRequirementsAction(ServerRequestInterface $request)
Definition: InstallerController.php:354
‪TYPO3\CMS\Core\Middleware\VerifyHostHeader
Definition: VerifyHostHeader.php:31
‪TYPO3\CMS\Core\Http\fromRequest
‪@ fromRequest
Definition: ApplicationType.php:66
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseConnectAction
‪checkDatabaseConnectAction()
Definition: InstallerController.php:278
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseSelectAction
‪checkDatabaseSelectAction()
Definition: InstallerController.php:320
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue
Definition: FlashMessageQueue.php:29
‪TYPO3\CMS\Core\Http\NormalizedParams\createFromRequest
‪static static createFromRequest(ServerRequestInterface $request, array $systemConfiguration=null)
Definition: NormalizedParams.php:840
‪TYPO3\CMS\Core\Crypto\HashService
Definition: HashService.php:27
‪TYPO3\CMS\Core\Core\Environment\getContext
‪static getContext()
Definition: Environment.php:128
‪TYPO3\CMS\Core\Http\NormalizedParams
Definition: NormalizedParams.php:38
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:28
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseDataAction
‪checkDatabaseDataAction()
Definition: InstallerController.php:490