[TASK] Move AjaxLoginHandler to AjaxLoginController 41/54441/2
authorBenni Mack <benni@typo3.org>
Wed, 18 Oct 2017 21:02:19 +0000 (23:02 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Thu, 19 Oct 2017 07:32:35 +0000 (09:32 +0200)
The AjaxLoginHandler which does AJAX logic for login timeouts is be moved
to the proper location, as it is a controller.

A class alias is in place.

Resolves: #82805
Releases: master
Change-Id: I6a9fed6236d6d82150dec2ac7c2ce61bd194b8ec
Reviewed-on: https://review.typo3.org/54441
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Joerg Boesche <typo3@joergboesche.de>
Tested-by: Joerg Boesche <typo3@joergboesche.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
composer.json
composer.lock
typo3/sysext/backend/Classes/AjaxLoginHandler.php [deleted file]
typo3/sysext/backend/Classes/Controller/AjaxLoginController.php [new file with mode: 0644]
typo3/sysext/backend/Configuration/Backend/AjaxRoutes.php
typo3/sysext/backend/Migrations/Code/ClassAliasMap.php [new file with mode: 0644]
typo3/sysext/backend/Migrations/Code/LegacyClassesForIde.php [new file with mode: 0644]
typo3/sysext/backend/composer.json
typo3/sysext/core/Documentation/Changelog/master/Deprecation-82805-RenamedAjaxLoginHandlerPHPClass.rst [new file with mode: 0644]
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php

index c7f27a0..d987be0 100644 (file)
@@ -70,6 +70,7 @@
                "typo3/class-alias-loader": {
                        "always-add-alias-loader": true,
                        "class-alias-maps": [
+                               "typo3/sysext/backend/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/core/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/documentation/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/extbase/Migrations/Code/ClassAliasMap.php",
index 3170386..499465f 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "39981f9ff5c2b39ddf83a87ac8fc5d15",
+    "content-hash": "0e757db5e2ea6409800d3e505af4f744",
     "packages": [
         {
             "name": "cogpowered/finediff",
diff --git a/typo3/sysext/backend/Classes/AjaxLoginHandler.php b/typo3/sysext/backend/Classes/AjaxLoginHandler.php
deleted file mode 100644 (file)
index 46c0aca..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend;
-
-/*
- * 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 TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
-
-/**
- * This is the ajax handler for backend login after timeout.
- */
-class AjaxLoginHandler
-{
-    /**
-     * Handles the actual login process, more specifically it defines the response.
-     * The login details were sent in as part of the ajax request and automatically logged in
-     * the user inside the TYPO3 CMS bootstrap part of the ajax call. If that was successful, we have
-     * a BE user and reset the timer and hide the login window.
-     * If it was unsuccessful, we display that and show the login box again.
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function loginAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        if ($this->isAuthorizedBackendSession()) {
-            $result = ['success' => true];
-            if ($this->hasLoginBeenProcessed()) {
-                $formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get();
-                $formProtection->setSessionTokenFromRegistry();
-                $formProtection->persistSessionToken();
-            }
-        } else {
-            $result = ['success' => false];
-        }
-
-        $response->getBody()->write(json_encode(['login' => $result]));
-        return $response;
-    }
-
-    /**
-     * Logs out the current BE user
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function logoutAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $backendUser = $this->getBackendUser();
-        $backendUser->logoff();
-
-        $response->getBody()->write(json_encode([
-            'logout' => [
-                'success' => !isset($backendUser->user['uid'])
-            ]
-        ]));
-        return $response;
-    }
-
-    /**
-     * Refreshes the login without needing login information. We just refresh the session.
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function refreshAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->getBackendUser()->checkAuthentication();
-
-        $response->getBody()->write(json_encode([
-            'refresh' => [
-                'success' => true
-            ]
-        ]));
-        return $response;
-    }
-
-    /**
-     * Checks if the user session is expired yet
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function isTimedOutAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $session = [
-            'timed_out' => false,
-            'will_time_out' => false,
-            'locked' => false
-        ];
-        $backendUser = $this->getBackendUser();
-        if (@is_file(PATH_typo3conf . 'LOCK_BACKEND')) {
-            $session['locked'] = true;
-        } elseif (!isset($backendUser->user['uid'])) {
-            $session['timed_out'] = true;
-        } else {
-            $backendUser->fetchUserSession(true);
-            $ses_tstamp = $backendUser->user['ses_tstamp'];
-            $timeout = $backendUser->sessionTimeout;
-            // If 120 seconds from now is later than the session timeout, we need to show the refresh dialog.
-            // 120 is somewhat arbitrary to allow for a little room during the countdown and load times, etc.
-            $session['will_time_out'] = $GLOBALS['EXEC_TIME'] >= $ses_tstamp + $timeout - 120;
-        }
-        $response->getBody()->write(json_encode(['login' => $session]));
-        return $response;
-    }
-
-    /**
-     * Checks if a user is logged in and the session is active.
-     *
-     * @return bool
-     */
-    protected function isAuthorizedBackendSession()
-    {
-        $backendUser = $this->getBackendUser();
-        return $backendUser !== null && $backendUser instanceof BackendUserAuthentication && isset($backendUser->user['uid']);
-    }
-
-    /**
-     * Check whether the user was already authorized or not
-     *
-     * @return bool
-     */
-    protected function hasLoginBeenProcessed()
-    {
-        $loginFormData = $this->getBackendUser()->getLoginFormData();
-        return $loginFormData['status'] === 'login' && !empty($loginFormData['uname']) && !empty($loginFormData['uident']);
-    }
-
-    /**
-     * @return BackendUserAuthentication|NULL
-     */
-    protected function getBackendUser()
-    {
-        return isset($GLOBALS['BE_USER']) ? $GLOBALS['BE_USER'] : null;
-    }
-}
diff --git a/typo3/sysext/backend/Classes/Controller/AjaxLoginController.php b/typo3/sysext/backend/Classes/Controller/AjaxLoginController.php
new file mode 100644 (file)
index 0000000..6cddf77
--- /dev/null
@@ -0,0 +1,153 @@
+<?php
+namespace TYPO3\CMS\Backend\Controller;
+
+/*
+ * 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 TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+
+/**
+ * This is the ajax handler for backend login after timeout.
+ */
+class AjaxLoginController
+{
+    /**
+     * Handles the actual login process, more specifically it defines the response.
+     * The login details were sent in as part of the ajax request and automatically logged in
+     * the user inside the TYPO3 CMS bootstrap part of the ajax call. If that was successful, we have
+     * a BE user and reset the timer and hide the login window.
+     * If it was unsuccessful, we display that and show the login box again.
+     *
+     * @param ServerRequestInterface $request
+     * @param ResponseInterface $response
+     * @return ResponseInterface
+     */
+    public function loginAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        if ($this->isAuthorizedBackendSession()) {
+            $result = ['success' => true];
+            if ($this->hasLoginBeenProcessed()) {
+                $formProtection = \TYPO3\CMS\Core\FormProtection\FormProtectionFactory::get();
+                $formProtection->setSessionTokenFromRegistry();
+                $formProtection->persistSessionToken();
+            }
+        } else {
+            $result = ['success' => false];
+        }
+
+        $response->getBody()->write(json_encode(['login' => $result]));
+        return $response;
+    }
+
+    /**
+     * Logs out the current BE user
+     *
+     * @param ServerRequestInterface $request
+     * @param ResponseInterface $response
+     * @return ResponseInterface
+     */
+    public function logoutAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        $backendUser = $this->getBackendUser();
+        $backendUser->logoff();
+
+        $response->getBody()->write(json_encode([
+            'logout' => [
+                'success' => !isset($backendUser->user['uid'])
+            ]
+        ]));
+        return $response;
+    }
+
+    /**
+     * Refreshes the login without needing login information. We just refresh the session.
+     *
+     * @param ServerRequestInterface $request
+     * @param ResponseInterface $response
+     * @return ResponseInterface
+     */
+    public function refreshAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        $this->getBackendUser()->checkAuthentication();
+
+        $response->getBody()->write(json_encode([
+            'refresh' => [
+                'success' => true
+            ]
+        ]));
+        return $response;
+    }
+
+    /**
+     * Checks if the user session is expired yet
+     *
+     * @param ServerRequestInterface $request
+     * @param ResponseInterface $response
+     * @return ResponseInterface
+     */
+    public function isTimedOutAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        $session = [
+            'timed_out' => false,
+            'will_time_out' => false,
+            'locked' => false
+        ];
+        $backendUser = $this->getBackendUser();
+        if (@is_file(PATH_typo3conf . 'LOCK_BACKEND')) {
+            $session['locked'] = true;
+        } elseif (!isset($backendUser->user['uid'])) {
+            $session['timed_out'] = true;
+        } else {
+            $backendUser->fetchUserSession(true);
+            $ses_tstamp = $backendUser->user['ses_tstamp'];
+            $timeout = $backendUser->sessionTimeout;
+            // If 120 seconds from now is later than the session timeout, we need to show the refresh dialog.
+            // 120 is somewhat arbitrary to allow for a little room during the countdown and load times, etc.
+            $session['will_time_out'] = $GLOBALS['EXEC_TIME'] >= $ses_tstamp + $timeout - 120;
+        }
+        $response->getBody()->write(json_encode(['login' => $session]));
+        return $response;
+    }
+
+    /**
+     * Checks if a user is logged in and the session is active.
+     *
+     * @return bool
+     */
+    protected function isAuthorizedBackendSession()
+    {
+        $backendUser = $this->getBackendUser();
+        return $backendUser !== null && $backendUser instanceof BackendUserAuthentication && isset($backendUser->user['uid']);
+    }
+
+    /**
+     * Check whether the user was already authorized or not
+     *
+     * @return bool
+     */
+    protected function hasLoginBeenProcessed()
+    {
+        $loginFormData = $this->getBackendUser()->getLoginFormData();
+        return $loginFormData['status'] === 'login' && !empty($loginFormData['uname']) && !empty($loginFormData['uident']);
+    }
+
+    /**
+     * @return BackendUserAuthentication|NULL
+     */
+    protected function getBackendUser()
+    {
+        return isset($GLOBALS['BE_USER']) ? $GLOBALS['BE_USER'] : null;
+    }
+}
index 976f0b7..cd6a6b4 100644 (file)
@@ -122,27 +122,27 @@ return [
     // Log in into backend
     'login' => [
         'path' => '/login',
-        'target' => \TYPO3\CMS\Backend\AjaxLoginHandler::class . '::loginAction',
+        'target' => \TYPO3\CMS\Backend\Controller\AjaxLoginController::class . '::loginAction',
         'access' => 'public'
     ],
 
     // Log out from backend
     'logout' => [
         'path' => '/logout',
-        'target' => \TYPO3\CMS\Backend\AjaxLoginHandler::class . '::logoutAction',
+        'target' => \TYPO3\CMS\Backend\Controller\AjaxLoginController::class . '::logoutAction',
         'access' => 'public'
     ],
 
     // Refresh login of backend
     'login_refresh' => [
         'path' => '/login/refresh',
-        'target' => \TYPO3\CMS\Backend\AjaxLoginHandler::class . '::refreshAction',
+        'target' => \TYPO3\CMS\Backend\Controller\AjaxLoginController::class . '::refreshAction',
     ],
 
     // Check if backend session has timed out
     'login_timedout' => [
         'path' => '/login/timedout',
-        'target' => \TYPO3\CMS\Backend\AjaxLoginHandler::class . '::isTimedOutAction',
+        'target' => \TYPO3\CMS\Backend\Controller\AjaxLoginController::class . '::isTimedOutAction',
         'access' => 'public',
         'parameters' => [
             'skipSessionUpdate' => 1
diff --git a/typo3/sysext/backend/Migrations/Code/ClassAliasMap.php b/typo3/sysext/backend/Migrations/Code/ClassAliasMap.php
new file mode 100644 (file)
index 0000000..f759d9c
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+return [
+    'TYPO3\\CMS\\Backend\\AjaxLoginHandler' => \TYPO3\CMS\Backend\Controller\AjaxLoginController::class,
+];
diff --git a/typo3/sysext/backend/Migrations/Code/LegacyClassesForIde.php b/typo3/sysext/backend/Migrations/Code/LegacyClassesForIde.php
new file mode 100644 (file)
index 0000000..72f2dfe
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+namespace {
+    die('Access denied');
+}
+
+namespace TYPO3\CMS\Backend {
+    class AjaxLoginHandler extends \TYPO3\CMS\Backend\Controller\AjaxLoginController
+    {
+    }
+}
index f516cee..bee93bd 100644 (file)
                                "partOfMinimalUsableSystem": true
                        },
                        "extension-key": "backend"
+               },
+               "typo3/class-alias-loader": {
+                       "class-alias-maps": [
+                               "Migrations/Code/ClassAliasMap.php"
+                       ]
                }
        },
        "autoload": {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-82805-RenamedAjaxLoginHandlerPHPClass.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-82805-RenamedAjaxLoginHandlerPHPClass.rst
new file mode 100644 (file)
index 0000000..568ee75
--- /dev/null
@@ -0,0 +1,34 @@
+.. include:: ../../Includes.txt
+
+========================================================
+Deprecation: #82805 - Renamed AjaxLoginHandler PHP class
+========================================================
+
+See :issue:`82805`
+
+Description
+===========
+
+The PHP class :php:`TYPO3\CMS\Backend\AjaxLoginHandler` is renamed to the proper class name
+:php:`TYPO3\CMS\Backend\Controller\AjaxLoginController` as its a controller class with actions.
+
+
+Impact
+======
+
+Using the old PHP class is possible but any usages should be moved to the new class name.
+
+
+Affected Installations
+======================
+
+Any TYPO3 instances using the PHP class directly in an extension.
+
+
+Migration
+=========
+
+A extension scanner already checks for the old class name. A simple renaming of the class name
+to the new class :php:`TYPO3\CMS\Backend\Controller\AjaxLoginController` is sufficient.
+
+.. index:: PHP-API, FullyScanned
\ No newline at end of file
index 414ee52..5b144b7 100644 (file)
@@ -437,6 +437,11 @@ return [
             'Breaking-57594-OptimizeReflectionServiceCacheHandling.rst',
         ],
     ],
+    'TYPO3\CMS\Backend\AjaxLoginHandler' => [
+        'restFiles' => [
+            'Deprecation-82805-RenamedAjaxLoginHandlerPHPClass.rst',
+        ],
+    ],
 
     // Removed interfaces
     'TYPO3\CMS\Backend\Form\DatabaseFileIconsHookInterface' => [