[FEATURE] Add option preserveFeuserLogin 89/48589/4
authorChristian Futterlieb <christian@futterlieb.ch>
Wed, 15 Jun 2016 23:06:54 +0000 (01:06 +0200)
committerChristian Futterlieb <christian@futterlieb.ch>
Thu, 7 Jul 2016 14:28:55 +0000 (16:28 +0200)
When a valid frontend user login session is detected, add a 'Cookie'
HTTP header to the request (which gets the 404/403 page).

Change-Id: Iabae9a392363f60537e752986f1dba093a912945
Resolves: #76627
Reviewed-on: https://review.typo3.org/48589
Tested-by: Christian Futterlieb <christian@futterlieb.ch>
Reviewed-by: Christian Futterlieb <christian@futterlieb.ch>
Classes/Controller/PagenotfoundController.php
Documentation/Configuration/ExtensionManager/Index.rst
ext_conf_template.txt
locallang_db.xml

index 3454cc5..47edeaa 100644 (file)
@@ -191,6 +191,13 @@ class PagenotfoundController
      */
     protected $_digestAuthentication = '';
 
+    /**
+     * Presesrve frontend user login session when fetching the 404/403 page
+     *
+     * @var boolean
+     */
+    protected $_preserveFeuserLogin = false;
+
        /**
         * Main method called through TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::pageErrorHandler()
         *
@@ -434,6 +441,10 @@ class PagenotfoundController
 
             $this->_absoluteReferencePrefix = $absoluteReferencePrefix;
         }
+
+        if(isset($conf['preserveFeuserLogin'])) {
+            $this->_preserveFeuserLogin = (bool) $conf['preserveFeuserLogin'];
+        }
     }
 
     /**
@@ -480,6 +491,15 @@ class PagenotfoundController
                     'Referer: ' . GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL')
                 );
 
+                // Preserve a frontend user login session
+                if ($this->_preserveFeuserLogin) {
+                    $frontendUserAuthentication = $this->_getTyposcriptFrontendController()->fe_user;
+                    if (is_array($frontendUserAuthentication->user) && $frontendUserAuthentication->user['uid'] > 0) {
+                        $headers[] = 'Cookie: ' . rawurlencode($frontendUserAuthentication->getCookieName()) . '=' . rawurlencode($frontendUserAuthentication->id);
+                        $this->_sendXForwardedForHeader = true;
+                    }
+                }
+
                 if ($this->_sendXForwardedForHeader) {
                     $headers[] = 'X-Forwarded-For: ' . GeneralUtility::getIndpEnv('REMOTE_ADDR');
                 }
index bb73ddd..07892ce 100644 (file)
@@ -166,6 +166,46 @@ Advanced options
    Default
          0
 
+.. container:: table-row
+
+   Property
+         preserveFeuserLogin
+
+   Data type
+         boolean
+
+   Description
+         Preserve a frontend user login session by sending the session cookie
+         when fetching the 404/403 page.
+
+         This option internally enables the option ``sendXForwardedForHeader``
+         when a valid login session is detected.
+
+         To get this working, you need to configure your TYPO3 installation in
+         one of the following ways.
+
+         1: Configure the IP address of the machine, where TYPO3 runs on as
+         ``reverseProxyIP``:
+
+         .. code-block:: php
+
+             $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyIP'] = '127.0.0.1';
+             $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyHeaderMultiValue'] = 'first';
+
+         2: Alternatively you can disable the ``lockIP`` for frontend login
+         sessions:
+
+         **CAUTION: this decreases the security of the frontend login sessions and
+         is NOT RECOMMENDED, especially for public websites! Use only if you
+         know what you do.**
+
+         .. code-block:: php
+
+             $GLOBALS['TYPO3_CONF_VARS']['FE']['lockIP'] = 0;
+
+   Default
+         0
+
 .. ###### END~OF~TABLE ######
 
 .. _section-language-options:
@@ -358,5 +398,4 @@ HTTP options
    Default
          -
 
-
 .. ###### END~OF~TABLE ######
index f9d4e55..6c91167 100644 (file)
@@ -22,6 +22,9 @@ absoluteReferencePrefix =
 # cat=advanced//002; type=boolean; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.disableDomainConfig
 disableDomainConfig = 0
 
+# cat=advanced//003; type=boolean; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.preserveFeuserLogin
+preserveFeuserLogin = 0
+
 # cat=http//001; type=options[Default (Do not send special headers)=0, HTTP/1.1 400 Bad Request=1, HTTP/1.1 401 Unauthorized=2, HTTP/1.1 402 Payment Required=3, HTTP/1.1 403 Forbidden=4]; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.default403Header
 default403Header = 4
 
index 6ef8a45..d04cf4c 100644 (file)
@@ -40,6 +40,7 @@
             <label index="pagenotfoundhandling.constants.additionalHeaders">Additional HTTP headers: Send additional HTTP headers with the 404/403 page. Separate headers with '|'. Default: ''</label>
             <label index="pagenotfoundhandling.constants.absoluteReferencePrefix">Additional reference prefix: If your TYPO3 installation runs in a subdir of the DOCUMENT_ROOT, add the relative path from DOCUMENT_ROOT to the installation here. Default: ''</label>
             <label index="pagenotfoundhandling.constants.digestAuthentication">HTTP digest authentication:Username and password when using HTTP digest authentication (this is not required for HTTP basic authentication). Format: "username:password". Default: ''</label>
+            <label index="pagenotfoundhandling.constants.preserveFeuserLogin">Preserve frontend user login:Send the session cookie of a logged in frontend user when fetching the 404/403 page. Default: '0'</label>
         </languageKey>
         <languageKey index="de" type="array">
             <label index="pagenotfoundhandling.sys_domain.tcasheet.title">404 Behandlung</label>
@@ -76,6 +77,7 @@
             <label index="pagenotfoundhandling.constants.additionalHeaders">Zusätzliche HTTP header: Sendet die hier definierten HTTP headers mit der 404/403 Seite. Mehrere headers mit '|' trennen. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.absoluteReferencePrefix">Absoluter Referenz-Präfix: Falls TYPO3 nicht direkt im DOCUMENT_ROOT installiert ist, muss der relative Pfad vom DOCUMENT_ROOT zur Installation hier angegeben werden. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.digestAuthentication">HTTP digest authentication:Benutzername und Passwort für HTTP digest authentication (nicht notwendig, wenn HTTP basic authentication verwendet wird). Format: "benutzername:passwort". Standard: ''</label>
+            <label index="pagenotfoundhandling.constants.preserveFeuserLogin">Frontend Benutzer Login bewahren:Das session cookie eines eingeloggten Frontend Benutzers wird beim Holen der 404/403 Seite mitgesendet. Standard: '0'</label>
         </languageKey>
     </data>
 </T3locallang>