Passed
Push — master ( 0df511...a1aa6e )
by Morris
13:44
created

ReloadExecutionMiddleware::beforeController()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
/**
4
 * @copyright Copyright (c) 2019, Roeland Jago Douma <[email protected]>
5
 *
6
 * @author Roeland Jago Douma <[email protected]>
7
 *
8
 * @license GNU AGPL version 3 or any later version
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU Affero General Public License as
12
 * published by the Free Software Foundation, either version 3 of the
13
 * License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU Affero General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU Affero General Public License
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 *
23
 */
24
25
namespace OC\AppFramework\Middleware\Security;
26
27
use OC\AppFramework\Middleware\Security\Exceptions\ReloadExecutionException;
28
use OCP\AppFramework\Http\RedirectResponse;
29
use OCP\AppFramework\Middleware;
30
use OCP\ISession;
31
use OCP\IURLGenerator;
32
33
/**
34
 * Simple middleware to handle the clearing of the execution context. This will trigger
35
 * a reload but if the session variable is set we properly redirect to the login page.
36
 */
37
class ReloadExecutionMiddleware extends Middleware {
38
	/** @var ISession */
39
	private $session;
40
	/** @var IURLGenerator */
41
	private $urlGenerator;
42
43
	public function __construct(ISession $session, IURLGenerator $urlGenerator) {
44
		$this->session = $session;
45
		$this->urlGenerator = $urlGenerator;
46
	}
47
48
	public function beforeController($controller, $methodName) {
49
		if ($this->session->exists('clearingExecutionContexts')) {
50
			throw new ReloadExecutionException();
51
		}
52
	}
53
54
	public function afterException($controller, $methodName, \Exception $exception) {
55
		if ($exception instanceof ReloadExecutionException) {
56
			$this->session->remove('clearingExecutionContexts');
57
58
			return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute(
59
				'core.login.showLoginForm',
60
				['clear' => true] // this param the the code in login.js may be removed when the "Clear-Site-Data" is working in the browsers
61
			));
62
		}
63
64
		return parent::afterException($controller, $methodName, $exception);
65
	}
66
67
68
}
69