[TASK] Add LoginType enumeration 90/57390/2
authorBenni Mack <benni@typo3.org>
Wed, 27 Jun 2018 06:17:39 +0000 (08:17 +0200)
committerBenni Mack <benni@typo3.org>
Wed, 27 Jun 2018 08:01:50 +0000 (10:01 +0200)
A new enumeration class "LoginType" is added to simplify readability and validation
of correct strings within the TYPO3 Authentication process.

Resolves: #85402
Releases: master
Change-Id: Ib53ed304de5662f5bd8628509a229b2832ff18fa
Reviewed-on: https://review.typo3.org/57390
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Henning Liebe <h.liebe@neusta.de>
Tested-by: Henning Liebe <h.liebe@neusta.de>
Reviewed-by: Sascha Rademacher <sascha.rademacher+typo3@gmail.com>
Tested-by: Sascha Rademacher <sascha.rademacher+typo3@gmail.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
typo3/sysext/core/Classes/Authentication/AbstractUserAuthentication.php
typo3/sysext/core/Classes/Authentication/AuthenticationService.php
typo3/sysext/core/Classes/Authentication/LoginType.php [new file with mode: 0644]
typo3/sysext/felogin/Classes/Controller/FrontendLoginController.php
typo3/sysext/felogin/Tests/Unit/Controller/FrontendLoginControllerTest.php

index af00f7e..70ad670 100644 (file)
@@ -569,7 +569,7 @@ abstract class AbstractUserAuthentication implements LoggerAwareInterface
         $loginData = $this->getLoginFormData();
         $this->logger->debug('Login data', $loginData);
         // Active logout (eg. with "logout" button)
-        if ($loginData['status'] === 'logout') {
+        if ($loginData['status'] === LoginType::LOGOUT) {
             if ($this->writeStdLog) {
                 // $type,$action,$error,$details_nr,$details,$data,$tablename,$recuid,$recpid
                 $this->writelog(255, 2, 0, 2, 'User %s logged out', [$this->user['username']], '', 0, 0);
@@ -592,7 +592,7 @@ abstract class AbstractUserAuthentication implements LoggerAwareInterface
         }
 
         // Active login (eg. with login form).
-        if (!$haveSession && $loginData['status'] === 'login') {
+        if (!$haveSession && $loginData['status'] === LoginType::LOGIN) {
             $activeLogin = true;
             $this->logger->debug('Active login (eg. with login form)');
             // check referrer for submitted login values
@@ -608,7 +608,7 @@ abstract class AbstractUserAuthentication implements LoggerAwareInterface
         }
 
         // Cause elevation of privilege, make sure regenerateSessionId is called later on
-        if ($anonymousSession && $loginData['status'] === 'login') {
+        if ($anonymousSession && $loginData['status'] === LoginType::LOGIN) {
             $activeLogin = true;
         }
 
@@ -1275,7 +1275,7 @@ abstract class AbstractUserAuthentication implements LoggerAwareInterface
             $loginData['uident'] = GeneralUtility::_POST($this->formfield_uident);
         }
         // Only process the login data if a login is requested
-        if ($loginData['status'] === 'login') {
+        if ($loginData['status'] === LoginType::LOGIN) {
             $loginData = $this->processLoginData($loginData);
         }
         $loginData = array_map('trim', $loginData);
index 4c8f28f..4b94f58 100644 (file)
@@ -49,7 +49,7 @@ class AuthenticationService extends AbstractAuthenticationService
      */
     public function getUser()
     {
-        if ($this->login['status'] !== 'login') {
+        if ($this->login['status'] !== LoginType::LOGIN) {
             return false;
         }
         if ((string)$this->login['uident_text'] === '') {
diff --git a/typo3/sysext/core/Classes/Authentication/LoginType.php b/typo3/sysext/core/Classes/Authentication/LoginType.php
new file mode 100644 (file)
index 0000000..d06c911
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Core\Authentication;
+
+/*
+ * 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 TYPO3\CMS\Core\Type\Enumeration;
+
+/**
+ * Contains the different login types
+ */
+final class LoginType extends Enumeration
+{
+    /**
+     * When a login is in process
+     */
+    public const LOGIN = 'login';
+
+    /**
+     * When a logout is in process
+     */
+    public const LOGOUT = 'logout';
+}
index b989f03..00f5150 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Felogin\Controller;
 
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
+use TYPO3\CMS\Core\Authentication\LoginType;
 use TYPO3\CMS\Core\Crypto\Random;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
@@ -176,7 +177,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
             }
         }
         // Process the redirect
-        if (($this->logintype === 'login' || $this->logintype === 'logout') && $this->redirectUrl && !$this->noRedirect) {
+        if (($this->logintype === LoginType::LOGIN || $this->logintype === LoginType::LOGOUT) && $this->redirectUrl && !$this->noRedirect) {
             if (!$this->frontendController->fe_user->isCookieSet() && $this->userIsLoggedIn) {
                 $content .= $this->cObj->stdWrap($this->pi_getLL('cookie_warning'), $this->conf['cookieWarning_stdWrap.']);
             } else {
@@ -529,7 +530,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
         $subpartArray = ($linkpartArray = ($markerArray = []));
         $gpRedirectUrl = '';
         $markerArray['###LEGEND###'] = htmlspecialchars($this->pi_getLL('oLabel_header_welcome'));
-        if ($this->logintype === 'login') {
+        if ($this->logintype === LoginType::LOGIN) {
             if ($this->userIsLoggedIn) {
                 // login success
                 $markerArray['###STATUS_HEADER###'] = $this->getDisplayText('success_header', $this->conf['successHeader_stdWrap.']);
@@ -562,7 +563,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
                 $gpRedirectUrl = GeneralUtility::_GP('redirect_url');
             }
         } else {
-            if ($this->logintype === 'logout') {
+            if ($this->logintype === LoginType::LOGOUT) {
                 // login form after logout
                 $markerArray['###STATUS_HEADER###'] = $this->getDisplayText('logout_header', $this->conf['logoutHeader_stdWrap.']);
                 $markerArray['###STATUS_MESSAGE###'] = $this->getDisplayText('logout_message', $this->conf['logoutMessage_stdWrap.']);
@@ -658,7 +659,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
         if ($this->conf['redirectMode']) {
             $redirectMethods = GeneralUtility::trimExplode(',', $this->conf['redirectMode'], true);
             foreach ($redirectMethods as $redirMethod) {
-                if ($this->frontendController->loginUser && $this->logintype === 'login') {
+                if ($this->frontendController->loginUser && $this->logintype === LoginType::LOGIN) {
                     // Logintype is needed because the login-page wouldn't be accessible anymore after a login (would always redirect)
                     switch ($redirMethod) {
                         case 'groupLogin':
@@ -768,7 +769,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
                             }
                             break;
                     }
-                } elseif ($this->logintype === 'login') {
+                } elseif ($this->logintype === LoginType::LOGIN) {
                     // after login-error
                     switch ($redirMethod) {
                         case 'loginError':
@@ -787,7 +788,7 @@ class FrontendLoginController extends AbstractPlugin implements LoggerAwareInter
                 } elseif ($this->logintype == '' && $redirMethod === 'logout' && $this->conf['redirectPageLogout'] && $this->frontendController->loginUser) {
                     // If logout and page not accessible
                     $redirect_url[] = $this->pi_getPageLink((int)$this->conf['redirectPageLogout']);
-                } elseif ($this->logintype === 'logout') {
+                } elseif ($this->logintype === LoginType::LOGOUT) {
                     // after logout
                     // Hook for general actions after after logout has been confirmed
                     foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['felogin']['logout_confirmed'] ?? [] as $_funcRef) {
index cae5ad3..1db65eb 100644 (file)
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Felogin\Tests\Unit\Controller;
 use Prophecy\Argument;
 use Prophecy\Prophecy\ObjectProphecy;
 use Psr\Log\NullLogger;
+use TYPO3\CMS\Core\Authentication\LoginType;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
@@ -509,7 +510,7 @@ class FrontendLoginControllerTest extends \TYPO3\TestingFramework\Core\Unit\Unit
         ];
 
         $this->accessibleFixture->_set('conf', $conf);
-        $this->accessibleFixture->_set('logintype', 'login');
+        $this->accessibleFixture->_set('logintype', LoginType::LOGIN);
         $this->accessibleFixture->_set('referer', 'http://www.example.com/snafu');
         /** @var TypoScriptFrontendController $tsfe */
         $tsfe = $this->accessibleFixture->_get('frontendController');