Passed
Push — master ( 77c1ae...b638c6 )
by Roeland
22:03 queued 10:41
created

Server::boot()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @copyright Copyright (c) 2016, ownCloud, Inc.
4
 * @copyright Copyright (c) 2016, Lukas Reschke <[email protected]>
5
 *
6
 * @author Arne Hamann <[email protected]>
7
 * @author Arthur Schiwon <[email protected]>
8
 * @author Bart Visscher <[email protected]>
9
 * @author Bernhard Posselt <[email protected]>
10
 * @author Bernhard Reiter <[email protected]>
11
 * @author Bjoern Schiessle <[email protected]>
12
 * @author Björn Schießle <[email protected]>
13
 * @author Christopher Schäpers <[email protected]>
14
 * @author Christoph Wurst <[email protected]>
15
 * @author Damjan Georgievski <[email protected]>
16
 * @author Daniel Kesselberg <[email protected]>
17
 * @author Georg Ehrke <[email protected]>
18
 * @author Joas Schilling <[email protected]>
19
 * @author John Molakvoæ (skjnldsv) <[email protected]>
20
 * @author Jörn Friedrich Dreyer <[email protected]>
21
 * @author Julius Haertl <[email protected]>
22
 * @author Julius Härtl <[email protected]>
23
 * @author Lukas Reschke <[email protected]>
24
 * @author Maxence Lange <[email protected]>
25
 * @author Michael Weimann <[email protected]>
26
 * @author Morris Jobke <[email protected]>
27
 * @author Piotr Mrówczyński <[email protected]>
28
 * @author Robin Appelman <[email protected]>
29
 * @author Robin McCorkell <[email protected]>
30
 * @author Roeland Jago Douma <[email protected]>
31
 * @author root <[email protected]>
32
 * @author Sander <[email protected]>
33
 * @author Thomas Müller <[email protected]>
34
 * @author Thomas Tanghus <[email protected]>
35
 * @author Tobia De Koninck <[email protected]>
36
 * @author Vincent Petry <[email protected]>
37
 * @author Xheni Myrtaj <[email protected]>
38
 *
39
 * @license AGPL-3.0
40
 *
41
 * This code is free software: you can redistribute it and/or modify
42
 * it under the terms of the GNU Affero General Public License, version 3,
43
 * as published by the Free Software Foundation.
44
 *
45
 * This program is distributed in the hope that it will be useful,
46
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
47
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
48
 * GNU Affero General Public License for more details.
49
 *
50
 * You should have received a copy of the GNU Affero General Public License, version 3,
51
 * along with this program. If not, see <http://www.gnu.org/licenses/>
52
 *
53
 */
54
55
namespace OC;
56
57
use bantu\IniGetWrapper\IniGetWrapper;
58
use OC\Accounts\AccountManager;
59
use OC\App\AppManager;
60
use OC\App\AppStore\Bundles\BundleFetcher;
61
use OC\App\AppStore\Fetcher\AppFetcher;
62
use OC\App\AppStore\Fetcher\CategoryFetcher;
63
use OC\AppFramework\Http\Request;
64
use OC\AppFramework\Utility\SimpleContainer;
65
use OC\AppFramework\Utility\TimeFactory;
66
use OC\Authentication\Events\LoginFailed;
67
use OC\Authentication\Listeners\LoginFailedListener;
68
use OC\Authentication\LoginCredentials\Store;
69
use OC\Authentication\Token\IProvider;
70
use OC\Avatar\AvatarManager;
71
use OC\Collaboration\Collaborators\GroupPlugin;
72
use OC\Collaboration\Collaborators\MailPlugin;
73
use OC\Collaboration\Collaborators\RemoteGroupPlugin;
74
use OC\Collaboration\Collaborators\RemotePlugin;
75
use OC\Collaboration\Collaborators\UserPlugin;
76
use OC\Command\CronBus;
77
use OC\Comments\ManagerFactory as CommentsManagerFactory;
78
use OC\Contacts\ContactsMenu\ActionFactory;
79
use OC\Contacts\ContactsMenu\ContactsStore;
80
use OC\Dashboard\DashboardManager;
81
use OC\Diagnostics\EventLogger;
82
use OC\Diagnostics\QueryLogger;
83
use OC\Federation\CloudFederationFactory;
84
use OC\Federation\CloudFederationProviderManager;
85
use OC\Federation\CloudIdManager;
86
use OC\Files\Config\UserMountCache;
87
use OC\Files\Config\UserMountCacheListener;
88
use OC\Files\Mount\CacheMountProvider;
89
use OC\Files\Mount\LocalHomeMountProvider;
90
use OC\Files\Mount\ObjectHomeMountProvider;
91
use OC\Files\Node\HookConnector;
92
use OC\Files\Node\LazyRoot;
93
use OC\Files\Node\Root;
94
use OC\Files\Storage\StorageFactory;
95
use OC\Files\View;
96
use OC\FullTextSearch\FullTextSearchManager;
97
use OC\Http\Client\ClientService;
98
use OC\IntegrityCheck\Checker;
99
use OC\IntegrityCheck\Helpers\AppLocator;
100
use OC\IntegrityCheck\Helpers\EnvironmentHelper;
101
use OC\IntegrityCheck\Helpers\FileAccessHelper;
102
use OC\Lock\DBLockingProvider;
103
use OC\Lock\MemcacheLockingProvider;
104
use OC\Lock\NoopLockingProvider;
105
use OC\Lockdown\LockdownManager;
106
use OC\Log\LogFactory;
107
use OC\Log\PsrLoggerAdapter;
108
use OC\Mail\Mailer;
109
use OC\Memcache\ArrayCache;
110
use OC\Memcache\Factory;
111
use OC\Notification\Manager;
112
use OC\OCS\DiscoveryService;
113
use OC\Preview\GeneratorHelper;
114
use OC\Remote\Api\ApiFactory;
115
use OC\Remote\InstanceFactory;
116
use OC\RichObjectStrings\Validator;
117
use OC\Security\Bruteforce\Throttler;
118
use OC\Security\CertificateManager;
119
use OC\Security\CredentialsManager;
120
use OC\Security\Crypto;
121
use OC\Security\CSP\ContentSecurityPolicyManager;
122
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
123
use OC\Security\CSRF\CsrfTokenGenerator;
124
use OC\Security\CSRF\CsrfTokenManager;
125
use OC\Security\CSRF\TokenStorage\SessionStorage;
126
use OC\Security\Hasher;
127
use OC\Security\SecureRandom;
128
use OC\Security\TrustedDomainHelper;
129
use OC\Session\CryptoWrapper;
130
use OC\Share20\ProviderFactory;
131
use OC\Share20\ShareHelper;
132
use OC\SystemTag\ManagerFactory as SystemTagManagerFactory;
133
use OC\Tagging\TagMapper;
134
use OC\Template\IconsCacher;
135
use OC\Template\JSCombiner;
136
use OC\Template\SCSSCacher;
137
use OCA\Theming\ImageManager;
138
use OCA\Theming\ThemingDefaults;
139
use OCA\Theming\Util;
140
use OCP\Accounts\IAccountManager;
141
use OCP\App\IAppManager;
142
use OCP\AppFramework\QueryException;
143
use OCP\Authentication\LoginCredentials\IStore;
144
use OCP\BackgroundJob\IJobList;
145
use OCP\Collaboration\AutoComplete\IManager;
146
use OCP\Comments\ICommentsManager;
147
use OCP\Contacts\ContactsMenu\IActionFactory;
148
use OCP\Contacts\ContactsMenu\IContactsStore;
149
use OCP\Dashboard\IDashboardManager;
150
use OCP\Defaults;
151
use OCP\Diagnostics\IEventLogger;
152
use OCP\Diagnostics\IQueryLogger;
153
use OCP\EventDispatcher\IEventDispatcher;
154
use OCP\Federation\ICloudFederationFactory;
155
use OCP\Federation\ICloudFederationProviderManager;
156
use OCP\Federation\ICloudIdManager;
157
use OCP\Files\Config\IMountProviderCollection;
158
use OCP\Files\Config\IUserMountCache;
159
use OCP\Files\IMimeTypeDetector;
160
use OCP\Files\IMimeTypeLoader;
161
use OCP\Files\IRootFolder;
162
use OCP\Files\Mount\IMountManager;
163
use OCP\Files\NotFoundException;
164
use OCP\Files\Storage\IStorageFactory;
165
use OCP\FullTextSearch\IFullTextSearchManager;
166
use OCP\GlobalScale\IConfig;
167
use OCP\Group\Events\BeforeGroupCreatedEvent;
168
use OCP\Group\Events\BeforeGroupDeletedEvent;
169
use OCP\Group\Events\BeforeUserAddedEvent;
170
use OCP\Group\Events\BeforeUserRemovedEvent;
171
use OCP\Group\Events\GroupCreatedEvent;
172
use OCP\Group\Events\GroupDeletedEvent;
173
use OCP\Group\Events\UserAddedEvent;
174
use OCP\Group\Events\UserRemovedEvent;
175
use OCP\Group\ISubAdmin;
176
use OCP\Http\Client\IClientService;
177
use OCP\IAppConfig;
178
use OCP\IAvatarManager;
179
use OCP\ICache;
180
use OCP\ICacheFactory;
181
use OCP\IContainer;
182
use OCP\IDateTimeFormatter;
183
use OCP\IDateTimeZone;
184
use OCP\IDBConnection;
185
use OCP\IGroupManager;
186
use OCP\IInitialStateService;
187
use OCP\IL10N;
188
use OCP\ILogger;
189
use OCP\INavigationManager;
190
use OCP\IPreview;
191
use OCP\IRequest;
192
use OCP\ISearch;
193
use OCP\IServerContainer;
194
use OCP\ITagManager;
195
use OCP\ITempManager;
196
use OCP\IURLGenerator;
197
use OCP\IUser;
198
use OCP\IUserManager;
199
use OCP\IUserSession;
200
use OCP\L10N\IFactory;
201
use OCP\Lock\ILockingProvider;
202
use OCP\Log\ILogFactory;
203
use OCP\Mail\IMailer;
204
use OCP\Remote\Api\IApiFactory;
205
use OCP\Remote\IInstanceFactory;
206
use OCP\RichObjectStrings\IValidator;
207
use OCP\Route\IRouter;
208
use OCP\Security\IContentSecurityPolicyManager;
209
use OCP\Security\ICredentialsManager;
210
use OCP\Security\ICrypto;
211
use OCP\Security\IHasher;
212
use OCP\Security\ISecureRandom;
213
use OCP\Share\IShareHelper;
214
use OCP\SystemTag\ISystemTagManager;
215
use OCP\SystemTag\ISystemTagObjectMapper;
216
use OCP\User\Events\BeforePasswordUpdatedEvent;
217
use OCP\User\Events\BeforeUserCreatedEvent;
218
use OCP\User\Events\BeforeUserDeletedEvent;
219
use OCP\User\Events\BeforeUserLoggedInEvent;
220
use OCP\User\Events\BeforeUserLoggedInWithCookieEvent;
221
use OCP\User\Events\BeforeUserLoggedOutEvent;
222
use OCP\User\Events\PasswordUpdatedEvent;
223
use OCP\User\Events\UserChangedEvent;
224
use OCP\User\Events\UserCreatedEvent;
225
use OCP\User\Events\UserDeletedEvent;
226
use OCP\User\Events\UserLoggedInEvent;
227
use OCP\User\Events\UserLoggedInWithCookieEvent;
228
use OCP\User\Events\UserLoggedOutEvent;
229
use Psr\Log\LoggerInterface;
230
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
231
use Symfony\Component\EventDispatcher\GenericEvent;
232
use OCA\Files_External\Service\UserStoragesService;
233
use OCA\Files_External\Service\UserGlobalStoragesService;
234
use OCA\Files_External\Service\GlobalStoragesService;
235
use OCA\Files_External\Service\BackendService;
236
237
/**
238
 * Class Server
239
 *
240
 * @package OC
241
 *
242
 * TODO: hookup all manager classes
243
 */
244
class Server extends ServerContainer implements IServerContainer {
245
	/** @var string */
246
	private $webRoot;
247
248
	/**
249
	 * @param string $webRoot
250
	 * @param \OC\Config $config
251
	 */
252
	public function __construct($webRoot, \OC\Config $config) {
253
		parent::__construct();
254
		$this->webRoot = $webRoot;
255
256
		// To find out if we are running from CLI or not
257
		$this->registerParameter('isCLI', \OC::$CLI);
258
259
		$this->registerService(\OCP\IServerContainer::class, function (IServerContainer $c) {
260
			return $c;
261
		});
262
263
		$this->registerAlias(\OCP\Calendar\IManager::class, \OC\Calendar\Manager::class);
264
		$this->registerDeprecatedAlias('CalendarManager', \OC\Calendar\Manager::class);
265
266
		$this->registerAlias(\OCP\Calendar\Resource\IManager::class, \OC\Calendar\Resource\Manager::class);
267
		$this->registerDeprecatedAlias('CalendarResourceBackendManager', \OC\Calendar\Resource\Manager::class);
268
269
		$this->registerAlias(\OCP\Calendar\Room\IManager::class, \OC\Calendar\Room\Manager::class);
270
		$this->registerDeprecatedAlias('CalendarRoomBackendManager', \OC\Calendar\Room\Manager::class);
271
272
		$this->registerAlias(\OCP\Contacts\IManager::class, \OC\ContactsManager::class);
273
		$this->registerDeprecatedAlias('ContactsManager', \OCP\Contacts\IManager::class);
274
275
		$this->registerAlias(\OCP\DirectEditing\IManager::class, \OC\DirectEditing\Manager::class);
276
277
		$this->registerAlias(IActionFactory::class, ActionFactory::class);
278
279
280
		$this->registerService(IPreview::class, function (Server $c) {
281
			return new PreviewManager(
282
				$c->getConfig(),
283
				$c->getRootFolder(),
284
				new \OC\Preview\Storage\Root($c->getRootFolder(), $c->getSystemConfig(), 'preview'),
0 ignored issues
show
Unused Code introduced by
The call to OC\Preview\Storage\Root::__construct() has too many arguments starting with 'preview'. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

284
				/** @scrutinizer ignore-call */ 
285
    new \OC\Preview\Storage\Root($c->getRootFolder(), $c->getSystemConfig(), 'preview'),

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
285
				$c->getEventDispatcher(),
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

285
				/** @scrutinizer ignore-deprecated */ $c->getEventDispatcher(),

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
286
				$c->getGeneratorHelper(),
287
				$c->getSession()->get('user_id')
288
			);
289
		});
290
		$this->registerDeprecatedAlias('PreviewManager', IPreview::class);
291
292
		$this->registerService(\OC\Preview\Watcher::class, function (Server $c) {
293
			return new \OC\Preview\Watcher(
294
				new \OC\Preview\Storage\Root($c->getRootFolder(), $c->getSystemConfig(), 'preview')
0 ignored issues
show
Unused Code introduced by
The call to OC\Preview\Storage\Root::__construct() has too many arguments starting with 'preview'. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

294
				/** @scrutinizer ignore-call */ 
295
    new \OC\Preview\Storage\Root($c->getRootFolder(), $c->getSystemConfig(), 'preview')

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
295
			);
296
		});
297
298
		$this->registerService(\OCP\Encryption\IManager::class, function (Server $c) {
299
			$view = new View();
300
			$util = new Encryption\Util(
301
				$view,
302
				$c->getUserManager(),
303
				$c->getGroupManager(),
304
				$c->getConfig()
305
			);
306
			return new Encryption\Manager(
307
				$c->getConfig(),
308
				$c->getLogger(),
309
				$c->getL10N('core'),
310
				new View(),
311
				$util,
312
				new ArrayCache()
313
			);
314
		});
315
		$this->registerDeprecatedAlias('EncryptionManager', \OCP\Encryption\IManager::class);
316
317
		$this->registerService('EncryptionFileHelper', function (Server $c) {
318
			$util = new Encryption\Util(
319
				new View(),
320
				$c->getUserManager(),
321
				$c->getGroupManager(),
322
				$c->getConfig()
323
			);
324
			return new Encryption\File(
325
				$util,
326
				$c->getRootFolder(),
327
				$c->getShareManager()
328
			);
329
		});
330
331
		$this->registerService('EncryptionKeyStorage', function (Server $c) {
332
			$view = new View();
333
			$util = new Encryption\Util(
334
				$view,
335
				$c->getUserManager(),
336
				$c->getGroupManager(),
337
				$c->getConfig()
338
			);
339
340
			return new Encryption\Keys\Storage($view, $util);
341
		});
342
		$this->registerService('TagMapper', function (Server $c) {
343
			return new TagMapper($c->getDatabaseConnection());
344
		});
345
346
		$this->registerService(\OCP\ITagManager::class, function (Server $c) {
347
			$tagMapper = $c->query('TagMapper');
348
			return new TagManager($tagMapper, $c->getUserSession());
349
		});
350
		$this->registerDeprecatedAlias('TagManager', \OCP\ITagManager::class);
351
352
		$this->registerService('SystemTagManagerFactory', function (Server $c) {
353
			$config = $c->getConfig();
354
			$factoryClass = $config->getSystemValue('systemtags.managerFactory', SystemTagManagerFactory::class);
355
			return new $factoryClass($this);
356
		});
357
		$this->registerService(ISystemTagManager::class, function (Server $c) {
358
			return $c->query('SystemTagManagerFactory')->getManager();
359
		});
360
		$this->registerDeprecatedAlias('SystemTagManager', ISystemTagManager::class);
361
362
		$this->registerService(ISystemTagObjectMapper::class, function (Server $c) {
363
			return $c->query('SystemTagManagerFactory')->getObjectMapper();
364
		});
365
		$this->registerService('RootFolder', function (Server $c) {
366
			$manager = \OC\Files\Filesystem::getMountManager(null);
367
			$view = new View();
368
			$root = new Root(
369
				$manager,
370
				$view,
371
				null,
372
				$c->getUserMountCache(),
373
				$this->getLogger(),
374
				$this->getUserManager()
375
			);
376
377
			$previewConnector = new \OC\Preview\WatcherConnector($root, $c->getSystemConfig());
378
			$previewConnector->connectWatcher();
379
380
			return $root;
381
		});
382
		$this->registerService(HookConnector::class, function (Server $c) {
383
			return new HookConnector(
384
				$c->query(IRootFolder::class),
385
				new View(),
386
				$c->query(\OC\EventDispatcher\SymfonyAdapter::class),
387
				$c->query(IEventDispatcher::class)
388
			);
389
		});
390
391
		$this->registerDeprecatedAlias('SystemTagObjectMapper', ISystemTagObjectMapper::class);
392
393
		$this->registerService(IRootFolder::class, function (Server $c) {
394
			return new LazyRoot(function () use ($c) {
395
				return $c->query('RootFolder');
396
			});
397
		});
398
		$this->registerDeprecatedAlias('LazyRootFolder', IRootFolder::class);
399
400
		$this->registerDeprecatedAlias('UserManager', \OC\User\Manager::class);
401
		$this->registerAlias(\OCP\IUserManager::class, \OC\User\Manager::class);
402
403
		$this->registerService(\OCP\IGroupManager::class, function (Server $c) {
404
			$groupManager = new \OC\Group\Manager($this->getUserManager(), $c->getEventDispatcher(), $this->getLogger());
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

404
			$groupManager = new \OC\Group\Manager($this->getUserManager(), /** @scrutinizer ignore-deprecated */ $c->getEventDispatcher(), $this->getLogger());

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
405
			$groupManager->listen('\OC\Group', 'preCreate', function ($gid) {
406
				\OC_Hook::emit('OC_Group', 'pre_createGroup', ['run' => true, 'gid' => $gid]);
407
408
				/** @var IEventDispatcher $dispatcher */
409
				$dispatcher = $this->query(IEventDispatcher::class);
410
				$dispatcher->dispatchTyped(new BeforeGroupCreatedEvent($gid));
411
			});
412
			$groupManager->listen('\OC\Group', 'postCreate', function (\OC\Group\Group $group) {
413
				\OC_Hook::emit('OC_User', 'post_createGroup', ['gid' => $group->getGID()]);
414
415
				/** @var IEventDispatcher $dispatcher */
416
				$dispatcher = $this->query(IEventDispatcher::class);
417
				$dispatcher->dispatchTyped(new GroupCreatedEvent($group));
418
			});
419
			$groupManager->listen('\OC\Group', 'preDelete', function (\OC\Group\Group $group) {
420
				\OC_Hook::emit('OC_Group', 'pre_deleteGroup', ['run' => true, 'gid' => $group->getGID()]);
421
422
				/** @var IEventDispatcher $dispatcher */
423
				$dispatcher = $this->query(IEventDispatcher::class);
424
				$dispatcher->dispatchTyped(new BeforeGroupDeletedEvent($group));
425
			});
426
			$groupManager->listen('\OC\Group', 'postDelete', function (\OC\Group\Group $group) {
427
				\OC_Hook::emit('OC_User', 'post_deleteGroup', ['gid' => $group->getGID()]);
428
429
				/** @var IEventDispatcher $dispatcher */
430
				$dispatcher = $this->query(IEventDispatcher::class);
431
				$dispatcher->dispatchTyped(new GroupDeletedEvent($group));
432
			});
433
			$groupManager->listen('\OC\Group', 'preAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
434
				\OC_Hook::emit('OC_Group', 'pre_addToGroup', ['run' => true, 'uid' => $user->getUID(), 'gid' => $group->getGID()]);
435
436
				/** @var IEventDispatcher $dispatcher */
437
				$dispatcher = $this->query(IEventDispatcher::class);
438
				$dispatcher->dispatchTyped(new BeforeUserAddedEvent($group, $user));
439
			});
440
			$groupManager->listen('\OC\Group', 'postAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
441
				\OC_Hook::emit('OC_Group', 'post_addToGroup', ['uid' => $user->getUID(), 'gid' => $group->getGID()]);
442
				//Minimal fix to keep it backward compatible TODO: clean up all the GroupManager hooks
443
				\OC_Hook::emit('OC_User', 'post_addToGroup', ['uid' => $user->getUID(), 'gid' => $group->getGID()]);
444
445
				/** @var IEventDispatcher $dispatcher */
446
				$dispatcher = $this->query(IEventDispatcher::class);
447
				$dispatcher->dispatchTyped(new UserAddedEvent($group, $user));
448
			});
449
			$groupManager->listen('\OC\Group', 'preRemoveUser', function (\OC\Group\Group $group, \OC\User\User $user) {
450
				/** @var IEventDispatcher $dispatcher */
451
				$dispatcher = $this->query(IEventDispatcher::class);
452
				$dispatcher->dispatchTyped(new BeforeUserRemovedEvent($group, $user));
453
			});
454
			$groupManager->listen('\OC\Group', 'postRemoveUser', function (\OC\Group\Group $group, \OC\User\User $user) {
455
				/** @var IEventDispatcher $dispatcher */
456
				$dispatcher = $this->query(IEventDispatcher::class);
457
				$dispatcher->dispatchTyped(new UserRemovedEvent($group, $user));
458
			});
459
			return $groupManager;
460
		});
461
		$this->registerDeprecatedAlias('GroupManager', \OCP\IGroupManager::class);
462
463
		$this->registerService(Store::class, function (Server $c) {
464
			$session = $c->getSession();
465
			if (\OC::$server->getSystemConfig()->getValue('installed', false)) {
466
				$tokenProvider = $c->query(IProvider::class);
467
			} else {
468
				$tokenProvider = null;
469
			}
470
			$logger = $c->getLogger();
471
			return new Store($session, $logger, $tokenProvider);
472
		});
473
		$this->registerAlias(IStore::class, Store::class);
474
		$this->registerService(Authentication\Token\DefaultTokenMapper::class, function (Server $c) {
475
			$dbConnection = $c->getDatabaseConnection();
476
			return new Authentication\Token\DefaultTokenMapper($dbConnection);
477
		});
478
		$this->registerAlias(IProvider::class, Authentication\Token\Manager::class);
479
480
		$this->registerService(\OC\User\Session::class, function (Server $c) {
481
			$manager = $c->getUserManager();
482
			$session = new \OC\Session\Memory('');
483
			$timeFactory = new TimeFactory();
484
			// Token providers might require a working database. This code
485
			// might however be called when ownCloud is not yet setup.
486
			if (\OC::$server->getSystemConfig()->getValue('installed', false)) {
487
				$defaultTokenProvider = $c->query(IProvider::class);
488
			} else {
489
				$defaultTokenProvider = null;
490
			}
491
492
			$legacyDispatcher = $c->getEventDispatcher();
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

492
			$legacyDispatcher = /** @scrutinizer ignore-deprecated */ $c->getEventDispatcher();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
493
494
			$userSession = new \OC\User\Session(
495
				$manager,
496
				$session,
497
				$timeFactory,
498
				$defaultTokenProvider,
499
				$c->getConfig(),
500
				$c->getSecureRandom(),
501
				$c->getLockdownManager(),
502
				$c->getLogger(),
503
				$c->query(IEventDispatcher::class)
504
			);
505
			$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
506
				\OC_Hook::emit('OC_User', 'pre_createUser', ['run' => true, 'uid' => $uid, 'password' => $password]);
507
508
				/** @var IEventDispatcher $dispatcher */
509
				$dispatcher = $this->query(IEventDispatcher::class);
510
				$dispatcher->dispatchTyped(new BeforeUserCreatedEvent($uid, $password));
511
			});
512
			$userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
513
				/** @var $user \OC\User\User */
514
				\OC_Hook::emit('OC_User', 'post_createUser', ['uid' => $user->getUID(), 'password' => $password]);
515
516
				/** @var IEventDispatcher $dispatcher */
517
				$dispatcher = $this->query(IEventDispatcher::class);
518
				$dispatcher->dispatchTyped(new UserCreatedEvent($user, $password));
519
			});
520
			$userSession->listen('\OC\User', 'preDelete', function ($user) use ($legacyDispatcher) {
521
				/** @var $user \OC\User\User */
522
				\OC_Hook::emit('OC_User', 'pre_deleteUser', ['run' => true, 'uid' => $user->getUID()]);
523
				$legacyDispatcher->dispatch('OCP\IUser::preDelete', new GenericEvent($user));
0 ignored issues
show
Bug introduced by
'OCP\IUser::preDelete' of type string is incompatible with the type object expected by parameter $event of Symfony\Contracts\EventD...erInterface::dispatch(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

523
				$legacyDispatcher->dispatch(/** @scrutinizer ignore-type */ 'OCP\IUser::preDelete', new GenericEvent($user));
Loading history...
Unused Code introduced by
The call to Symfony\Contracts\EventD...erInterface::dispatch() has too many arguments starting with new Symfony\Component\Ev...her\GenericEvent($user). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

523
				$legacyDispatcher->/** @scrutinizer ignore-call */ 
524
                       dispatch('OCP\IUser::preDelete', new GenericEvent($user));

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
524
525
				/** @var IEventDispatcher $dispatcher */
526
				$dispatcher = $this->query(IEventDispatcher::class);
527
				$dispatcher->dispatchTyped(new BeforeUserDeletedEvent($user));
528
			});
529
			$userSession->listen('\OC\User', 'postDelete', function ($user) {
530
				/** @var $user \OC\User\User */
531
				\OC_Hook::emit('OC_User', 'post_deleteUser', ['uid' => $user->getUID()]);
532
533
				/** @var IEventDispatcher $dispatcher */
534
				$dispatcher = $this->query(IEventDispatcher::class);
535
				$dispatcher->dispatchTyped(new UserDeletedEvent($user));
536
			});
537
			$userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
538
				/** @var $user \OC\User\User */
539
				\OC_Hook::emit('OC_User', 'pre_setPassword', ['run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword]);
540
541
				/** @var IEventDispatcher $dispatcher */
542
				$dispatcher = $this->query(IEventDispatcher::class);
543
				$dispatcher->dispatchTyped(new BeforePasswordUpdatedEvent($user, $password, $recoveryPassword));
544
			});
545
			$userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
546
				/** @var $user \OC\User\User */
547
				\OC_Hook::emit('OC_User', 'post_setPassword', ['run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword]);
548
549
				/** @var IEventDispatcher $dispatcher */
550
				$dispatcher = $this->query(IEventDispatcher::class);
551
				$dispatcher->dispatchTyped(new PasswordUpdatedEvent($user, $password, $recoveryPassword));
552
			});
553
			$userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
554
				\OC_Hook::emit('OC_User', 'pre_login', ['run' => true, 'uid' => $uid, 'password' => $password]);
555
556
				/** @var IEventDispatcher $dispatcher */
557
				$dispatcher = $this->query(IEventDispatcher::class);
558
				$dispatcher->dispatchTyped(new BeforeUserLoggedInEvent($uid, $password));
559
			});
560
			$userSession->listen('\OC\User', 'postLogin', function ($user, $password, $isTokenLogin) {
561
				/** @var $user \OC\User\User */
562
				\OC_Hook::emit('OC_User', 'post_login', ['run' => true, 'uid' => $user->getUID(), 'password' => $password, 'isTokenLogin' => $isTokenLogin]);
563
564
				/** @var IEventDispatcher $dispatcher */
565
				$dispatcher = $this->query(IEventDispatcher::class);
566
				$dispatcher->dispatchTyped(new UserLoggedInEvent($user, $password, $isTokenLogin));
567
			});
568
			$userSession->listen('\OC\User', 'preRememberedLogin', function ($uid) {
569
				/** @var IEventDispatcher $dispatcher */
570
				$dispatcher = $this->query(IEventDispatcher::class);
571
				$dispatcher->dispatchTyped(new BeforeUserLoggedInWithCookieEvent($uid));
572
			});
573
			$userSession->listen('\OC\User', 'postRememberedLogin', function ($user, $password) {
574
				/** @var $user \OC\User\User */
575
				\OC_Hook::emit('OC_User', 'post_login', ['run' => true, 'uid' => $user->getUID(), 'password' => $password]);
576
577
				/** @var IEventDispatcher $dispatcher */
578
				$dispatcher = $this->query(IEventDispatcher::class);
579
				$dispatcher->dispatchTyped(new UserLoggedInWithCookieEvent($user, $password));
580
			});
581
			$userSession->listen('\OC\User', 'logout', function ($user) {
582
				\OC_Hook::emit('OC_User', 'logout', []);
583
584
				/** @var IEventDispatcher $dispatcher */
585
				$dispatcher = $this->query(IEventDispatcher::class);
586
				$dispatcher->dispatchTyped(new BeforeUserLoggedOutEvent($user));
587
			});
588
			$userSession->listen('\OC\User', 'postLogout', function ($user) {
589
				/** @var IEventDispatcher $dispatcher */
590
				$dispatcher = $this->query(IEventDispatcher::class);
591
				$dispatcher->dispatchTyped(new UserLoggedOutEvent($user));
592
			});
593
			$userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value, $oldValue) {
594
				/** @var $user \OC\User\User */
595
				\OC_Hook::emit('OC_User', 'changeUser', ['run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value, 'old_value' => $oldValue]);
596
597
				/** @var IEventDispatcher $dispatcher */
598
				$dispatcher = $this->query(IEventDispatcher::class);
599
				$dispatcher->dispatchTyped(new UserChangedEvent($user, $feature, $value, $oldValue));
600
			});
601
			return $userSession;
602
		});
603
		$this->registerAlias(\OCP\IUserSession::class, \OC\User\Session::class);
604
		$this->registerDeprecatedAlias('UserSession', \OC\User\Session::class);
605
606
		$this->registerAlias(\OCP\Authentication\TwoFactorAuth\IRegistry::class, \OC\Authentication\TwoFactorAuth\Registry::class);
607
608
		$this->registerAlias(INavigationManager::class, \OC\NavigationManager::class);
609
		$this->registerDeprecatedAlias('NavigationManager', INavigationManager::class);
610
611
		$this->registerService(\OC\AllConfig::class, function (Server $c) {
612
			return new \OC\AllConfig(
613
				$c->getSystemConfig()
614
			);
615
		});
616
		$this->registerDeprecatedAlias('AllConfig', \OC\AllConfig::class);
617
		$this->registerAlias(\OCP\IConfig::class, \OC\AllConfig::class);
618
619
		$this->registerService(\OC\SystemConfig::class, function ($c) use ($config) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

619
		$this->registerService(\OC\SystemConfig::class, function (/** @scrutinizer ignore-unused */ $c) use ($config) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
620
			return new \OC\SystemConfig($config);
621
		});
622
		$this->registerDeprecatedAlias('SystemConfig', \OC\SystemConfig::class);
623
624
		$this->registerService(\OC\AppConfig::class, function (Server $c) {
625
			return new \OC\AppConfig($c->getDatabaseConnection());
626
		});
627
		$this->registerDeprecatedAlias('AppConfig', \OC\AppConfig::class);
628
		$this->registerAlias(IAppConfig::class, \OC\AppConfig::class);
629
630
		$this->registerService(IFactory::class, function (Server $c) {
631
			return new \OC\L10N\Factory(
632
				$c->getConfig(),
633
				$c->getRequest(),
634
				$c->getUserSession(),
635
				\OC::$SERVERROOT
636
			);
637
		});
638
		$this->registerDeprecatedAlias('L10NFactory', IFactory::class);
639
640
		$this->registerService(IURLGenerator::class, function (Server $c) {
641
			$config = $c->getConfig();
642
			$cacheFactory = $c->getMemCacheFactory();
643
			$request = $c->getRequest();
644
			return new \OC\URLGenerator(
645
				$config,
646
				$cacheFactory,
647
				$request
648
			);
649
		});
650
		$this->registerDeprecatedAlias('URLGenerator', IURLGenerator::class);
651
652
		$this->registerDeprecatedAlias('AppFetcher', AppFetcher::class);
653
		$this->registerDeprecatedAlias('CategoryFetcher', CategoryFetcher::class);
654
655
		$this->registerService(ICache::class, function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

655
		$this->registerService(ICache::class, function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
656
			return new Cache\File();
657
		});
658
		$this->registerDeprecatedAlias('UserCache', ICache::class);
659
660
		$this->registerService(Factory::class, function (Server $c) {
661
			$arrayCacheFactory = new \OC\Memcache\Factory('', $c->getLogger(),
662
				ArrayCache::class,
663
				ArrayCache::class,
664
				ArrayCache::class
665
			);
666
			$config = $c->getConfig();
667
668
			if ($config->getSystemValue('installed', false) && !(defined('PHPUNIT_RUN') && PHPUNIT_RUN)) {
0 ignored issues
show
Bug introduced by
The constant OC\PHPUNIT_RUN was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
669
				$v = \OC_App::getAppVersions();
670
				$v['core'] = implode(',', \OC_Util::getVersion());
671
				$version = implode(',', $v);
672
				$instanceId = \OC_Util::getInstanceId();
673
				$path = \OC::$SERVERROOT;
674
				$prefix = md5($instanceId . '-' . $version . '-' . $path);
675
				return new \OC\Memcache\Factory($prefix, $c->getLogger(),
676
					$config->getSystemValue('memcache.local', null),
677
					$config->getSystemValue('memcache.distributed', null),
678
					$config->getSystemValue('memcache.locking', null)
679
				);
680
			}
681
			return $arrayCacheFactory;
682
		});
683
		$this->registerDeprecatedAlias('MemCacheFactory', Factory::class);
684
		$this->registerAlias(ICacheFactory::class, Factory::class);
685
686
		$this->registerService('RedisFactory', function (Server $c) {
687
			$systemConfig = $c->getSystemConfig();
688
			return new RedisFactory($systemConfig);
689
		});
690
691
		$this->registerService(\OCP\Activity\IManager::class, function (Server $c) {
692
			return new \OC\Activity\Manager(
693
				$c->getRequest(),
694
				$c->getUserSession(),
695
				$c->getConfig(),
696
				$c->query(IValidator::class)
697
			);
698
		});
699
		$this->registerDeprecatedAlias('ActivityManager', \OCP\Activity\IManager::class);
700
701
		$this->registerService(\OCP\Activity\IEventMerger::class, function (Server $c) {
702
			return new \OC\Activity\EventMerger(
703
				$c->getL10N('lib')
704
			);
705
		});
706
		$this->registerAlias(IValidator::class, Validator::class);
707
708
		$this->registerService(AvatarManager::class, function (Server $c) {
709
			return new AvatarManager(
710
				$c->query(\OC\User\Manager::class),
711
				$c->getAppDataDir('avatar'),
712
				$c->getL10N('lib'),
713
				$c->getLogger(),
714
				$c->getConfig()
715
			);
716
		});
717
		$this->registerAlias(IAvatarManager::class, AvatarManager::class);
718
		$this->registerDeprecatedAlias('AvatarManager', AvatarManager::class);
719
720
		$this->registerAlias(\OCP\Support\CrashReport\IRegistry::class, \OC\Support\CrashReport\Registry::class);
721
		$this->registerAlias(\OCP\Support\Subscription\IRegistry::class, \OC\Support\Subscription\Registry::class);
722
723
		$this->registerService(\OC\Log::class, function (Server $c) {
724
			$logType = $c->query(AllConfig::class)->getSystemValue('log_type', 'file');
725
			$factory = new LogFactory($c, $this->getSystemConfig());
726
			$logger = $factory->get($logType);
727
			$registry = $c->query(\OCP\Support\CrashReport\IRegistry::class);
728
729
			return new Log($logger, $this->getSystemConfig(), null, $registry);
730
		});
731
		$this->registerAlias(ILogger::class, \OC\Log::class);
732
		$this->registerDeprecatedAlias('Logger', \OC\Log::class);
733
		// PSR-3 logger
734
		$this->registerAlias(LoggerInterface::class, PsrLoggerAdapter::class);
735
736
		$this->registerService(ILogFactory::class, function (Server $c) {
737
			return new LogFactory($c, $this->getSystemConfig());
738
		});
739
740
		$this->registerService(IJobList::class, function (Server $c) {
741
			$config = $c->getConfig();
742
			return new \OC\BackgroundJob\JobList(
743
				$c->getDatabaseConnection(),
744
				$config,
745
				new TimeFactory()
746
			);
747
		});
748
		$this->registerDeprecatedAlias('JobList', IJobList::class);
749
750
		$this->registerService(IRouter::class, function (Server $c) {
751
			$cacheFactory = $c->getMemCacheFactory();
752
			$logger = $c->getLogger();
753
			if ($cacheFactory->isLocalCacheAvailable()) {
754
				$router = new \OC\Route\CachingRouter($cacheFactory->createLocal('route'), $logger);
755
			} else {
756
				$router = new \OC\Route\Router($logger);
757
			}
758
			return $router;
759
		});
760
		$this->registerDeprecatedAlias('Router', IRouter::class);
761
762
		$this->registerService(ISearch::class, function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

762
		$this->registerService(ISearch::class, function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
763
			return new Search();
764
		});
765
		$this->registerDeprecatedAlias('Search', ISearch::class);
766
767
		$this->registerService(\OC\Security\RateLimiting\Backend\IBackend::class, function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

767
		$this->registerService(\OC\Security\RateLimiting\Backend\IBackend::class, function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
768
			return new \OC\Security\RateLimiting\Backend\MemoryCache(
769
				$this->getMemCacheFactory(),
770
				new \OC\AppFramework\Utility\TimeFactory()
771
			);
772
		});
773
774
		$this->registerService(\OCP\Security\ISecureRandom::class, function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

774
		$this->registerService(\OCP\Security\ISecureRandom::class, function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
775
			return new SecureRandom();
776
		});
777
		$this->registerDeprecatedAlias('SecureRandom', \OCP\Security\ISecureRandom::class);
778
779
		$this->registerService(ICrypto::class, function (Server $c) {
780
			return new Crypto($c->getConfig(), $c->getSecureRandom());
0 ignored issues
show
Unused Code introduced by
The call to OC\Security\Crypto::__construct() has too many arguments starting with $c->getSecureRandom(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

780
			return /** @scrutinizer ignore-call */ new Crypto($c->getConfig(), $c->getSecureRandom());

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
781
		});
782
		$this->registerDeprecatedAlias('Crypto', ICrypto::class);
783
784
		$this->registerService(IHasher::class, function (Server $c) {
785
			return new Hasher($c->getConfig());
786
		});
787
		$this->registerDeprecatedAlias('Hasher', IHasher::class);
788
789
		$this->registerService(ICredentialsManager::class, function (Server $c) {
790
			return new CredentialsManager($c->getCrypto(), $c->getDatabaseConnection());
791
		});
792
		$this->registerDeprecatedAlias('CredentialsManager', ICredentialsManager::class);
793
794
		$this->registerService(IDBConnection::class, function (Server $c) {
795
			$systemConfig = $c->getSystemConfig();
796
			$factory = new \OC\DB\ConnectionFactory($systemConfig);
797
			$type = $systemConfig->getValue('dbtype', 'sqlite');
798
			if (!$factory->isValidType($type)) {
799
				throw new \OC\DatabaseException('Invalid database type');
800
			}
801
			$connectionParams = $factory->createConnectionParams();
802
			$connection = $factory->getConnection($type, $connectionParams);
803
			$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
804
			return $connection;
805
		});
806
		$this->registerDeprecatedAlias('DatabaseConnection', IDBConnection::class);
807
808
809
		$this->registerService(IClientService::class, function (Server $c) {
810
			$user = \OC_User::getUser();
811
			$uid = $user ? $user : null;
812
			return new ClientService(
813
				$c->getConfig(),
814
				$c->getLogger(),
815
				new \OC\Security\CertificateManager(
816
					$uid,
817
					new View(),
818
					$c->getConfig(),
819
					$c->getLogger(),
820
					$c->getSecureRandom()
821
				)
822
			);
823
		});
824
		$this->registerDeprecatedAlias('HttpClientService', IClientService::class);
825
		$this->registerService(IEventLogger::class, function (Server $c) {
826
			$eventLogger = new EventLogger();
827
			if ($c->getSystemConfig()->getValue('debug', false)) {
828
				// In debug mode, module is being activated by default
829
				$eventLogger->activate();
830
			}
831
			return $eventLogger;
832
		});
833
		$this->registerDeprecatedAlias('EventLogger', IEventLogger::class);
834
835
		$this->registerService(IQueryLogger::class, function (Server $c) {
836
			$queryLogger = new QueryLogger();
837
			if ($c->getSystemConfig()->getValue('debug', false)) {
838
				// In debug mode, module is being activated by default
839
				$queryLogger->activate();
840
			}
841
			return $queryLogger;
842
		});
843
		$this->registerDeprecatedAlias('QueryLogger', IQueryLogger::class);
844
845
		$this->registerService(TempManager::class, function (Server $c) {
846
			return new TempManager(
847
				$c->getLogger(),
848
				$c->getConfig()
849
			);
850
		});
851
		$this->registerDeprecatedAlias('TempManager', TempManager::class);
852
		$this->registerAlias(ITempManager::class, TempManager::class);
853
854
		$this->registerService(AppManager::class, function (Server $c) {
855
			return new \OC\App\AppManager(
856
				$c->getUserSession(),
857
				$c->getConfig(),
858
				$c->query(\OC\AppConfig::class),
859
				$c->getGroupManager(),
860
				$c->getMemCacheFactory(),
861
				$c->getEventDispatcher(),
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

861
				/** @scrutinizer ignore-deprecated */ $c->getEventDispatcher(),

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
862
				$c->getLogger()
863
			);
864
		});
865
		$this->registerDeprecatedAlias('AppManager', AppManager::class);
866
		$this->registerAlias(IAppManager::class, AppManager::class);
867
868
		$this->registerService(IDateTimeZone::class, function (Server $c) {
869
			return new DateTimeZone(
870
				$c->getConfig(),
871
				$c->getSession()
872
			);
873
		});
874
		$this->registerDeprecatedAlias('DateTimeZone', IDateTimeZone::class);
875
876
		$this->registerService(IDateTimeFormatter::class, function (Server $c) {
877
			$language = $c->getConfig()->getUserValue($c->getSession()->get('user_id'), 'core', 'lang', null);
878
879
			return new DateTimeFormatter(
880
				$c->getDateTimeZone()->getTimeZone(),
881
				$c->getL10N('lib', $language)
882
			);
883
		});
884
		$this->registerDeprecatedAlias('DateTimeFormatter', IDateTimeFormatter::class);
885
886
		$this->registerService(IUserMountCache::class, function (Server $c) {
887
			$mountCache = new UserMountCache($c->getDatabaseConnection(), $c->getUserManager(), $c->getLogger());
888
			$listener = new UserMountCacheListener($mountCache);
889
			$listener->listen($c->getUserManager());
890
			return $mountCache;
891
		});
892
		$this->registerDeprecatedAlias('UserMountCache', IUserMountCache::class);
893
894
		$this->registerService(IMountProviderCollection::class, function (Server $c) {
895
			$loader = \OC\Files\Filesystem::getLoader();
896
			$mountCache = $c->query(IUserMountCache::class);
897
			$manager = new \OC\Files\Config\MountProviderCollection($loader, $mountCache);
898
899
			// builtin providers
900
901
			$config = $c->getConfig();
902
			$manager->registerProvider(new CacheMountProvider($config));
903
			$manager->registerHomeProvider(new LocalHomeMountProvider());
904
			$manager->registerHomeProvider(new ObjectHomeMountProvider($config));
905
906
			return $manager;
907
		});
908
		$this->registerDeprecatedAlias('MountConfigManager', IMountProviderCollection::class);
909
910
		$this->registerService('IniWrapper', function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

910
		$this->registerService('IniWrapper', function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
911
			return new IniGetWrapper();
912
		});
913
		$this->registerService('AsyncCommandBus', function (Server $c) {
914
			$busClass = $c->getConfig()->getSystemValue('commandbus');
915
			if ($busClass) {
916
				list($app, $class) = explode('::', $busClass, 2);
917
				if ($c->getAppManager()->isInstalled($app)) {
918
					\OC_App::loadApp($app);
919
					return $c->query($class);
920
				} else {
921
					throw new ServiceUnavailableException("The app providing the command bus ($app) is not enabled");
922
				}
923
			} else {
924
				$jobList = $c->getJobList();
925
				return new CronBus($jobList);
926
			}
927
		});
928
		$this->registerService('TrustedDomainHelper', function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

928
		$this->registerService('TrustedDomainHelper', function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
929
			return new TrustedDomainHelper($this->getConfig());
930
		});
931
		$this->registerService(Throttler::class, function (Server $c) {
932
			return new Throttler(
933
				$c->getDatabaseConnection(),
934
				new TimeFactory(),
935
				$c->getLogger(),
936
				$c->getConfig()
937
			);
938
		});
939
		$this->registerDeprecatedAlias('Throttler', Throttler::class);
940
		$this->registerService('IntegrityCodeChecker', function (Server $c) {
941
			// IConfig and IAppManager requires a working database. This code
942
			// might however be called when ownCloud is not yet setup.
943
			if (\OC::$server->getSystemConfig()->getValue('installed', false)) {
944
				$config = $c->getConfig();
945
				$appManager = $c->getAppManager();
946
			} else {
947
				$config = null;
948
				$appManager = null;
949
			}
950
951
			return new Checker(
952
				new EnvironmentHelper(),
953
				new FileAccessHelper(),
954
				new AppLocator(),
955
				$config,
956
				$c->getMemCacheFactory(),
957
				$appManager,
958
				$c->getTempManager(),
959
				$c->getMimeTypeDetector()
960
			);
961
		});
962
		$this->registerService(\OCP\IRequest::class, function ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

962
		$this->registerService(\OCP\IRequest::class, function (/** @scrutinizer ignore-unused */ $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
963
			if (isset($this['urlParams'])) {
964
				$urlParams = $this['urlParams'];
965
			} else {
966
				$urlParams = [];
967
			}
968
969
			if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
0 ignored issues
show
Bug introduced by
The constant OC\PHPUNIT_RUN was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
970
				&& in_array('fakeinput', stream_get_wrappers())
971
			) {
972
				$stream = 'fakeinput://data';
973
			} else {
974
				$stream = 'php://input';
975
			}
976
977
			return new Request(
978
				[
979
					'get' => $_GET,
980
					'post' => $_POST,
981
					'files' => $_FILES,
982
					'server' => $_SERVER,
983
					'env' => $_ENV,
984
					'cookies' => $_COOKIE,
985
					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
986
						? $_SERVER['REQUEST_METHOD']
987
						: '',
988
					'urlParams' => $urlParams,
989
				],
990
				$this->getSecureRandom(),
991
				$this->getConfig(),
992
				$this->getCsrfTokenManager(),
993
				$stream
994
			);
995
		});
996
		$this->registerDeprecatedAlias('Request', \OCP\IRequest::class);
997
998
		$this->registerService(IMailer::class, function (Server $c) {
999
			return new Mailer(
1000
				$c->getConfig(),
1001
				$c->getLogger(),
1002
				$c->query(Defaults::class),
1003
				$c->getURLGenerator(),
1004
				$c->getL10N('lib'),
1005
				$c->query(IEventDispatcher::class),
1006
				$c->getL10NFactory()
1007
			);
1008
		});
1009
		$this->registerDeprecatedAlias('Mailer', IMailer::class);
1010
1011
		$this->registerService('LDAPProvider', function (Server $c) {
1012
			$config = $c->getConfig();
1013
			$factoryClass = $config->getSystemValue('ldapProviderFactory', null);
1014
			if (is_null($factoryClass)) {
1015
				throw new \Exception('ldapProviderFactory not set');
1016
			}
1017
			/** @var \OCP\LDAP\ILDAPProviderFactory $factory */
1018
			$factory = new $factoryClass($this);
1019
			return $factory->getLDAPProvider();
1020
		});
1021
		$this->registerService(ILockingProvider::class, function (Server $c) {
1022
			$ini = $c->getIniWrapper();
1023
			$config = $c->getConfig();
1024
			$ttl = $config->getSystemValue('filelocking.ttl', max(3600, $ini->getNumeric('max_execution_time')));
1025
			if ($config->getSystemValue('filelocking.enabled', true) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) {
0 ignored issues
show
Bug introduced by
The constant OC\PHPUNIT_RUN was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1026
				/** @var \OC\Memcache\Factory $memcacheFactory */
1027
				$memcacheFactory = $c->getMemCacheFactory();
1028
				$memcache = $memcacheFactory->createLocking('lock');
1029
				if (!($memcache instanceof \OC\Memcache\NullCache)) {
1030
					return new MemcacheLockingProvider($memcache, $ttl);
1031
				}
1032
				return new DBLockingProvider(
1033
					$c->getDatabaseConnection(),
1034
					$c->getLogger(),
1035
					new TimeFactory(),
1036
					$ttl,
1037
					!\OC::$CLI
1038
				);
1039
			}
1040
			return new NoopLockingProvider();
1041
		});
1042
		$this->registerDeprecatedAlias('LockingProvider', ILockingProvider::class);
1043
1044
		$this->registerService(IMountManager::class, function () {
1045
			return new \OC\Files\Mount\Manager();
1046
		});
1047
		$this->registerDeprecatedAlias('MountManager', IMountManager::class);
1048
1049
		$this->registerService(IMimeTypeDetector::class, function (Server $c) {
1050
			return new \OC\Files\Type\Detection(
1051
				$c->getURLGenerator(),
1052
				$c->getLogger(),
1053
				\OC::$configDir,
1054
				\OC::$SERVERROOT . '/resources/config/'
1055
			);
1056
		});
1057
		$this->registerDeprecatedAlias('MimeTypeDetector', IMimeTypeDetector::class);
1058
1059
		$this->registerService(IMimeTypeLoader::class, function (Server $c) {
1060
			return new \OC\Files\Type\Loader(
1061
				$c->getDatabaseConnection()
1062
			);
1063
		});
1064
		$this->registerDeprecatedAlias('MimeTypeLoader', IMimeTypeLoader::class);
1065
		$this->registerService(BundleFetcher::class, function () {
1066
			return new BundleFetcher($this->getL10N('lib'));
1067
		});
1068
		$this->registerService(\OCP\Notification\IManager::class, function (Server $c) {
1069
			return new Manager(
1070
				$c->query(IValidator::class),
1071
				$c->getLogger()
1072
			);
1073
		});
1074
		$this->registerDeprecatedAlias('NotificationManager', \OCP\Notification\IManager::class);
1075
1076
		$this->registerService(CapabilitiesManager::class, function (Server $c) {
1077
			$manager = new CapabilitiesManager($c->getLogger());
1078
			$manager->registerCapability(function () use ($c) {
1079
				return new \OC\OCS\CoreCapabilities($c->getConfig());
1080
			});
1081
			$manager->registerCapability(function () use ($c) {
1082
				return $c->query(\OC\Security\Bruteforce\Capabilities::class);
1083
			});
1084
			return $manager;
1085
		});
1086
		$this->registerDeprecatedAlias('CapabilitiesManager', CapabilitiesManager::class);
1087
1088
		$this->registerService(ICommentsManager::class, function (Server $c) {
1089
			$config = $c->getConfig();
1090
			$factoryClass = $config->getSystemValue('comments.managerFactory', CommentsManagerFactory::class);
1091
			/** @var \OCP\Comments\ICommentsManagerFactory $factory */
1092
			$factory = new $factoryClass($this);
1093
			$manager = $factory->getManager();
1094
1095
			$manager->registerDisplayNameResolver('user', function ($id) use ($c) {
1096
				$manager = $c->getUserManager();
1097
				$user = $manager->get($id);
1098
				if (is_null($user)) {
1099
					$l = $c->getL10N('core');
1100
					$displayName = $l->t('Unknown user');
1101
				} else {
1102
					$displayName = $user->getDisplayName();
1103
				}
1104
				return $displayName;
1105
			});
1106
1107
			return $manager;
1108
		});
1109
		$this->registerDeprecatedAlias('CommentsManager', ICommentsManager::class);
1110
1111
		$this->registerService('ThemingDefaults', function (Server $c) {
1112
			/*
1113
			 * Dark magic for autoloader.
1114
			 * If we do a class_exists it will try to load the class which will
1115
			 * make composer cache the result. Resulting in errors when enabling
1116
			 * the theming app.
1117
			 */
1118
			$prefixes = \OC::$composerAutoloader->getPrefixesPsr4();
1119
			if (isset($prefixes['OCA\\Theming\\'])) {
1120
				$classExists = true;
1121
			} else {
1122
				$classExists = false;
1123
			}
1124
1125
			if ($classExists && $c->getConfig()->getSystemValue('installed', false) && $c->getAppManager()->isInstalled('theming') && $c->getTrustedDomainHelper()->isTrustedDomain($c->getRequest()->getInsecureServerHost())) {
1126
				return new ThemingDefaults(
1127
					$c->getConfig(),
1128
					$c->getL10N('theming'),
1129
					$c->getURLGenerator(),
1130
					$c->getMemCacheFactory(),
1131
					new Util($c->getConfig(), $this->getAppManager(), $c->getAppDataDir('theming')),
1132
					new ImageManager($c->getConfig(), $c->getAppDataDir('theming'), $c->getURLGenerator(), $this->getMemCacheFactory(), $this->getLogger()),
1133
					$c->getAppManager(),
1134
					$c->getNavigationManager()
1135
				);
1136
			}
1137
			return new \OC_Defaults();
1138
		});
1139
		$this->registerService(SCSSCacher::class, function (Server $c) {
1140
			return new SCSSCacher(
1141
				$c->getLogger(),
1142
				$c->query(\OC\Files\AppData\Factory::class),
1143
				$c->getURLGenerator(),
1144
				$c->getConfig(),
1145
				$c->getThemingDefaults(),
1146
				\OC::$SERVERROOT,
1147
				$this->getMemCacheFactory(),
1148
				$c->query(IconsCacher::class),
1149
				new TimeFactory()
1150
			);
1151
		});
1152
		$this->registerService(JSCombiner::class, function (Server $c) {
1153
			return new JSCombiner(
1154
				$c->getAppDataDir('js'),
1155
				$c->getURLGenerator(),
1156
				$this->getMemCacheFactory(),
1157
				$c->getSystemConfig(),
1158
				$c->getLogger()
1159
			);
1160
		});
1161
		$this->registerAlias(\OCP\EventDispatcher\IEventDispatcher::class, \OC\EventDispatcher\EventDispatcher::class);
1162
		$this->registerDeprecatedAlias('EventDispatcher', \OC\EventDispatcher\SymfonyAdapter::class);
1163
		$this->registerAlias(EventDispatcherInterface::class, \OC\EventDispatcher\SymfonyAdapter::class);
1164
1165
		$this->registerService('CryptoWrapper', function (Server $c) {
1166
			// FIXME: Instantiiated here due to cyclic dependency
1167
			$request = new Request(
1168
				[
1169
					'get' => $_GET,
1170
					'post' => $_POST,
1171
					'files' => $_FILES,
1172
					'server' => $_SERVER,
1173
					'env' => $_ENV,
1174
					'cookies' => $_COOKIE,
1175
					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
1176
						? $_SERVER['REQUEST_METHOD']
1177
						: null,
1178
				],
1179
				$c->getSecureRandom(),
1180
				$c->getConfig()
1181
			);
1182
1183
			return new CryptoWrapper(
1184
				$c->getConfig(),
1185
				$c->getCrypto(),
1186
				$c->getSecureRandom(),
1187
				$request
1188
			);
1189
		});
1190
		$this->registerService(CsrfTokenManager::class, function (Server $c) {
1191
			$tokenGenerator = new CsrfTokenGenerator($c->getSecureRandom());
1192
1193
			return new CsrfTokenManager(
1194
				$tokenGenerator,
1195
				$c->query(SessionStorage::class)
1196
			);
1197
		});
1198
		$this->registerDeprecatedAlias('CsrfTokenManager', CsrfTokenManager::class);
1199
		$this->registerService(SessionStorage::class, function (Server $c) {
1200
			return new SessionStorage($c->getSession());
1201
		});
1202
		$this->registerAlias(\OCP\Security\IContentSecurityPolicyManager::class, ContentSecurityPolicyManager::class);
1203
		$this->registerDeprecatedAlias('ContentSecurityPolicyManager', ContentSecurityPolicyManager::class);
1204
1205
		$this->registerService('ContentSecurityPolicyNonceManager', function (Server $c) {
1206
			return new ContentSecurityPolicyNonceManager(
1207
				$c->getCsrfTokenManager(),
1208
				$c->getRequest()
1209
			);
1210
		});
1211
1212
		$this->registerService(\OCP\Share\IManager::class, function (Server $c) {
1213
			$config = $c->getConfig();
1214
			$factoryClass = $config->getSystemValue('sharing.managerFactory', ProviderFactory::class);
1215
			/** @var \OCP\Share\IProviderFactory $factory */
1216
			$factory = new $factoryClass($this);
1217
1218
			$manager = new \OC\Share20\Manager(
1219
				$c->getLogger(),
1220
				$c->getConfig(),
1221
				$c->getSecureRandom(),
1222
				$c->getHasher(),
1223
				$c->getMountManager(),
1224
				$c->getGroupManager(),
1225
				$c->getL10N('lib'),
1226
				$c->getL10NFactory(),
1227
				$factory,
1228
				$c->getUserManager(),
1229
				$c->getLazyRootFolder(),
1230
				$c->getEventDispatcher(),
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

1230
				/** @scrutinizer ignore-deprecated */ $c->getEventDispatcher(),

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
1231
				$c->getMailer(),
1232
				$c->getURLGenerator(),
1233
				$c->getThemingDefaults(),
1234
				$c->query(IEventDispatcher::class)
1235
			);
1236
1237
			return $manager;
1238
		});
1239
		$this->registerDeprecatedAlias('ShareManager', \OCP\Share\IManager::class);
1240
1241
		$this->registerService(\OCP\Collaboration\Collaborators\ISearch::class, function (Server $c) {
1242
			$instance = new Collaboration\Collaborators\Search($c);
1243
1244
			// register default plugins
1245
			$instance->registerPlugin(['shareType' => 'SHARE_TYPE_USER', 'class' => UserPlugin::class]);
1246
			$instance->registerPlugin(['shareType' => 'SHARE_TYPE_GROUP', 'class' => GroupPlugin::class]);
1247
			$instance->registerPlugin(['shareType' => 'SHARE_TYPE_EMAIL', 'class' => MailPlugin::class]);
1248
			$instance->registerPlugin(['shareType' => 'SHARE_TYPE_REMOTE', 'class' => RemotePlugin::class]);
1249
			$instance->registerPlugin(['shareType' => 'SHARE_TYPE_REMOTE_GROUP', 'class' => RemoteGroupPlugin::class]);
1250
1251
			return $instance;
1252
		});
1253
		$this->registerDeprecatedAlias('CollaboratorSearch', \OCP\Collaboration\Collaborators\ISearch::class);
1254
		$this->registerAlias(\OCP\Collaboration\Collaborators\ISearchResult::class, \OC\Collaboration\Collaborators\SearchResult::class);
1255
1256
		$this->registerAlias(\OCP\Collaboration\AutoComplete\IManager::class, \OC\Collaboration\AutoComplete\Manager::class);
1257
1258
		$this->registerAlias(\OCP\Collaboration\Resources\IProviderManager::class, \OC\Collaboration\Resources\ProviderManager::class);
1259
		$this->registerAlias(\OCP\Collaboration\Resources\IManager::class, \OC\Collaboration\Resources\Manager::class);
1260
1261
		$this->registerService('SettingsManager', function (Server $c) {
1262
			$manager = new \OC\Settings\Manager(
1263
				$c->getLogger(),
1264
				$c->getL10NFactory(),
1265
				$c->getURLGenerator(),
1266
				$c
1267
			);
1268
			return $manager;
1269
		});
1270
		$this->registerService(\OC\Files\AppData\Factory::class, function (Server $c) {
1271
			return new \OC\Files\AppData\Factory(
1272
				$c->getRootFolder(),
1273
				$c->getSystemConfig()
1274
			);
1275
		});
1276
1277
		$this->registerService('LockdownManager', function (Server $c) {
1278
			return new LockdownManager(function () use ($c) {
1279
				return $c->getSession();
1280
			});
1281
		});
1282
1283
		$this->registerService(\OCP\OCS\IDiscoveryService::class, function (Server $c) {
1284
			return new DiscoveryService($c->getMemCacheFactory(), $c->getHTTPClientService());
1285
		});
1286
1287
		$this->registerService(ICloudIdManager::class, function (Server $c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1287
		$this->registerService(ICloudIdManager::class, function (/** @scrutinizer ignore-unused */ Server $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1288
			return new CloudIdManager();
1289
		});
1290
1291
		$this->registerAlias(\OCP\GlobalScale\IConfig::class, \OC\GlobalScale\Config::class);
1292
1293
		$this->registerService(ICloudFederationProviderManager::class, function (Server $c) {
1294
			return new CloudFederationProviderManager($c->getAppManager(), $c->getHTTPClientService(), $c->getCloudIdManager(), $c->getLogger());
1295
		});
1296
1297
		$this->registerService(ICloudFederationFactory::class, function (Server $c) {
0 ignored issues
show
Unused Code introduced by
The parameter $c is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1297
		$this->registerService(ICloudFederationFactory::class, function (/** @scrutinizer ignore-unused */ Server $c) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1298
			return new CloudFederationFactory();
1299
		});
1300
1301
		$this->registerAlias(\OCP\AppFramework\Utility\IControllerMethodReflector::class, \OC\AppFramework\Utility\ControllerMethodReflector::class);
1302
		$this->registerDeprecatedAlias('ControllerMethodReflector', \OCP\AppFramework\Utility\IControllerMethodReflector::class);
1303
1304
		$this->registerAlias(\OCP\AppFramework\Utility\ITimeFactory::class, \OC\AppFramework\Utility\TimeFactory::class);
1305
		$this->registerDeprecatedAlias('TimeFactory', \OCP\AppFramework\Utility\ITimeFactory::class);
1306
1307
		$this->registerService(Defaults::class, function (Server $c) {
1308
			return new Defaults(
1309
				$c->getThemingDefaults()
1310
			);
1311
		});
1312
		$this->registerDeprecatedAlias('Defaults', \OCP\Defaults::class);
1313
1314
		$this->registerService(\OCP\ISession::class, function (SimpleContainer $c) {
1315
			return $c->query(\OCP\IUserSession::class)->getSession();
0 ignored issues
show
Bug introduced by
The method getSession() does not exist on stdClass. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1315
			return $c->query(\OCP\IUserSession::class)->/** @scrutinizer ignore-call */ getSession();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1316
		});
1317
1318
		$this->registerService(IShareHelper::class, function (Server $c) {
1319
			return new ShareHelper(
1320
				$c->query(\OCP\Share\IManager::class)
1321
			);
1322
		});
1323
1324
		$this->registerService(Installer::class, function (Server $c) {
1325
			return new Installer(
1326
				$c->getAppFetcher(),
1327
				$c->getHTTPClientService(),
1328
				$c->getTempManager(),
1329
				$c->getLogger(),
1330
				$c->getConfig(),
1331
				\OC::$CLI
1332
			);
1333
		});
1334
1335
		$this->registerService(IApiFactory::class, function (Server $c) {
1336
			return new ApiFactory($c->getHTTPClientService());
1337
		});
1338
1339
		$this->registerService(IInstanceFactory::class, function (Server $c) {
1340
			$memcacheFactory = $c->getMemCacheFactory();
1341
			return new InstanceFactory($memcacheFactory->createLocal('remoteinstance.'), $c->getHTTPClientService());
1342
		});
1343
1344
		$this->registerService(IContactsStore::class, function (Server $c) {
1345
			return new ContactsStore(
1346
				$c->getContactsManager(),
1347
				$c->getConfig(),
1348
				$c->getUserManager(),
1349
				$c->getGroupManager()
1350
			);
1351
		});
1352
		$this->registerAlias(IContactsStore::class, ContactsStore::class);
1353
		$this->registerAlias(IAccountManager::class, AccountManager::class);
1354
1355
		$this->registerService(IStorageFactory::class, function () {
1356
			return new StorageFactory();
1357
		});
1358
1359
		$this->registerAlias(IDashboardManager::class, DashboardManager::class);
1360
		$this->registerAlias(IFullTextSearchManager::class, FullTextSearchManager::class);
1361
1362
		$this->registerAlias(ISubAdmin::class, SubAdmin::class);
1363
1364
		$this->registerAlias(IInitialStateService::class, InitialStateService::class);
1365
1366
		$this->connectDispatcher();
1367
	}
1368
1369
	public function boot() {
1370
		/** @var HookConnector $hookConnector */
1371
		$hookConnector = $this->query(HookConnector::class);
1372
		$hookConnector->viewToNode();
1373
	}
1374
1375
	/**
1376
	 * @return \OCP\Calendar\IManager
1377
	 */
1378
	public function getCalendarManager() {
1379
		return $this->query(\OC\Calendar\Manager::class);
1380
	}
1381
1382
	/**
1383
	 * @return \OCP\Calendar\Resource\IManager
1384
	 */
1385
	public function getCalendarResourceBackendManager() {
1386
		return $this->query(\OC\Calendar\Resource\Manager::class);
1387
	}
1388
1389
	/**
1390
	 * @return \OCP\Calendar\Room\IManager
1391
	 */
1392
	public function getCalendarRoomBackendManager() {
1393
		return $this->query(\OC\Calendar\Room\Manager::class);
1394
	}
1395
1396
	private function connectDispatcher() {
1397
		$dispatcher = $this->getEventDispatcher();
0 ignored issues
show
Deprecated Code introduced by
The function OC\Server::getEventDispatcher() has been deprecated: 18.0.0 use \OCP\EventDispatcher\IEventDispatcher ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

1397
		$dispatcher = /** @scrutinizer ignore-deprecated */ $this->getEventDispatcher();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
1398
1399
		// Delete avatar on user deletion
1400
		$dispatcher->addListener('OCP\IUser::preDelete', function (GenericEvent $e) {
1401
			$logger = $this->getLogger();
1402
			$manager = $this->getAvatarManager();
1403
			/** @var IUser $user */
1404
			$user = $e->getSubject();
1405
1406
			try {
1407
				$avatar = $manager->getAvatar($user->getUID());
1408
				$avatar->remove();
1409
			} catch (NotFoundException $e) {
1410
				// no avatar to remove
1411
			} catch (\Exception $e) {
1412
				// Ignore exceptions
1413
				$logger->info('Could not cleanup avatar of ' . $user->getUID());
1414
			}
1415
		});
1416
1417
		$dispatcher->addListener('OCP\IUser::changeUser', function (GenericEvent $e) {
1418
			$manager = $this->getAvatarManager();
1419
			/** @var IUser $user */
1420
			$user = $e->getSubject();
1421
			$feature = $e->getArgument('feature');
1422
			$oldValue = $e->getArgument('oldValue');
1423
			$value = $e->getArgument('value');
1424
1425
			// We only change the avatar on display name changes
1426
			if ($feature !== 'displayName') {
1427
				return;
1428
			}
1429
1430
			try {
1431
				$avatar = $manager->getAvatar($user->getUID());
1432
				$avatar->userChanged($feature, $oldValue, $value);
1433
			} catch (NotFoundException $e) {
1434
				// no avatar to remove
1435
			}
1436
		});
1437
1438
		/** @var IEventDispatcher $eventDispatched */
1439
		$eventDispatched = $this->query(IEventDispatcher::class);
1440
		$eventDispatched->addServiceListener(LoginFailed::class, LoginFailedListener::class);
1441
	}
1442
1443
	/**
1444
	 * @return \OCP\Contacts\IManager
1445
	 */
1446
	public function getContactsManager() {
1447
		return $this->query(\OCP\Contacts\IManager::class);
1448
	}
1449
1450
	/**
1451
	 * @return \OC\Encryption\Manager
1452
	 */
1453
	public function getEncryptionManager() {
1454
		return $this->query(\OCP\Encryption\IManager::class);
1455
	}
1456
1457
	/**
1458
	 * @return \OC\Encryption\File
1459
	 */
1460
	public function getEncryptionFilesHelper() {
1461
		return $this->query('EncryptionFileHelper');
1462
	}
1463
1464
	/**
1465
	 * @return \OCP\Encryption\Keys\IStorage
1466
	 */
1467
	public function getEncryptionKeyStorage() {
1468
		return $this->query('EncryptionKeyStorage');
1469
	}
1470
1471
	/**
1472
	 * The current request object holding all information about the request
1473
	 * currently being processed is returned from this method.
1474
	 * In case the current execution was not initiated by a web request null is returned
1475
	 *
1476
	 * @return \OCP\IRequest
1477
	 */
1478
	public function getRequest() {
1479
		return $this->query(IRequest::class);
1480
	}
1481
1482
	/**
1483
	 * Returns the preview manager which can create preview images for a given file
1484
	 *
1485
	 * @return IPreview
1486
	 */
1487
	public function getPreviewManager() {
1488
		return $this->query(IPreview::class);
1489
	}
1490
1491
	/**
1492
	 * Returns the tag manager which can get and set tags for different object types
1493
	 *
1494
	 * @see \OCP\ITagManager::load()
1495
	 * @return ITagManager
1496
	 */
1497
	public function getTagManager() {
1498
		return $this->query(ITagManager::class);
1499
	}
1500
1501
	/**
1502
	 * Returns the system-tag manager
1503
	 *
1504
	 * @return ISystemTagManager
1505
	 *
1506
	 * @since 9.0.0
1507
	 */
1508
	public function getSystemTagManager() {
1509
		return $this->query(ISystemTagManager::class);
1510
	}
1511
1512
	/**
1513
	 * Returns the system-tag object mapper
1514
	 *
1515
	 * @return ISystemTagObjectMapper
1516
	 *
1517
	 * @since 9.0.0
1518
	 */
1519
	public function getSystemTagObjectMapper() {
1520
		return $this->query(ISystemTagObjectMapper::class);
1521
	}
1522
1523
	/**
1524
	 * Returns the avatar manager, used for avatar functionality
1525
	 *
1526
	 * @return IAvatarManager
1527
	 */
1528
	public function getAvatarManager() {
1529
		return $this->query(IAvatarManager::class);
1530
	}
1531
1532
	/**
1533
	 * Returns the root folder of ownCloud's data directory
1534
	 *
1535
	 * @return IRootFolder
1536
	 */
1537
	public function getRootFolder() {
1538
		return $this->query(IRootFolder::class);
1539
	}
1540
1541
	/**
1542
	 * Returns the root folder of ownCloud's data directory
1543
	 * This is the lazy variant so this gets only initialized once it
1544
	 * is actually used.
1545
	 *
1546
	 * @return IRootFolder
1547
	 */
1548
	public function getLazyRootFolder() {
1549
		return $this->query(IRootFolder::class);
1550
	}
1551
1552
	/**
1553
	 * Returns a view to ownCloud's files folder
1554
	 *
1555
	 * @param string $userId user ID
1556
	 * @return \OCP\Files\Folder|null
1557
	 */
1558
	public function getUserFolder($userId = null) {
1559
		if ($userId === null) {
1560
			$user = $this->getUserSession()->getUser();
1561
			if (!$user) {
0 ignored issues
show
introduced by
$user is of type OC\User\User, thus it always evaluated to true.
Loading history...
1562
				return null;
1563
			}
1564
			$userId = $user->getUID();
1565
		}
1566
		$root = $this->getRootFolder();
1567
		return $root->getUserFolder($userId);
1568
	}
1569
1570
	/**
1571
	 * Returns an app-specific view in ownClouds data directory
1572
	 *
1573
	 * @return \OCP\Files\Folder
1574
	 * @deprecated since 9.2.0 use IAppData
1575
	 */
1576
	public function getAppFolder() {
1577
		$dir = '/' . \OC_App::getCurrentApp();
1578
		$root = $this->getRootFolder();
1579
		if (!$root->nodeExists($dir)) {
1580
			$folder = $root->newFolder($dir);
1581
		} else {
1582
			$folder = $root->get($dir);
1583
		}
1584
		return $folder;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $folder also could return the type OCP\Files\Node which includes types incompatible with the return type mandated by OCP\IServerContainer::getAppFolder() of OCP\Files\Folder. Consider adding a type-check to rule them out.
Loading history...
1585
	}
1586
1587
	/**
1588
	 * @return \OC\User\Manager
1589
	 */
1590
	public function getUserManager() {
1591
		return $this->query(IUserManager::class);
1592
	}
1593
1594
	/**
1595
	 * @return \OC\Group\Manager
1596
	 */
1597
	public function getGroupManager() {
1598
		return $this->query(IGroupManager::class);
1599
	}
1600
1601
	/**
1602
	 * @return \OC\User\Session
1603
	 */
1604
	public function getUserSession() {
1605
		return $this->query(IUserSession::class);
1606
	}
1607
1608
	/**
1609
	 * @return \OCP\ISession
1610
	 */
1611
	public function getSession() {
1612
		return $this->getUserSession()->getSession();
1613
	}
1614
1615
	/**
1616
	 * @param \OCP\ISession $session
1617
	 */
1618
	public function setSession(\OCP\ISession $session) {
1619
		$this->query(SessionStorage::class)->setSession($session);
1620
		$this->getUserSession()->setSession($session);
1621
		$this->query(Store::class)->setSession($session);
1622
	}
1623
1624
	/**
1625
	 * @return \OC\Authentication\TwoFactorAuth\Manager
1626
	 */
1627
	public function getTwoFactorAuthManager() {
1628
		return $this->query(\OC\Authentication\TwoFactorAuth\Manager::class);
1629
	}
1630
1631
	/**
1632
	 * @return \OC\NavigationManager
1633
	 */
1634
	public function getNavigationManager() {
1635
		return $this->query(INavigationManager::class);
1636
	}
1637
1638
	/**
1639
	 * @return \OCP\IConfig
1640
	 */
1641
	public function getConfig() {
1642
		return $this->query(AllConfig::class);
1643
	}
1644
1645
	/**
1646
	 * @return \OC\SystemConfig
1647
	 */
1648
	public function getSystemConfig() {
1649
		return $this->query(SystemConfig::class);
1650
	}
1651
1652
	/**
1653
	 * Returns the app config manager
1654
	 *
1655
	 * @return IAppConfig
1656
	 */
1657
	public function getAppConfig() {
1658
		return $this->query(IAppConfig::class);
1659
	}
1660
1661
	/**
1662
	 * @return IFactory
1663
	 */
1664
	public function getL10NFactory() {
1665
		return $this->query(IFactory::class);
1666
	}
1667
1668
	/**
1669
	 * get an L10N instance
1670
	 *
1671
	 * @param string $app appid
1672
	 * @param string $lang
1673
	 * @return IL10N
1674
	 */
1675
	public function getL10N($app, $lang = null) {
1676
		return $this->getL10NFactory()->get($app, $lang);
1677
	}
1678
1679
	/**
1680
	 * @return IURLGenerator
1681
	 */
1682
	public function getURLGenerator() {
1683
		return $this->query(IURLGenerator::class);
1684
	}
1685
1686
	/**
1687
	 * @return AppFetcher
1688
	 */
1689
	public function getAppFetcher() {
1690
		return $this->query(AppFetcher::class);
1691
	}
1692
1693
	/**
1694
	 * Returns an ICache instance. Since 8.1.0 it returns a fake cache. Use
1695
	 * getMemCacheFactory() instead.
1696
	 *
1697
	 * @return ICache
1698
	 * @deprecated 8.1.0 use getMemCacheFactory to obtain a proper cache
1699
	 */
1700
	public function getCache() {
1701
		return $this->query(ICache::class);
1702
	}
1703
1704
	/**
1705
	 * Returns an \OCP\CacheFactory instance
1706
	 *
1707
	 * @return \OCP\ICacheFactory
1708
	 */
1709
	public function getMemCacheFactory() {
1710
		return $this->query(Factory::class);
1711
	}
1712
1713
	/**
1714
	 * Returns an \OC\RedisFactory instance
1715
	 *
1716
	 * @return \OC\RedisFactory
1717
	 */
1718
	public function getGetRedisFactory() {
1719
		return $this->query('RedisFactory');
1720
	}
1721
1722
1723
	/**
1724
	 * Returns the current session
1725
	 *
1726
	 * @return \OCP\IDBConnection
1727
	 */
1728
	public function getDatabaseConnection() {
1729
		return $this->query(IDBConnection::class);
1730
	}
1731
1732
	/**
1733
	 * Returns the activity manager
1734
	 *
1735
	 * @return \OCP\Activity\IManager
1736
	 */
1737
	public function getActivityManager() {
1738
		return $this->query(\OCP\Activity\IManager::class);
1739
	}
1740
1741
	/**
1742
	 * Returns an job list for controlling background jobs
1743
	 *
1744
	 * @return IJobList
1745
	 */
1746
	public function getJobList() {
1747
		return $this->query(IJobList::class);
1748
	}
1749
1750
	/**
1751
	 * Returns a logger instance
1752
	 *
1753
	 * @return ILogger
1754
	 */
1755
	public function getLogger() {
1756
		return $this->query(ILogger::class);
1757
	}
1758
1759
	/**
1760
	 * @return ILogFactory
1761
	 * @throws \OCP\AppFramework\QueryException
1762
	 */
1763
	public function getLogFactory() {
1764
		return $this->query(ILogFactory::class);
1765
	}
1766
1767
	/**
1768
	 * Returns a router for generating and matching urls
1769
	 *
1770
	 * @return IRouter
1771
	 */
1772
	public function getRouter() {
1773
		return $this->query(IRouter::class);
1774
	}
1775
1776
	/**
1777
	 * Returns a search instance
1778
	 *
1779
	 * @return ISearch
1780
	 */
1781
	public function getSearch() {
1782
		return $this->query(ISearch::class);
1783
	}
1784
1785
	/**
1786
	 * Returns a SecureRandom instance
1787
	 *
1788
	 * @return \OCP\Security\ISecureRandom
1789
	 */
1790
	public function getSecureRandom() {
1791
		return $this->query(ISecureRandom::class);
1792
	}
1793
1794
	/**
1795
	 * Returns a Crypto instance
1796
	 *
1797
	 * @return ICrypto
1798
	 */
1799
	public function getCrypto() {
1800
		return $this->query(ICrypto::class);
1801
	}
1802
1803
	/**
1804
	 * Returns a Hasher instance
1805
	 *
1806
	 * @return IHasher
1807
	 */
1808
	public function getHasher() {
1809
		return $this->query(IHasher::class);
1810
	}
1811
1812
	/**
1813
	 * Returns a CredentialsManager instance
1814
	 *
1815
	 * @return ICredentialsManager
1816
	 */
1817
	public function getCredentialsManager() {
1818
		return $this->query(ICredentialsManager::class);
1819
	}
1820
1821
	/**
1822
	 * Get the certificate manager for the user
1823
	 *
1824
	 * @param string $userId (optional) if not specified the current loggedin user is used, use null to get the system certificate manager
1825
	 * @return \OCP\ICertificateManager | null if $uid is null and no user is logged in
1826
	 */
1827
	public function getCertificateManager($userId = '') {
1828
		if ($userId === '') {
1829
			$userSession = $this->getUserSession();
1830
			$user = $userSession->getUser();
1831
			if (is_null($user)) {
1832
				return null;
1833
			}
1834
			$userId = $user->getUID();
1835
		}
1836
		return new CertificateManager(
1837
			$userId,
1838
			new View(),
1839
			$this->getConfig(),
1840
			$this->getLogger(),
1841
			$this->getSecureRandom()
1842
		);
1843
	}
1844
1845
	/**
1846
	 * Returns an instance of the HTTP client service
1847
	 *
1848
	 * @return IClientService
1849
	 */
1850
	public function getHTTPClientService() {
1851
		return $this->query(IClientService::class);
1852
	}
1853
1854
	/**
1855
	 * Create a new event source
1856
	 *
1857
	 * @return \OCP\IEventSource
1858
	 */
1859
	public function createEventSource() {
1860
		return new \OC_EventSource();
1861
	}
1862
1863
	/**
1864
	 * Get the active event logger
1865
	 *
1866
	 * The returned logger only logs data when debug mode is enabled
1867
	 *
1868
	 * @return IEventLogger
1869
	 */
1870
	public function getEventLogger() {
1871
		return $this->query(IEventLogger::class);
1872
	}
1873
1874
	/**
1875
	 * Get the active query logger
1876
	 *
1877
	 * The returned logger only logs data when debug mode is enabled
1878
	 *
1879
	 * @return IQueryLogger
1880
	 */
1881
	public function getQueryLogger() {
1882
		return $this->query(IQueryLogger::class);
1883
	}
1884
1885
	/**
1886
	 * Get the manager for temporary files and folders
1887
	 *
1888
	 * @return \OCP\ITempManager
1889
	 */
1890
	public function getTempManager() {
1891
		return $this->query(ITempManager::class);
1892
	}
1893
1894
	/**
1895
	 * Get the app manager
1896
	 *
1897
	 * @return \OCP\App\IAppManager
1898
	 */
1899
	public function getAppManager() {
1900
		return $this->query(IAppManager::class);
1901
	}
1902
1903
	/**
1904
	 * Creates a new mailer
1905
	 *
1906
	 * @return IMailer
1907
	 */
1908
	public function getMailer() {
1909
		return $this->query(IMailer::class);
1910
	}
1911
1912
	/**
1913
	 * Get the webroot
1914
	 *
1915
	 * @return string
1916
	 */
1917
	public function getWebRoot() {
1918
		return $this->webRoot;
1919
	}
1920
1921
	/**
1922
	 * @return \OC\OCSClient
0 ignored issues
show
Bug introduced by
The type OC\OCSClient was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
1923
	 */
1924
	public function getOcsClient() {
1925
		return $this->query('OcsClient');
1926
	}
1927
1928
	/**
1929
	 * @return IDateTimeZone
1930
	 */
1931
	public function getDateTimeZone() {
1932
		return $this->query(IDateTimeZone::class);
1933
	}
1934
1935
	/**
1936
	 * @return IDateTimeFormatter
1937
	 */
1938
	public function getDateTimeFormatter() {
1939
		return $this->query(IDateTimeFormatter::class);
1940
	}
1941
1942
	/**
1943
	 * @return IMountProviderCollection
1944
	 */
1945
	public function getMountProviderCollection() {
1946
		return $this->query(IMountProviderCollection::class);
1947
	}
1948
1949
	/**
1950
	 * Get the IniWrapper
1951
	 *
1952
	 * @return IniGetWrapper
1953
	 */
1954
	public function getIniWrapper() {
1955
		return $this->query('IniWrapper');
1956
	}
1957
1958
	/**
1959
	 * @return \OCP\Command\IBus
1960
	 */
1961
	public function getCommandBus() {
1962
		return $this->query('AsyncCommandBus');
1963
	}
1964
1965
	/**
1966
	 * Get the trusted domain helper
1967
	 *
1968
	 * @return TrustedDomainHelper
1969
	 */
1970
	public function getTrustedDomainHelper() {
1971
		return $this->query('TrustedDomainHelper');
1972
	}
1973
1974
	/**
1975
	 * Get the locking provider
1976
	 *
1977
	 * @return ILockingProvider
1978
	 * @since 8.1.0
1979
	 */
1980
	public function getLockingProvider() {
1981
		return $this->query(ILockingProvider::class);
1982
	}
1983
1984
	/**
1985
	 * @return IMountManager
1986
	 **/
1987
	public function getMountManager() {
1988
		return $this->query(IMountManager::class);
1989
	}
1990
1991
	/**
1992
	 * @return IUserMountCache
1993
	 */
1994
	public function getUserMountCache() {
1995
		return $this->query(IUserMountCache::class);
1996
	}
1997
1998
	/**
1999
	 * Get the MimeTypeDetector
2000
	 *
2001
	 * @return IMimeTypeDetector
2002
	 */
2003
	public function getMimeTypeDetector() {
2004
		return $this->query(IMimeTypeDetector::class);
2005
	}
2006
2007
	/**
2008
	 * Get the MimeTypeLoader
2009
	 *
2010
	 * @return IMimeTypeLoader
2011
	 */
2012
	public function getMimeTypeLoader() {
2013
		return $this->query(IMimeTypeLoader::class);
2014
	}
2015
2016
	/**
2017
	 * Get the manager of all the capabilities
2018
	 *
2019
	 * @return CapabilitiesManager
2020
	 */
2021
	public function getCapabilitiesManager() {
2022
		return $this->query(CapabilitiesManager::class);
2023
	}
2024
2025
	/**
2026
	 * Get the EventDispatcher
2027
	 *
2028
	 * @return EventDispatcherInterface
2029
	 * @since 8.2.0
2030
	 * @deprecated 18.0.0 use \OCP\EventDispatcher\IEventDispatcher
2031
	 */
2032
	public function getEventDispatcher() {
2033
		return $this->query(\OC\EventDispatcher\SymfonyAdapter::class);
2034
	}
2035
2036
	/**
2037
	 * Get the Notification Manager
2038
	 *
2039
	 * @return \OCP\Notification\IManager
2040
	 * @since 8.2.0
2041
	 */
2042
	public function getNotificationManager() {
2043
		return $this->query(\OCP\Notification\IManager::class);
2044
	}
2045
2046
	/**
2047
	 * @return ICommentsManager
2048
	 */
2049
	public function getCommentsManager() {
2050
		return $this->query(ICommentsManager::class);
2051
	}
2052
2053
	/**
2054
	 * @return \OCA\Theming\ThemingDefaults
2055
	 */
2056
	public function getThemingDefaults() {
2057
		return $this->query('ThemingDefaults');
2058
	}
2059
2060
	/**
2061
	 * @return \OC\IntegrityCheck\Checker
2062
	 */
2063
	public function getIntegrityCodeChecker() {
2064
		return $this->query('IntegrityCodeChecker');
2065
	}
2066
2067
	/**
2068
	 * @return \OC\Session\CryptoWrapper
2069
	 */
2070
	public function getSessionCryptoWrapper() {
2071
		return $this->query('CryptoWrapper');
2072
	}
2073
2074
	/**
2075
	 * @return CsrfTokenManager
2076
	 */
2077
	public function getCsrfTokenManager() {
2078
		return $this->query(CsrfTokenManager::class);
2079
	}
2080
2081
	/**
2082
	 * @return Throttler
2083
	 */
2084
	public function getBruteForceThrottler() {
2085
		return $this->query(Throttler::class);
2086
	}
2087
2088
	/**
2089
	 * @return IContentSecurityPolicyManager
2090
	 */
2091
	public function getContentSecurityPolicyManager() {
2092
		return $this->query(ContentSecurityPolicyManager::class);
2093
	}
2094
2095
	/**
2096
	 * @return ContentSecurityPolicyNonceManager
2097
	 */
2098
	public function getContentSecurityPolicyNonceManager() {
2099
		return $this->query('ContentSecurityPolicyNonceManager');
2100
	}
2101
2102
	/**
2103
	 * Not a public API as of 8.2, wait for 9.0
2104
	 *
2105
	 * @return \OCA\Files_External\Service\BackendService
2106
	 */
2107
	public function getStoragesBackendService() {
2108
		return $this->query(BackendService::class);
2109
	}
2110
2111
	/**
2112
	 * Not a public API as of 8.2, wait for 9.0
2113
	 *
2114
	 * @return \OCA\Files_External\Service\GlobalStoragesService
2115
	 */
2116
	public function getGlobalStoragesService() {
2117
		return $this->query(GlobalStoragesService::class);
2118
	}
2119
2120
	/**
2121
	 * Not a public API as of 8.2, wait for 9.0
2122
	 *
2123
	 * @return \OCA\Files_External\Service\UserGlobalStoragesService
2124
	 */
2125
	public function getUserGlobalStoragesService() {
2126
		return $this->query(UserGlobalStoragesService::class);
2127
	}
2128
2129
	/**
2130
	 * Not a public API as of 8.2, wait for 9.0
2131
	 *
2132
	 * @return \OCA\Files_External\Service\UserStoragesService
2133
	 */
2134
	public function getUserStoragesService() {
2135
		return $this->query(UserStoragesService::class);
2136
	}
2137
2138
	/**
2139
	 * @return \OCP\Share\IManager
2140
	 */
2141
	public function getShareManager() {
2142
		return $this->query(\OCP\Share\IManager::class);
2143
	}
2144
2145
	/**
2146
	 * @return \OCP\Collaboration\Collaborators\ISearch
2147
	 */
2148
	public function getCollaboratorSearch() {
2149
		return $this->query(\OCP\Collaboration\Collaborators\ISearch::class);
2150
	}
2151
2152
	/**
2153
	 * @return \OCP\Collaboration\AutoComplete\IManager
2154
	 */
2155
	public function getAutoCompleteManager() {
2156
		return $this->query(IManager::class);
2157
	}
2158
2159
	/**
2160
	 * Returns the LDAP Provider
2161
	 *
2162
	 * @return \OCP\LDAP\ILDAPProvider
2163
	 */
2164
	public function getLDAPProvider() {
2165
		return $this->query('LDAPProvider');
2166
	}
2167
2168
	/**
2169
	 * @return \OCP\Settings\IManager
2170
	 */
2171
	public function getSettingsManager() {
2172
		return $this->query('SettingsManager');
2173
	}
2174
2175
	/**
2176
	 * @return \OCP\Files\IAppData
2177
	 */
2178
	public function getAppDataDir($app) {
2179
		/** @var \OC\Files\AppData\Factory $factory */
2180
		$factory = $this->query(\OC\Files\AppData\Factory::class);
2181
		return $factory->get($app);
2182
	}
2183
2184
	/**
2185
	 * @return \OCP\Lockdown\ILockdownManager
2186
	 */
2187
	public function getLockdownManager() {
2188
		return $this->query('LockdownManager');
2189
	}
2190
2191
	/**
2192
	 * @return \OCP\Federation\ICloudIdManager
2193
	 */
2194
	public function getCloudIdManager() {
2195
		return $this->query(ICloudIdManager::class);
2196
	}
2197
2198
	/**
2199
	 * @return \OCP\GlobalScale\IConfig
2200
	 */
2201
	public function getGlobalScaleConfig() {
2202
		return $this->query(IConfig::class);
2203
	}
2204
2205
	/**
2206
	 * @return \OCP\Federation\ICloudFederationProviderManager
2207
	 */
2208
	public function getCloudFederationProviderManager() {
2209
		return $this->query(ICloudFederationProviderManager::class);
2210
	}
2211
2212
	/**
2213
	 * @return \OCP\Remote\Api\IApiFactory
2214
	 */
2215
	public function getRemoteApiFactory() {
2216
		return $this->query(IApiFactory::class);
2217
	}
2218
2219
	/**
2220
	 * @return \OCP\Federation\ICloudFederationFactory
2221
	 */
2222
	public function getCloudFederationFactory() {
2223
		return $this->query(ICloudFederationFactory::class);
2224
	}
2225
2226
	/**
2227
	 * @return \OCP\Remote\IInstanceFactory
2228
	 */
2229
	public function getRemoteInstanceFactory() {
2230
		return $this->query(IInstanceFactory::class);
2231
	}
2232
2233
	/**
2234
	 * @return IStorageFactory
2235
	 */
2236
	public function getStorageFactory() {
2237
		return $this->query(IStorageFactory::class);
2238
	}
2239
2240
	/**
2241
	 * Get the Preview GeneratorHelper
2242
	 *
2243
	 * @return GeneratorHelper
2244
	 * @since 17.0.0
2245
	 */
2246
	public function getGeneratorHelper() {
2247
		return $this->query(\OC\Preview\GeneratorHelper::class);
2248
	}
2249
2250
	private function registerDeprecatedAlias(string $alias, string $target) {
2251
		$this->registerService($alias, function (IContainer $container) use ($target, $alias) {
2252
			try {
2253
				/** @var ILogger $logger */
2254
				$logger = $container->query(ILogger::class);
2255
				$logger->debug('The requested alias "' . $alias . '" is depreacted. Please request "' . $target . '" directly. This alias will be removed in a future Nextcloud version.', ['app' => 'serverDI']);
2256
			} catch (QueryException $e) {
2257
				// Could not get logger. Continue
2258
			}
2259
2260
			return $container->query($target);
2261
		}, false);
2262
	}
2263
}
2264