Completed
Pull Request — master (#5174)
by Björn
17:50
created

Application::setUp()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 0
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * @copyright Copyright (c) 2016, ownCloud, Inc.
4
 *
5
 * @author Björn Schießle <[email protected]>
6
 * @author Clark Tomlinson <[email protected]>
7
 * @author Thomas Müller <[email protected]>
8
 *
9
 * @license AGPL-3.0
10
 *
11
 * This code is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU Affero General Public License, version 3,
13
 * as published by the Free Software Foundation.
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, version 3,
21
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
22
 *
23
 */
24
namespace OCA\Encryption\AppInfo;
25
26
27
use OC\Files\View;
28
use OCA\Encryption\Controller\RecoveryController;
29
use OCA\Encryption\Controller\SettingsController;
30
use OCA\Encryption\Controller\StatusController;
31
use OCA\Encryption\Crypto\Crypt;
32
use OCA\Encryption\Crypto\DecryptAll;
33
use OCA\Encryption\Crypto\EncryptAll;
34
use OCA\Encryption\Crypto\Encryption;
35
use OCA\Encryption\HookManager;
36
use OCA\Encryption\Hooks\UserHooks;
37
use OCA\Encryption\KeyManager;
38
use OCA\Encryption\Recovery;
39
use OCA\Encryption\Session;
40
use OCA\Encryption\Users\Setup;
41
use OCA\Encryption\Util;
42
use OCP\App;
43
use OCP\AppFramework\IAppContainer;
44
use OCP\Encryption\IManager;
45
use OCP\IConfig;
46
use Symfony\Component\Console\Helper\QuestionHelper;
47
48
49
class Application extends \OCP\AppFramework\App {
50
51
	/** @var IManager */
52
	private $encryptionManager;
53
	/** @var IConfig */
54
	private $config;
55
56
	/**
57
	 * @param array $urlParams
58
	 * @param bool $encryptionSystemReady
59
	 */
60
	public function __construct($urlParams = array(), $encryptionSystemReady = true) {
61
		parent::__construct('encryption', $urlParams);
62
		$this->encryptionManager = \OC::$server->getEncryptionManager();
63
		$this->config = \OC::$server->getConfig();
64
		$this->registerServices();
65
		if($encryptionSystemReady === false) {
66
			/** @var Session $session */
67
			$session = $this->getContainer()->query('Session');
68
			$session->setStatus(Session::RUN_MIGRATION);
69
		}
70
71
	}
72
73
	public function setUp() {
74
		if ($this->encryptionManager->isEnabled()) {
75
			/** @var Setup $setup */
76
			$setup = $this->getContainer()->query('UserSetup');
77
			$setup->setupSystem();
78
		}
79
	}
80
81
	/**
82
	 * register hooks
83
	 */
84
	public function registerHooks() {
85
		if (!$this->config->getSystemValue('maintenance', false)) {
86
87
			$container = $this->getContainer();
88
			$server = $container->getServer();
89
			// Register our hooks and fire them.
90
			$hookManager = new HookManager();
91
92
			$hookManager->registerHook([
93
				new UserHooks($container->query('KeyManager'),
94
					$server->getUserManager(),
95
					$server->getLogger(),
96
					$container->query('UserSetup'),
97
					$server->getUserSession(),
98
					$container->query('Util'),
99
					$container->query('Session'),
100
					$container->query('Crypt'),
101
					$container->query('Recovery'))
102
			]);
103
104
			$hookManager->fireHooks();
105
106
		} else {
107
			// Logout user if we are in maintenance to force re-login
108
			$this->getContainer()->getServer()->getUserSession()->logout();
109
		}
110
	}
111
112
	public function registerEncryptionModule() {
113
		$container = $this->getContainer();
114
115
116
		$this->encryptionManager->registerEncryptionModule(
117
			Encryption::ID,
118
			Encryption::DISPLAY_NAME,
119
			function() use ($container) {
120
121
			return new Encryption(
122
				$container->query('Crypt'),
123
				$container->query('KeyManager'),
124
				$container->query('Util'),
125
				$container->query('Session'),
126
				$container->query('EncryptAll'),
127
				$container->query('DecryptAll'),
128
				$container->getServer()->getLogger(),
129
				$container->getServer()->getL10N($container->getAppName())
130
			);
131
		});
132
133
	}
134
135
	public function registerServices() {
136
		$container = $this->getContainer();
137
138
		$container->registerService('Crypt',
139
			function (IAppContainer $c) {
140
				$server = $c->getServer();
141
				return new Crypt($server->getLogger(),
142
					$server->getUserSession(),
143
					$server->getConfig(),
144
					$server->getL10N($c->getAppName()));
145
			});
146
147
		$container->registerService('Session',
148
			function (IAppContainer $c) {
149
				$server = $c->getServer();
150
				return new Session($server->getSession());
151
			}
152
		);
153
154
		$container->registerService('KeyManager',
155 View Code Duplication
			function (IAppContainer $c) {
156
				$server = $c->getServer();
157
158
				return new KeyManager($server->getEncryptionKeyStorage(),
159
					$c->query('Crypt'),
160
					$server->getConfig(),
161
					$server->getUserSession(),
162
					new Session($server->getSession()),
163
					$server->getLogger(),
164
					$c->query('Util')
165
				);
166
			});
167
168
		$container->registerService('Recovery',
169 View Code Duplication
			function (IAppContainer $c) {
170
				$server = $c->getServer();
171
172
				return new Recovery(
173
					$server->getUserSession(),
174
					$c->query('Crypt'),
175
					$server->getSecureRandom(),
176
					$c->query('KeyManager'),
177
					$server->getConfig(),
178
					$server->getEncryptionKeyStorage(),
179
					$server->getEncryptionFilesHelper(),
180
					new View());
181
			});
182
183 View Code Duplication
		$container->registerService('RecoveryController', function (IAppContainer $c) {
184
			$server = $c->getServer();
185
			return new RecoveryController(
186
				$c->getAppName(),
187
				$server->getRequest(),
188
				$server->getConfig(),
189
				$server->getL10N($c->getAppName()),
190
				$c->query('Recovery'));
191
		});
192
193 View Code Duplication
		$container->registerService('StatusController', function (IAppContainer $c) {
194
			$server = $c->getServer();
195
			return new StatusController(
196
				$c->getAppName(),
197
				$server->getRequest(),
198
				$server->getL10N($c->getAppName()),
199
				$c->query('Session'),
200
				$server->getEncryptionManager()
201
			);
202
		});
203
204
		$container->registerService('SettingsController', function (IAppContainer $c) {
205
			$server = $c->getServer();
206
			return new SettingsController(
207
				$c->getAppName(),
208
				$server->getRequest(),
209
				$server->getL10N($c->getAppName()),
210
				$server->getUserManager(),
211
				$server->getUserSession(),
212
				$c->query('KeyManager'),
213
				$c->query('Crypt'),
214
				$c->query('Session'),
215
				$server->getSession(),
216
				$c->query('Util')
217
			);
218
		});
219
220
		$container->registerService('UserSetup',
221
			function (IAppContainer $c) {
222
				$server = $c->getServer();
223
				return new Setup($server->getLogger(),
224
					$server->getUserSession(),
225
					$c->query('Crypt'),
226
					$c->query('KeyManager'));
227
			});
228
229
		$container->registerService('Util',
230 View Code Duplication
			function (IAppContainer $c) {
231
				$server = $c->getServer();
232
233
				return new Util(
234
					new View(),
235
					$c->query('Crypt'),
236
					$server->getLogger(),
237
					$server->getUserSession(),
238
					$server->getConfig(),
239
					$server->getUserManager());
240
			});
241
242
		$container->registerService('EncryptAll',
243
			function (IAppContainer $c) {
244
				$server = $c->getServer();
245
				return new EncryptAll(
246
					$c->query('UserSetup'),
247
					$c->getServer()->getUserManager(),
248
					new View(),
249
					$c->query('KeyManager'),
250
					$c->query('Util'),
251
					$server->getConfig(),
252
					$server->getMailer(),
253
					$server->getL10N('encryption'),
254
					new QuestionHelper(),
255
					$server->getSecureRandom()
256
				);
257
			}
258
		);
259
260
		$container->registerService('DecryptAll',
261
			function (IAppContainer $c) {
262
				return new DecryptAll(
263
					$c->query('Util'),
264
					$c->query('KeyManager'),
265
					$c->query('Crypt'),
266
					$c->query('Session'),
267
					new QuestionHelper()
268
				);
269
			}
270
		);
271
272
	}
273
}
274