[!!!][FEATURE] Introduce Backend Routing
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Controller / LogoutController.php
1 <?php
2 namespace TYPO3\CMS\Backend\Controller;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use Psr\Http\Message\ResponseInterface;
18 use Psr\Http\Message\ServerRequestInterface;
19 use TYPO3\CMS\Backend\Utility\BackendUtility;
20 use TYPO3\CMS\Core\Http\Response;
21 use TYPO3\CMS\Core\Utility\GeneralUtility;
22 use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
23
24 /**
25 * Script Class for logging a user out.
26 * Does not display any content, just calls the logout-function for the current user and then makes a redirect.
27 */
28 class LogoutController implements \TYPO3\CMS\Core\Http\ControllerInterface {
29
30 /**
31 * Injects the request object for the current request or subrequest
32 * As this controller goes only through the main() method, it is rather simple for now
33 * This will be split up in an abstract controller once proper routing/dispatcher is in place.
34 *
35 * @param ServerRequestInterface $request
36 * @return ResponseInterface $response
37 */
38 public function processRequest(ServerRequestInterface $request) {
39 $this->logout();
40
41 $redirectUrl = isset($request->getParsedBody()['redirect']) ? $request->getParsedBody()['redirect'] : $request->getQueryParams()['redirect'];
42 $redirectUrl = GeneralUtility::sanitizeLocalUrl($redirectUrl);
43 if (empty($redirectUrl)) {
44 /** @var \TYPO3\CMS\Backend\Routing\UriBuilder $uriBuilder */
45 $uriBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\UriBuilder::class);
46 $redirectUrl = (string)$uriBuilder->buildUriFromRoute('login', array(), $uriBuilder::ABSOLUTE_URL);
47 }
48 /** @var Response $response */
49 $response = GeneralUtility::makeInstance(Response::class);
50 $response = $response->withHeader('Location', GeneralUtility::locationHeaderUrl($redirectUrl));
51 return $response->withStatus(303);
52 }
53
54 /**
55 * Performs the logout processing
56 *
57 * @return void
58 */
59 public function logout() {
60 if (empty($this->getBackendUser()->user['username'])) {
61 return;
62 }
63 // Logout written to log
64 $this->getBackendUser()->writelog(255, 2, 0, 1, 'User %s logged out from TYPO3 Backend', array($this->getBackendUser()->user['username']));
65 /** @var \TYPO3\CMS\Core\FormProtection\BackendFormProtection $backendFormProtection */
66 $backendFormProtection = FormProtectionFactory::get();
67 $backendFormProtection->removeSessionTokenFromRegistry();
68 $this->getBackendUser()->logoff();
69 }
70
71 /**
72 * Returns the current BE user.
73 *
74 * @return \TYPO3\CMS\Core\Authentication\BackendUserAuthentication
75 */
76 protected function getBackendUser() {
77 return $GLOBALS['BE_USER'];
78 }
79
80 }