[!!!][TASK] Remove request type specific code in Bootstrap 92/55692/8
authorBenjamin Franzke <bfr@qbus.de>
Mon, 12 Feb 2018 18:00:56 +0000 (19:00 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Wed, 28 Feb 2018 15:52:04 +0000 (16:52 +0100)
As all request type specific initialization has been
refactored to the Application classes, request type
specific code in Bootstrap is unused [1] and can
be removed.

[1] redirectToInstallTool() is actually still in use, but moved
into the frontend and backend Application classes with this change.
(Also make their parent class abstract as drive-by change.)

Change-Id: Ieded3603c2936d83d3d4701abef6c3884b558e31
Releases: master
Resolves: #83869
Reviewed-on: https://review.typo3.org/55692
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
12 files changed:
typo3/sysext/backend/Classes/Http/Application.php
typo3/sysext/backend/Configuration/RequestMiddlewares.php
typo3/sysext/core/Classes/Console/CommandRequestHandler.php
typo3/sysext/core/Classes/Core/Bootstrap.php
typo3/sysext/core/Classes/Http/AbstractApplication.php
typo3/sysext/core/Classes/Middleware/LegacyRequestHandlerDispatcher.php [deleted file]
typo3/sysext/core/Documentation/Changelog/master/Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/Http/Application.php
typo3/sysext/frontend/Classes/Http/EidRequestHandler.php
typo3/sysext/frontend/Configuration/RequestMiddlewares.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php

index 710bbc3..5e4c744 100644 (file)
@@ -14,8 +14,11 @@ namespace TYPO3\CMS\Backend\Http;
  *
  * The TYPO3 project - inspiring people to share!
  */
+
+use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Http\AbstractApplication;
+use TYPO3\CMS\Core\Http\RedirectResponse;
 
 /**
  * Entry point for the TYPO3 Backend (HTTP requests)
@@ -60,7 +63,8 @@ class Application extends AbstractApplication
 
         // Redirect to install tool if base configuration is not found
         if (!$this->bootstrap->checkIfEssentialConfigurationExists()) {
-            $this->bootstrap->redirectToInstallTool($this->entryPointLevel);
+            $this->sendResponse($this->installToolRedirect());
+            exit;
         }
 
         $this->bootstrap->configure();
@@ -73,4 +77,15 @@ class Application extends AbstractApplication
     {
         define('TYPO3_MODE', 'BE');
     }
+
+    /**
+     * Create a PSR-7 Response that redirects to the install tool
+     *
+     * @return ResponseInterface
+     */
+    protected function installToolRedirect(): ResponseInterface
+    {
+        $path = '../' . TYPO3_mainDir . 'install.php';
+        return new RedirectResponse($path, 302);
+    }
 }
index 9cceac9..d29b921 100644 (file)
  */
 return [
     'backend' => [
-        'typo3/cms-core/legacy-request-handler-dispatcher' => [
-            'target' => \TYPO3\CMS\Core\Middleware\LegacyRequestHandlerDispatcher::class,
-        ],
         'typo3/cms-core/normalized-params-attribute' => [
             'target' => \TYPO3\CMS\Core\Middleware\NormalizedParamsAttribute::class,
-            'after' => [
-                'typo3/cms-core/legacy-request-handler-dispatcher',
-            ],
         ],
         'typo3/cms-backend/locked-backend' => [
             'target' => \TYPO3\CMS\Backend\Middleware\LockedBackendGuard::class,
index 8d4ccc9..ba9ce3c 100644 (file)
@@ -64,9 +64,9 @@ class CommandRequestHandler implements RequestHandlerInterface
             ->loadExtTables()
             // create the BE_USER object (not logged in yet)
             ->initializeBackendUser(CommandLineUserAuthentication::class)
-            ->initializeLanguageObject()
-            // Make sure output is not buffered, so command-line output and interaction can take place
-            ->endOutputBufferingAndCleanPreviousOutput();
+            ->initializeLanguageObject();
+        // Make sure output is not buffered, so command-line output and interaction can take place
+        ob_clean();
 
         $this->populateAvailableCommands();
 
index a1eb51b..a5ffbd8 100644 (file)
@@ -18,7 +18,6 @@ use Doctrine\Common\Annotations\AnnotationReader;
 use Doctrine\Common\Annotations\AnnotationRegistry;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\MathUtility;
 
 /**
  * This class encapsulates bootstrap related methods.
@@ -58,24 +57,6 @@ class Bootstrap
     protected $earlyInstances = [];
 
     /**
-     * @var string Path to install tool
-     */
-    protected $installToolPath;
-
-    /**
-     * A list of all registered request handlers, see the Application class / entry points for the registration
-     * @var \TYPO3\CMS\Core\Http\RequestHandlerInterface[]|\TYPO3\CMS\Core\Console\RequestHandlerInterface[]
-     */
-    protected $availableRequestHandlers = [];
-
-    /**
-     * The Response object when using Request/Response logic
-     * @var \Psr\Http\Message\ResponseInterface
-     * @see shutdown()
-     */
-    protected $response;
-
-    /**
      * @var bool
      */
     protected static $usesComposerClassLoading = false;
@@ -267,112 +248,6 @@ class Bootstrap
     }
 
     /**
-     * Redirect to install tool if LocalConfiguration.php is missing.
-     *
-     * @param int $entryPointLevel Number of subdirectories where the entry script is located under the document root
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function redirectToInstallTool($entryPointLevel = 0)
-    {
-        $path = TYPO3_mainDir . 'install.php';
-        if ($entryPointLevel > 0) {
-            $path = str_repeat('../', $entryPointLevel) . $path;
-        }
-        header('Location: ' . $path);
-        die;
-    }
-
-    /**
-     * Adds available request handlers usually done via an application from the outside.
-     *
-     * @param string $requestHandler class which implements the request handler interface
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function registerRequestHandlerImplementation($requestHandler)
-    {
-        $this->availableRequestHandlers[] = $requestHandler;
-        return $this;
-    }
-
-    /**
-     * Fetches the request handler that suits the best based on the priority and the interface
-     * Be sure to always have the constants that are defined in $this->defineTypo3RequestTypes() are set,
-     * so most RequestHandlers can check if they can handle the request.
-     *
-     * @param \Psr\Http\Message\ServerRequestInterface|\Symfony\Component\Console\Input\InputInterface $request
-     * @return \TYPO3\CMS\Core\Http\RequestHandlerInterface|\TYPO3\CMS\Core\Console\RequestHandlerInterface
-     * @throws \TYPO3\CMS\Core\Exception
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function resolveRequestHandler($request)
-    {
-        $suitableRequestHandlers = [];
-        foreach ($this->availableRequestHandlers as $requestHandlerClassName) {
-            /** @var \TYPO3\CMS\Core\Http\RequestHandlerInterface|\TYPO3\CMS\Core\Console\RequestHandlerInterface $requestHandler */
-            $requestHandler = GeneralUtility::makeInstance($requestHandlerClassName, $this);
-            if ($requestHandler->canHandleRequest($request)) {
-                $priority = $requestHandler->getPriority();
-                if (isset($suitableRequestHandlers[$priority])) {
-                    throw new \TYPO3\CMS\Core\Exception('More than one request handler with the same priority can handle the request, but only one handler may be active at a time!', 1176471352);
-                }
-                $suitableRequestHandlers[$priority] = $requestHandler;
-            }
-        }
-        if (empty($suitableRequestHandlers)) {
-            throw new \TYPO3\CMS\Core\Exception('No suitable request handler found.', 1225418233);
-        }
-        ksort($suitableRequestHandlers);
-        return array_pop($suitableRequestHandlers);
-    }
-
-    /**
-     * Builds a Request instance from the current process, and then resolves the request
-     * through the request handlers depending on Frontend, Backend, CLI etc.
-     *
-     * @param \Psr\Http\Message\RequestInterface|\Symfony\Component\Console\Input\InputInterface $request
-     * @return Bootstrap
-     * @throws \TYPO3\CMS\Core\Exception
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function handleRequest($request)
-    {
-        // Resolve request handler that were registered based on the Application
-        $requestHandler = $this->resolveRequestHandler($request);
-
-        // Execute the command which returns a Response object or NULL
-        $this->response = $requestHandler->handleRequest($request);
-
-        return $this;
-    }
-
-    /**
-     * Outputs content if there is a proper Response object.
-     *
-     * @return Bootstrap
-     */
-    protected function sendResponse()
-    {
-        if ($this->response instanceof \Psr\Http\Message\ResponseInterface && !($this->response instanceof \TYPO3\CMS\Core\Http\NullResponse)) {
-            if (!headers_sent()) {
-                // If the response code was not changed by legacy code (still is 200)
-                // then allow the PSR-7 response object to explicitly set it.
-                // Otherwise let legacy code take precedence.
-                // This code path can be deprecated once we expose the response object to third party code
-                if (http_response_code() === 200) {
-                    header('HTTP/' . $this->response->getProtocolVersion() . ' ' . $this->response->getStatusCode() . ' ' . $this->response->getReasonPhrase());
-                }
-
-                foreach ($this->response->getHeaders() as $name => $values) {
-                    header($name . ': ' . implode(', ', $values));
-                }
-            }
-            echo $this->response->getBody()->__toString();
-        }
-        return $this;
-    }
-
-    /**
      * Registers the instance of the specified object for an early boot stage.
      * On finalizing the Object Manager initialization, all those instances will
      * be transferred to the Object Manager's registry.
@@ -709,74 +584,6 @@ class Bootstrap
     }
 
     /**
-     * Check adminOnly configuration variable and redirects
-     * to an URL in file typo3conf/LOCK_BACKEND or exit the script
-     *
-     * @throws \RuntimeException
-     * @param bool $forceProceeding if this option is set, the bootstrap will proceed even if the user is logged in (usually only needed for special AJAX cases, see AjaxRequestHandler)
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function checkLockedBackendAndRedirectOrDie($forceProceeding = false)
-    {
-        if ($GLOBALS['TYPO3_CONF_VARS']['BE']['adminOnly'] < 0) {
-            throw new \RuntimeException('TYPO3 Backend locked: Backend and Install Tool are locked for maintenance. [BE][adminOnly] is set to "' . (int)$GLOBALS['TYPO3_CONF_VARS']['BE']['adminOnly'] . '".', 1294586847);
-        }
-        if (@is_file(PATH_typo3conf . 'LOCK_BACKEND') && $forceProceeding === false) {
-            $fileContent = file_get_contents(PATH_typo3conf . 'LOCK_BACKEND');
-            if ($fileContent) {
-                header('Location: ' . $fileContent);
-            } else {
-                throw new \RuntimeException('TYPO3 Backend locked: Browser backend is locked for maintenance. Remove lock by removing the file "typo3conf/LOCK_BACKEND" or use CLI-scripts.', 1294586848);
-            }
-            die;
-        }
-        return $this;
-    }
-
-    /**
-     * Compare client IP with IPmaskList and exit the script run
-     * if the client is not allowed to access the backend
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     * @throws \RuntimeException
-     */
-    public function checkBackendIpOrDie()
-    {
-        if (trim($GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'])) {
-            if (!GeneralUtility::cmpIP(GeneralUtility::getIndpEnv('REMOTE_ADDR'), $GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'])) {
-                throw new \RuntimeException('TYPO3 Backend access denied: The IP address of your client does not match the list of allowed IP addresses.', 1389265900);
-            }
-        }
-        return $this;
-    }
-
-    /**
-     * Check lockSSL configuration variable and redirect
-     * to https version of the backend if needed
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     * @throws \RuntimeException
-     */
-    public function checkSslBackendAndRedirectIfNeeded()
-    {
-        if ((bool)$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSL'] && !GeneralUtility::getIndpEnv('TYPO3_SSL')) {
-            if ((int)$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSLPort']) {
-                $sslPortSuffix = ':' . (int)$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSLPort'];
-            } else {
-                $sslPortSuffix = '';
-            }
-            list(, $url) = explode('://', GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir, 2);
-            list($server, $address) = explode('/', $url, 2);
-            header('Location: https://' . $server . $sslPortSuffix . '/' . $address);
-            die;
-        }
-        return $this;
-    }
-
-    /**
      * Load $TCA
      *
      * This will mainly set up $TCA through extMgm API.
@@ -930,72 +737,4 @@ class Bootstrap
         $GLOBALS['LANG']->init($GLOBALS['BE_USER']->uc['lang']);
         return $this;
     }
-
-    /**
-     * Throw away all output that may have happened during bootstrapping by weird extensions
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function endOutputBufferingAndCleanPreviousOutput()
-    {
-        ob_clean();
-        return $this;
-    }
-
-    /**
-     * Initialize output compression if configured
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function initializeOutputCompression()
-    {
-        if (extension_loaded('zlib') && $GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel']) {
-            if (MathUtility::canBeInterpretedAsInteger($GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel'])) {
-                @ini_set('zlib.output_compression_level', (string)$GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel']);
-            }
-            ob_start('ob_gzhandler');
-        }
-        return $this;
-    }
-
-    /**
-     * Send HTTP headers if configured
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function sendHttpHeaders()
-    {
-        array_map('header', $GLOBALS['TYPO3_CONF_VARS']['BE']['HTTP']['Response']['Headers'] ?? []);
-        return $this;
-    }
-
-    /**
-     * Things that should be performed to shut down the framework.
-     * This method is called in all important scripts for a clean
-     * shut down of the system.
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function shutdown()
-    {
-        $this->sendResponse();
-        return $this;
-    }
-
-    /**
-     * Provides an instance of "template" for backend-modules to
-     * work with.
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     */
-    public function initializeBackendTemplate()
-    {
-        $GLOBALS['TBE_TEMPLATE'] = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-        return $this;
-    }
 }
index d0f99c2..e2b917c 100644 (file)
@@ -24,7 +24,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 /**
  * @internal
  */
-class AbstractApplication implements ApplicationInterface
+abstract class AbstractApplication implements ApplicationInterface
 {
     /**
      * @var string
diff --git a/typo3/sysext/core/Classes/Middleware/LegacyRequestHandlerDispatcher.php b/typo3/sysext/core/Classes/Middleware/LegacyRequestHandlerDispatcher.php
deleted file mode 100644 (file)
index 60840e4..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-declare(strict_types = 1);
-namespace TYPO3\CMS\Core\Middleware;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use TYPO3\CMS\Core\Core\Bootstrap;
-use TYPO3\CMS\Core\Exception;
-use TYPO3\CMS\Core\Http\NullResponse;
-
-/**
- * Dispatch legacy request handlers; although
- * Bootstrap::registerRequestHandlerImplementation() was always
- * marked as internal quite some extensions use that method
- * to register custom request handlers.
- *
- * @internal
- */
-class LegacyRequestHandlerDispatcher implements MiddlewareInterface
-{
-    protected $bootstrap;
-
-    public function __construct()
-    {
-        $this->bootstrap = Bootstrap::getInstance();
-    }
-
-    /**
-     * @param ServerRequestInterface $request
-     * @param RequestHandlerInterface $handler
-     * @return ResponseInterface
-     */
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        $requestHandler = null;
-
-        try {
-            $requestHandler = $this->bootstrap->resolveRequestHandler($request);
-        } catch (Exception $e) {
-            // 'No suitable request handler found.'
-            if ($e->getCode() !== 1225418233) {
-                throw $e;
-            }
-        }
-
-        if ($requestHandler !== null) {
-            // @todo: E_USER_DEPRECATED
-            return $requestHandler->handleRequest($request) ?? new NullResponse();
-        }
-
-        return $handler->handle($request);
-    }
-}
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst b/typo3/sysext/core/Documentation/Changelog/master/Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst
new file mode 100644 (file)
index 0000000..14508c6
--- /dev/null
@@ -0,0 +1,56 @@
+.. include:: ../../Includes.txt
+
+==================================================================
+Important: #83869 - Remove request type specific code in Bootstrap
+==================================================================
+
+See :issue:`83869`
+
+Description
+===========
+
+All methods and properties related to specific HTTP or CLI handling in
+:php:`\TYPO3\CMS\Core\Core\Bootstrap` have been removed.
+These methods and properties were either protected or marked ``@internal``.
+
+Methods:
+
+* :php:`redirectToInstallTool()`
+* :php:`registerRequestHandlerImplementation()`
+* :php:`resolveRequestHandler()`
+* :php:`handleRequest()`
+* :php:`sendResponse()`
+* :php:`checkLockedBackendAndRedirectOrDie()`
+* :php:`checkBackendIpOrDie()`
+* :php:`checkSslBackendAndRedirectIfNeeded()`
+* :php:`initializeOutputCompression()`
+* :php:`sendHttpHeaders()`
+* :php:`shutdown()`
+* :php:`initializeBackendTemplate()`
+* :php:`endOutputBufferingAndCleanPreviousOutput()`
+
+Properties:
+
+* :php:`protected $installToolPath;`
+* :php:`protected $availableRequestHandlers`
+* :php:`protected $response;`
+
+
+Affected Installations
+======================
+
+All installations that use custom extensions that use request method specific methods of
+:php:`\TYPO3\CMS\Core\Core\Bootstrap`.
+
+
+Migration
+=========
+
+Custom request handlers that are registered using the internal method
+:php:`registerRequestHandlerImplementation()` should
+be converted to PSR-15 middlewares. TYPO3 9.2 gained an API
+:file:`Configuration/Configuration/RequestMiddlewares.php` for registering
+PSR-15 middleware HTTP handlers. See :php:`\TYPO3\CMS\Frontend\Middleware\EidHandler`
+for an example.
+
+.. index:: Backend, CLI, Frontend, PHP-API, FullyScanned
index 53fcbf7..2684977 100644 (file)
@@ -15,8 +15,10 @@ namespace TYPO3\CMS\Frontend\Http;
  * The TYPO3 project - inspiring people to share!
  */
 
+use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Http\AbstractApplication;
+use TYPO3\CMS\Core\Http\RedirectResponse;
 
 /**
  * Entry point for the TYPO3 Frontend
@@ -61,7 +63,8 @@ class Application extends AbstractApplication
 
         // Redirect to install tool if base configuration is not found
         if (!$this->bootstrap->checkIfEssentialConfigurationExists()) {
-            $this->bootstrap->redirectToInstallTool($this->entryPointLevel);
+            $this->sendResponse($this->installToolRedirect());
+            exit;
         }
 
         $this->bootstrap->configure();
@@ -74,4 +77,15 @@ class Application extends AbstractApplication
     {
         define('TYPO3_MODE', 'FE');
     }
+
+    /**
+     * Create a PSR-7 Response that redirects to the install tool
+     *
+     * @return ResponseInterface
+     */
+    protected function installToolRedirect(): ResponseInterface
+    {
+        $path = TYPO3_mainDir . 'install.php';
+        return new RedirectResponse($path, 302);
+    }
 }
index d4dd83e..24d5e85 100644 (file)
@@ -18,7 +18,6 @@ namespace TYPO3\CMS\Frontend\Http;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Server\RequestHandlerInterface as PsrRequestHandlerInterface;
-use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Exception;
 use TYPO3\CMS\Core\Http\Dispatcher;
 use TYPO3\CMS\Core\Http\NullResponse;
@@ -36,20 +35,11 @@ use TYPO3\CMS\Frontend\Middleware\EidHandler as EidMiddleware;
 class EidRequestHandler implements RequestHandlerInterface, PsrRequestHandlerInterface
 {
     /**
-     * Instance of the current TYPO3 bootstrap
-     * @var Bootstrap
-     */
-    protected $bootstrap;
-
-    /**
      * Constructor handing over the bootstrap and the original request
-     *
-     * @param Bootstrap $bootstrap
      */
-    public function __construct(Bootstrap $bootstrap)
+    public function __construct()
     {
         trigger_error(self::class . ' will be removed in TYPO3 v10. Use ' . EidMiddleware::class . ' instead.', E_USER_DEPRECATED);
-        $this->bootstrap = $bootstrap;
     }
 
     /**
@@ -99,7 +89,7 @@ class EidRequestHandler implements RequestHandlerInterface, PsrRequestHandlerInt
     {
         trigger_error(self::class . ' will be removed in TYPO3 v10. Use ' . EidMiddleware::class . ' instead.', E_USER_DEPRECATED);
         // Remove any output produced until now
-        $this->bootstrap->endOutputBufferingAndCleanPreviousOutput();
+        ob_clean();
 
         /** @var Response $response */
         $response = GeneralUtility::makeInstance(Response::class);
index 2d836ef..d7fb8ca 100644 (file)
  */
 return [
     'frontend' => [
-        'typo3/cms-core/legacy-request-handler-dispatcher' => [
-            'target' => \TYPO3\CMS\Core\Middleware\LegacyRequestHandlerDispatcher::class,
-        ],
         'typo3/cms-frontend/timetracker' => [
             'target' => \TYPO3\CMS\Frontend\Middleware\TimeTrackerInitialization::class,
-            'after' => [
-                'typo3/cms-core/legacy-request-handler-dispatcher'
-            ],
         ],
         'typo3/cms-core/normalized-params-attribute' => [
             'target' => \TYPO3\CMS\Core\Middleware\NormalizedParamsAttribute::class,
index 2c820fb..a6d541f 100644 (file)
@@ -1612,4 +1612,95 @@ return [
             'Deprecation-83942-DeprecatedFileFacadegetIcon.rst',
         ],
     ],
+    'TYPO3\CMS\Core\Core\Bootstrap->redirectToInstallTool' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->registerRequestHandlerImplementation' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->resolveRequestHandler' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->handleRequest' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->sendResponse' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->checkLockedBackendAndRedirectOrDie' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->checkBackendIpOrDie' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->checkSslBackendAndRedirectIfNeeded' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->initializeOutputCompression' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->sendHttpHeaders' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->shutdown' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->initializeBackendTemplate' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->endOutputBufferingAndCleanPreviousOutput' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
 ];
index 603d057..7ca5b39 100644 (file)
@@ -52,4 +52,19 @@ return [
             'Breaking-55298-DecoupledHistoryFunctionality.rst',
         ],
     ],
+    'TYPO3\CMS\Core\Core\Bootstrap->installToolPath' => [
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->availableRequestHandlers' => [
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
+    'TYPO3\CMS\Core\Core\Bootstrap->response' => [
+        'restFiles' => [
+            'Important-83869-RemoveRequestTypeSpecificCodeInBootstrap.rst',
+        ],
+    ],
 ];