[!!!][TASK] Remove non-route variants for BE calls 38/59238/3
authorBenni Mack <benni@typo3.org>
Thu, 20 Dec 2018 12:10:09 +0000 (13:10 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Thu, 20 Dec 2018 14:09:40 +0000 (15:09 +0100)
Remove AjaxRequestHandler and the special
handling of '&M=...' query parameter in TYPO3
Backend.

Resolves: #87241
Releases: master
Change-Id: I1f02dc6eef6b1821e30df7d8dc85d16c1fc4d37f
Reviewed-on: https://review.typo3.org/59238
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/backend/Classes/Backend/Shortcut/ShortcutRepository.php
typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php [deleted file]
typo3/sysext/backend/Classes/Http/RouteDispatcher.php
typo3/sysext/backend/Classes/Middleware/BackendRouteInitialization.php
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/extbase/Classes/Mvc/Web/Routing/UriBuilder.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php

index b54a281..8baae1e 100644 (file)
@@ -747,11 +747,6 @@ class ShortcutRepository
             }
         }
 
-        if (isset($parameters['M']) && empty($parameters['route'])) {
-            $parameters['route'] = $parameters['M'];
-            unset($parameters['M']);
-        }
-
         if (strpos($parsedUrl['path'], 'index.php') !== false && isset($parameters['route'])) {
             $routePath = $parameters['route'];
             /** @var \TYPO3\CMS\Backend\Routing\Router $router */
diff --git a/typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php b/typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php
deleted file mode 100644 (file)
index 45ecdf0..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-declare(strict_types = 1);
-namespace TYPO3\CMS\Backend\Http;
-
-/*
- * 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\RequestHandlerInterface as PsrRequestHandlerInterface;
-use TYPO3\CMS\Backend\Routing\Exception\InvalidRequestTokenException;
-use TYPO3\CMS\Backend\Routing\Exception\ResourceNotFoundException;
-use TYPO3\CMS\Core\Http\RequestHandlerInterface;
-use TYPO3\CMS\Core\Http\Response;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * AJAX dispatcher
- *
- * Main entry point for AJAX calls in the TYPO3 Backend. Based on ?route=/ajax/* of the outside application.
- *
- * AJAX Requests are typically registered within EXT:myext/Configuration/Backend/AjaxRoutes.php
- *
- * @deprecated since TYPO3 v9.2, will be removed in TYPO3 v10.0
- */
-class AjaxRequestHandler implements RequestHandlerInterface, PsrRequestHandlerInterface
-{
-    /**
-     * Handles any AJAX request in the TYPO3 Backend
-     *
-     * @param ServerRequestInterface $request
-     * @return ResponseInterface
-     */
-    public function handleRequest(ServerRequestInterface $request): ResponseInterface
-    {
-        trigger_error(self::class . ' will be removed in TYPO3 v10.0. Use the regular application dispatcher instead.', E_USER_DEPRECATED);
-        return $this->handle($request);
-    }
-
-    /**
-     * Handles any AJAX request in the TYPO3 Backend, after finishing running middlewares
-     *
-     * Creates a response object with JSON headers automatically, and then dispatches to the correct route
-     *
-     * @param ServerRequestInterface $request
-     * @return ResponseInterface
-     * @throws ResourceNotFoundException if no valid route was found
-     * @throws InvalidRequestTokenException if the request could not be verified
-     */
-    public function handle(ServerRequestInterface $request): ResponseInterface
-    {
-        trigger_error(self::class . ' will be removed in TYPO3 v10.0. Use the regular application dispatcher instead.', E_USER_DEPRECATED);
-        /** @var Response $response */
-        $response = GeneralUtility::makeInstance(Response::class, 'php://temp', 200, [
-            'Content-Type' => 'application/json; charset=utf-8',
-            'X-JSON' => 'true'
-        ]);
-
-        $dispatcher = GeneralUtility::makeInstance(RouteDispatcher::class);
-        return $dispatcher->dispatch($request, $response);
-    }
-
-    /**
-     * This request handler can handle any backend request having
-     * an /ajax/ request
-     *
-     * @param ServerRequestInterface $request
-     * @return bool If the request is an AJAX backend request, TRUE otherwise FALSE
-     */
-    public function canHandleRequest(ServerRequestInterface $request): bool
-    {
-        trigger_error(self::class . ' will be removed in TYPO3 v10.0. Use the regular application dispatcher instead.', E_USER_DEPRECATED);
-        $routePath = $request->getParsedBody()['route'] ?? $request->getQueryParams()['route'] ?? '';
-        return strpos($routePath, '/ajax/') === 0;
-    }
-
-    /**
-     * Returns the priority - how eager the handler is to actually handle the request.
-     *
-     * @return int The priority of the request handler.
-     */
-    public function getPriority(): int
-    {
-        trigger_error(self::class . ' will be removed in TYPO3 v10.0. Use the regular application dispatcher instead.', E_USER_DEPRECATED);
-        return 80;
-    }
-}
index 7f97c7b..4cc2847 100644 (file)
@@ -87,10 +87,7 @@ class RouteDispatcher extends Dispatcher
         if ($token) {
             return $this->getFormProtection()->validateToken($token, 'route', $route->getOption('_identifier'));
         }
-        // backwards compatibility: check for M and module token params
-        // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-        $token = (string)($request->getParsedBody()['moduleToken'] ?? $request->getQueryParams()['moduleToken']);
-        return $this->getFormProtection()->validateToken($token, 'moduleCall', $request->getParsedBody()['M'] ?? $request->getQueryParams()['M']);
+        return false;
     }
 
     /**
index 7dcd062..8b840a5 100644 (file)
@@ -21,7 +21,6 @@ use Psr\Http\Server\MiddlewareInterface;
 use Psr\Http\Server\RequestHandlerInterface;
 use TYPO3\CMS\Backend\Routing\Router;
 use TYPO3\CMS\Core\Core\Bootstrap;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * Initializes the Backend Router and also loads ext_tables.php from all extensions, as this is the place
@@ -42,26 +41,8 @@ class BackendRouteInitialization implements MiddlewareInterface
      */
     public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
     {
-        // Check if a module URL is requested and deprecate this call
-        $moduleName = $request->getQueryParams()['M'] ?? $request->getParsedBody()['M'] ?? null;
         // Allow the login page to be displayed if routing is not used and on index.php
-        $pathToRoute = $request->getQueryParams()['route'] ?? $request->getParsedBody()['route'] ?? $moduleName ?? '/login';
-
-        if ($moduleName !== null) {
-            // backwards compatibility for old module names
-            // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-            $router = GeneralUtility::makeInstance(Router::class);
-            foreach ($router->getRoutes() as $routeIdentifier => $route) {
-                if ($routeIdentifier === $moduleName) {
-                    $pathToRoute = $route->getPath();
-                    break;
-                }
-            }
-
-            trigger_error('Calling the TYPO3 Backend with "M" GET parameter will be removed in TYPO3 v10.0,'
-                . ' the calling code calls this script with "&M=' . $moduleName . '" and needs to be adapted'
-                . ' to use the TYPO3 API.', E_USER_DEPRECATED);
-        }
+        $pathToRoute = $request->getQueryParams()['route'] ?? $request->getParsedBody()['route'] ?? '/login';
 
         Bootstrap::initializeBackendRouter();
         Bootstrap::loadExtTables();
index 45651d8..fcad562 100644 (file)
@@ -354,13 +354,6 @@ function jumpToUrl(URL) {
         $gvList = 'route,' . $gvList;
         $storeUrl = $this->makeShortcutUrl($gvList, $setList);
         $pathInfo = parse_url(GeneralUtility::getIndpEnv('REQUEST_URI'));
-        // Fallback for alt_mod. We still pass in the old xMOD... stuff, but TBE_MODULES only knows about "record_edit".
-        // We still need to pass the xMOD name to createShortcut below, since this is used for icons.
-        $moduleName = $modName === 'xMOD_alt_doc.php' ? 'record_edit' : $modName;
-        // Add the module identifier automatically if typo3/index.php is used:
-        if (GeneralUtility::_GET('M') !== null) {
-            $storeUrl = '&M=' . $moduleName . $storeUrl;
-        }
         if ((int)$motherModName === 1) {
             $motherModule = 'top.currentModuleLoaded';
         } elseif ($motherModName) {
index ea57bea..09d0d86 100644 (file)
@@ -13,6 +13,7 @@ The following PHP classes that have been previously deprecated for v9 have been
 
 * :php:`TYPO3\CMS\Adminpanel\View\AdminPanelView`
 * :php:`TYPO3\CMS\Backend\Controller\LoginFramesetController`
+* :php:`TYPO3\CMS\Backend\Http\AjaxRequestHandler`
 * :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule`
 * :php:`TYPO3\CMS\Backend\Module\AbstractModule`
 * :php:`TYPO3\CMS\Backend\Module\BaseScriptClass`
@@ -577,14 +578,17 @@ The following feature is now always enabled:
 The following features have been removed:
 
 * Migration from v4 to v5 PackagesStates.php
+* Backend modules validated against special GET/POST `M` parameter
 * `eID` script targets cannot define a script path anymore:
   `$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['my_eID'] = 'EXT:benni/Scripts/download.php'` will not work anymore.
   Instead, they must contain a target (callable, class/method, function).
 
+
 The following database fields have been removed:
 
 * `index_phash.data_page_reg1`
 
+
 The following php doc annotations have been removed:
 
 * `@inject`
index c9c5171..a2ab001 100644 (file)
@@ -654,9 +654,7 @@ class UriBuilder
             }
         } else {
             $id = GeneralUtility::_GP('id');
-            // backwards compatibility: check for M parameter
-            // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-            $route = GeneralUtility::_GP('route') ?: GeneralUtility::_GP('M');
+            $route = GeneralUtility::_GP('route');
             if ($id !== null) {
                 $arguments['id'] = $id;
             }
index 7ee0969..4ff1d95 100644 (file)
@@ -121,6 +121,7 @@ return [
     'TYPO3\CMS\Backend\Http\AjaxRequestHandler' => [
         'restFiles' => [
             'Deprecation-83853-BackendAjaxRequestHandler.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Page\FramesetRenderer' => [