Passed
Push — master ( 2124d1...560c48 )
by Morris
18:22 queued 07:29
created

Server::getGlobalStoragesService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
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
	 * @return \OC\User\Manager
1572
	 */
1573
	public function getUserManager() {
1574
		return $this->query(IUserManager::class);
1575
	}
1576
1577
	/**
1578
	 * @return \OC\Group\Manager
1579
	 */
1580
	public function getGroupManager() {
1581
		return $this->query(IGroupManager::class);
1582
	}
1583
1584
	/**
1585
	 * @return \OC\User\Session
1586
	 */
1587
	public function getUserSession() {
1588
		return $this->query(IUserSession::class);
1589
	}
1590
1591
	/**
1592
	 * @return \OCP\ISession
1593
	 */
1594
	public function getSession() {
1595
		return $this->getUserSession()->getSession();
1596
	}
1597
1598
	/**
1599
	 * @param \OCP\ISession $session
1600
	 */
1601
	public function setSession(\OCP\ISession $session) {
1602
		$this->query(SessionStorage::class)->setSession($session);
1603
		$this->getUserSession()->setSession($session);
1604
		$this->query(Store::class)->setSession($session);
1605
	}
1606
1607
	/**
1608
	 * @return \OC\Authentication\TwoFactorAuth\Manager
1609
	 */
1610
	public function getTwoFactorAuthManager() {
1611
		return $this->query(\OC\Authentication\TwoFactorAuth\Manager::class);
1612
	}
1613
1614
	/**
1615
	 * @return \OC\NavigationManager
1616
	 */
1617
	public function getNavigationManager() {
1618
		return $this->query(INavigationManager::class);
1619
	}
1620
1621
	/**
1622
	 * @return \OCP\IConfig
1623
	 */
1624
	public function getConfig() {
1625
		return $this->query(AllConfig::class);
1626
	}
1627
1628
	/**
1629
	 * @return \OC\SystemConfig
1630
	 */
1631
	public function getSystemConfig() {
1632
		return $this->query(SystemConfig::class);
1633
	}
1634
1635
	/**
1636
	 * Returns the app config manager
1637
	 *
1638
	 * @return IAppConfig
1639
	 */
1640
	public function getAppConfig() {
1641
		return $this->query(IAppConfig::class);
1642
	}
1643
1644
	/**
1645
	 * @return IFactory
1646
	 */
1647
	public function getL10NFactory() {
1648
		return $this->query(IFactory::class);
1649
	}
1650
1651
	/**
1652
	 * get an L10N instance
1653
	 *
1654
	 * @param string $app appid
1655
	 * @param string $lang
1656
	 * @return IL10N
1657
	 */
1658
	public function getL10N($app, $lang = null) {
1659
		return $this->getL10NFactory()->get($app, $lang);
1660
	}
1661
1662
	/**
1663
	 * @return IURLGenerator
1664
	 */
1665
	public function getURLGenerator() {
1666
		return $this->query(IURLGenerator::class);
1667
	}
1668
1669
	/**
1670
	 * @return AppFetcher
1671
	 */
1672
	public function getAppFetcher() {
1673
		return $this->query(AppFetcher::class);
1674
	}
1675
1676
	/**
1677
	 * Returns an ICache instance. Since 8.1.0 it returns a fake cache. Use
1678
	 * getMemCacheFactory() instead.
1679
	 *
1680
	 * @return ICache
1681
	 * @deprecated 8.1.0 use getMemCacheFactory to obtain a proper cache
1682
	 */
1683
	public function getCache() {
1684
		return $this->query(ICache::class);
1685
	}
1686
1687
	/**
1688
	 * Returns an \OCP\CacheFactory instance
1689
	 *
1690
	 * @return \OCP\ICacheFactory
1691
	 */
1692
	public function getMemCacheFactory() {
1693
		return $this->query(Factory::class);
1694
	}
1695
1696
	/**
1697
	 * Returns an \OC\RedisFactory instance
1698
	 *
1699
	 * @return \OC\RedisFactory
1700
	 */
1701
	public function getGetRedisFactory() {
1702
		return $this->query('RedisFactory');
1703
	}
1704
1705
1706
	/**
1707
	 * Returns the current session
1708
	 *
1709
	 * @return \OCP\IDBConnection
1710
	 */
1711
	public function getDatabaseConnection() {
1712
		return $this->query(IDBConnection::class);
1713
	}
1714
1715
	/**
1716
	 * Returns the activity manager
1717
	 *
1718
	 * @return \OCP\Activity\IManager
1719
	 */
1720
	public function getActivityManager() {
1721
		return $this->query(\OCP\Activity\IManager::class);
1722
	}
1723
1724
	/**
1725
	 * Returns an job list for controlling background jobs
1726
	 *
1727
	 * @return IJobList
1728
	 */
1729
	public function getJobList() {
1730
		return $this->query(IJobList::class);
1731
	}
1732
1733
	/**
1734
	 * Returns a logger instance
1735
	 *
1736
	 * @return ILogger
1737
	 */
1738
	public function getLogger() {
1739
		return $this->query(ILogger::class);
1740
	}
1741
1742
	/**
1743
	 * @return ILogFactory
1744
	 * @throws \OCP\AppFramework\QueryException
1745
	 */
1746
	public function getLogFactory() {
1747
		return $this->query(ILogFactory::class);
1748
	}
1749
1750
	/**
1751
	 * Returns a router for generating and matching urls
1752
	 *
1753
	 * @return IRouter
1754
	 */
1755
	public function getRouter() {
1756
		return $this->query(IRouter::class);
1757
	}
1758
1759
	/**
1760
	 * Returns a search instance
1761
	 *
1762
	 * @return ISearch
1763
	 */
1764
	public function getSearch() {
1765
		return $this->query(ISearch::class);
1766
	}
1767
1768
	/**
1769
	 * Returns a SecureRandom instance
1770
	 *
1771
	 * @return \OCP\Security\ISecureRandom
1772
	 */
1773
	public function getSecureRandom() {
1774
		return $this->query(ISecureRandom::class);
1775
	}
1776
1777
	/**
1778
	 * Returns a Crypto instance
1779
	 *
1780
	 * @return ICrypto
1781
	 */
1782
	public function getCrypto() {
1783
		return $this->query(ICrypto::class);
1784
	}
1785
1786
	/**
1787
	 * Returns a Hasher instance
1788
	 *
1789
	 * @return IHasher
1790
	 */
1791
	public function getHasher() {
1792
		return $this->query(IHasher::class);
1793
	}
1794
1795
	/**
1796
	 * Returns a CredentialsManager instance
1797
	 *
1798
	 * @return ICredentialsManager
1799
	 */
1800
	public function getCredentialsManager() {
1801
		return $this->query(ICredentialsManager::class);
1802
	}
1803
1804
	/**
1805
	 * Get the certificate manager for the user
1806
	 *
1807
	 * @param string $userId (optional) if not specified the current loggedin user is used, use null to get the system certificate manager
1808
	 * @return \OCP\ICertificateManager | null if $uid is null and no user is logged in
1809
	 */
1810
	public function getCertificateManager($userId = '') {
1811
		if ($userId === '') {
1812
			$userSession = $this->getUserSession();
1813
			$user = $userSession->getUser();
1814
			if (is_null($user)) {
1815
				return null;
1816
			}
1817
			$userId = $user->getUID();
1818
		}
1819
		return new CertificateManager(
1820
			$userId,
1821
			new View(),
1822
			$this->getConfig(),
1823
			$this->getLogger(),
1824
			$this->getSecureRandom()
1825
		);
1826
	}
1827
1828
	/**
1829
	 * Returns an instance of the HTTP client service
1830
	 *
1831
	 * @return IClientService
1832
	 */
1833
	public function getHTTPClientService() {
1834
		return $this->query(IClientService::class);
1835
	}
1836
1837
	/**
1838
	 * Create a new event source
1839
	 *
1840
	 * @return \OCP\IEventSource
1841
	 */
1842
	public function createEventSource() {
1843
		return new \OC_EventSource();
1844
	}
1845
1846
	/**
1847
	 * Get the active event logger
1848
	 *
1849
	 * The returned logger only logs data when debug mode is enabled
1850
	 *
1851
	 * @return IEventLogger
1852
	 */
1853
	public function getEventLogger() {
1854
		return $this->query(IEventLogger::class);
1855
	}
1856
1857
	/**
1858
	 * Get the active query logger
1859
	 *
1860
	 * The returned logger only logs data when debug mode is enabled
1861
	 *
1862
	 * @return IQueryLogger
1863
	 */
1864
	public function getQueryLogger() {
1865
		return $this->query(IQueryLogger::class);
1866
	}
1867
1868
	/**
1869
	 * Get the manager for temporary files and folders
1870
	 *
1871
	 * @return \OCP\ITempManager
1872
	 */
1873
	public function getTempManager() {
1874
		return $this->query(ITempManager::class);
1875
	}
1876
1877
	/**
1878
	 * Get the app manager
1879
	 *
1880
	 * @return \OCP\App\IAppManager
1881
	 */
1882
	public function getAppManager() {
1883
		return $this->query(IAppManager::class);
1884
	}
1885
1886
	/**
1887
	 * Creates a new mailer
1888
	 *
1889
	 * @return IMailer
1890
	 */
1891
	public function getMailer() {
1892
		return $this->query(IMailer::class);
1893
	}
1894
1895
	/**
1896
	 * Get the webroot
1897
	 *
1898
	 * @return string
1899
	 */
1900
	public function getWebRoot() {
1901
		return $this->webRoot;
1902
	}
1903
1904
	/**
1905
	 * @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...
1906
	 */
1907
	public function getOcsClient() {
1908
		return $this->query('OcsClient');
1909
	}
1910
1911
	/**
1912
	 * @return IDateTimeZone
1913
	 */
1914
	public function getDateTimeZone() {
1915
		return $this->query(IDateTimeZone::class);
1916
	}
1917
1918
	/**
1919
	 * @return IDateTimeFormatter
1920
	 */
1921
	public function getDateTimeFormatter() {
1922
		return $this->query(IDateTimeFormatter::class);
1923
	}
1924
1925
	/**
1926
	 * @return IMountProviderCollection
1927
	 */
1928
	public function getMountProviderCollection() {
1929
		return $this->query(IMountProviderCollection::class);
1930
	}
1931
1932
	/**
1933
	 * Get the IniWrapper
1934
	 *
1935
	 * @return IniGetWrapper
1936
	 */
1937
	public function getIniWrapper() {
1938
		return $this->query('IniWrapper');
1939
	}
1940
1941
	/**
1942
	 * @return \OCP\Command\IBus
1943
	 */
1944
	public function getCommandBus() {
1945
		return $this->query('AsyncCommandBus');
1946
	}
1947
1948
	/**
1949
	 * Get the trusted domain helper
1950
	 *
1951
	 * @return TrustedDomainHelper
1952
	 */
1953
	public function getTrustedDomainHelper() {
1954
		return $this->query('TrustedDomainHelper');
1955
	}
1956
1957
	/**
1958
	 * Get the locking provider
1959
	 *
1960
	 * @return ILockingProvider
1961
	 * @since 8.1.0
1962
	 */
1963
	public function getLockingProvider() {
1964
		return $this->query(ILockingProvider::class);
1965
	}
1966
1967
	/**
1968
	 * @return IMountManager
1969
	 **/
1970
	public function getMountManager() {
1971
		return $this->query(IMountManager::class);
1972
	}
1973
1974
	/**
1975
	 * @return IUserMountCache
1976
	 */
1977
	public function getUserMountCache() {
1978
		return $this->query(IUserMountCache::class);
1979
	}
1980
1981
	/**
1982
	 * Get the MimeTypeDetector
1983
	 *
1984
	 * @return IMimeTypeDetector
1985
	 */
1986
	public function getMimeTypeDetector() {
1987
		return $this->query(IMimeTypeDetector::class);
1988
	}
1989
1990
	/**
1991
	 * Get the MimeTypeLoader
1992
	 *
1993
	 * @return IMimeTypeLoader
1994
	 */
1995
	public function getMimeTypeLoader() {
1996
		return $this->query(IMimeTypeLoader::class);
1997
	}
1998
1999
	/**
2000
	 * Get the manager of all the capabilities
2001
	 *
2002
	 * @return CapabilitiesManager
2003
	 */
2004
	public function getCapabilitiesManager() {
2005
		return $this->query(CapabilitiesManager::class);
2006
	}
2007
2008
	/**
2009
	 * Get the EventDispatcher
2010
	 *
2011
	 * @return EventDispatcherInterface
2012
	 * @since 8.2.0
2013
	 * @deprecated 18.0.0 use \OCP\EventDispatcher\IEventDispatcher
2014
	 */
2015
	public function getEventDispatcher() {
2016
		return $this->query(\OC\EventDispatcher\SymfonyAdapter::class);
2017
	}
2018
2019
	/**
2020
	 * Get the Notification Manager
2021
	 *
2022
	 * @return \OCP\Notification\IManager
2023
	 * @since 8.2.0
2024
	 */
2025
	public function getNotificationManager() {
2026
		return $this->query(\OCP\Notification\IManager::class);
2027
	}
2028
2029
	/**
2030
	 * @return ICommentsManager
2031
	 */
2032
	public function getCommentsManager() {
2033
		return $this->query(ICommentsManager::class);
2034
	}
2035
2036
	/**
2037
	 * @return \OCA\Theming\ThemingDefaults
2038
	 */
2039
	public function getThemingDefaults() {
2040
		return $this->query('ThemingDefaults');
2041
	}
2042
2043
	/**
2044
	 * @return \OC\IntegrityCheck\Checker
2045
	 */
2046
	public function getIntegrityCodeChecker() {
2047
		return $this->query('IntegrityCodeChecker');
2048
	}
2049
2050
	/**
2051
	 * @return \OC\Session\CryptoWrapper
2052
	 */
2053
	public function getSessionCryptoWrapper() {
2054
		return $this->query('CryptoWrapper');
2055
	}
2056
2057
	/**
2058
	 * @return CsrfTokenManager
2059
	 */
2060
	public function getCsrfTokenManager() {
2061
		return $this->query(CsrfTokenManager::class);
2062
	}
2063
2064
	/**
2065
	 * @return Throttler
2066
	 */
2067
	public function getBruteForceThrottler() {
2068
		return $this->query(Throttler::class);
2069
	}
2070
2071
	/**
2072
	 * @return IContentSecurityPolicyManager
2073
	 */
2074
	public function getContentSecurityPolicyManager() {
2075
		return $this->query(ContentSecurityPolicyManager::class);
2076
	}
2077
2078
	/**
2079
	 * @return ContentSecurityPolicyNonceManager
2080
	 */
2081
	public function getContentSecurityPolicyNonceManager() {
2082
		return $this->query('ContentSecurityPolicyNonceManager');
2083
	}
2084
2085
	/**
2086
	 * Not a public API as of 8.2, wait for 9.0
2087
	 *
2088
	 * @return \OCA\Files_External\Service\BackendService
2089
	 */
2090
	public function getStoragesBackendService() {
2091
		return $this->query(BackendService::class);
2092
	}
2093
2094
	/**
2095
	 * Not a public API as of 8.2, wait for 9.0
2096
	 *
2097
	 * @return \OCA\Files_External\Service\GlobalStoragesService
2098
	 */
2099
	public function getGlobalStoragesService() {
2100
		return $this->query(GlobalStoragesService::class);
2101
	}
2102
2103
	/**
2104
	 * Not a public API as of 8.2, wait for 9.0
2105
	 *
2106
	 * @return \OCA\Files_External\Service\UserGlobalStoragesService
2107
	 */
2108
	public function getUserGlobalStoragesService() {
2109
		return $this->query(UserGlobalStoragesService::class);
2110
	}
2111
2112
	/**
2113
	 * Not a public API as of 8.2, wait for 9.0
2114
	 *
2115
	 * @return \OCA\Files_External\Service\UserStoragesService
2116
	 */
2117
	public function getUserStoragesService() {
2118
		return $this->query(UserStoragesService::class);
2119
	}
2120
2121
	/**
2122
	 * @return \OCP\Share\IManager
2123
	 */
2124
	public function getShareManager() {
2125
		return $this->query(\OCP\Share\IManager::class);
2126
	}
2127
2128
	/**
2129
	 * @return \OCP\Collaboration\Collaborators\ISearch
2130
	 */
2131
	public function getCollaboratorSearch() {
2132
		return $this->query(\OCP\Collaboration\Collaborators\ISearch::class);
2133
	}
2134
2135
	/**
2136
	 * @return \OCP\Collaboration\AutoComplete\IManager
2137
	 */
2138
	public function getAutoCompleteManager() {
2139
		return $this->query(IManager::class);
2140
	}
2141
2142
	/**
2143
	 * Returns the LDAP Provider
2144
	 *
2145
	 * @return \OCP\LDAP\ILDAPProvider
2146
	 */
2147
	public function getLDAPProvider() {
2148
		return $this->query('LDAPProvider');
2149
	}
2150
2151
	/**
2152
	 * @return \OCP\Settings\IManager
2153
	 */
2154
	public function getSettingsManager() {
2155
		return $this->query('SettingsManager');
2156
	}
2157
2158
	/**
2159
	 * @return \OCP\Files\IAppData
2160
	 */
2161
	public function getAppDataDir($app) {
2162
		/** @var \OC\Files\AppData\Factory $factory */
2163
		$factory = $this->query(\OC\Files\AppData\Factory::class);
2164
		return $factory->get($app);
2165
	}
2166
2167
	/**
2168
	 * @return \OCP\Lockdown\ILockdownManager
2169
	 */
2170
	public function getLockdownManager() {
2171
		return $this->query('LockdownManager');
2172
	}
2173
2174
	/**
2175
	 * @return \OCP\Federation\ICloudIdManager
2176
	 */
2177
	public function getCloudIdManager() {
2178
		return $this->query(ICloudIdManager::class);
2179
	}
2180
2181
	/**
2182
	 * @return \OCP\GlobalScale\IConfig
2183
	 */
2184
	public function getGlobalScaleConfig() {
2185
		return $this->query(IConfig::class);
2186
	}
2187
2188
	/**
2189
	 * @return \OCP\Federation\ICloudFederationProviderManager
2190
	 */
2191
	public function getCloudFederationProviderManager() {
2192
		return $this->query(ICloudFederationProviderManager::class);
2193
	}
2194
2195
	/**
2196
	 * @return \OCP\Remote\Api\IApiFactory
2197
	 */
2198
	public function getRemoteApiFactory() {
2199
		return $this->query(IApiFactory::class);
2200
	}
2201
2202
	/**
2203
	 * @return \OCP\Federation\ICloudFederationFactory
2204
	 */
2205
	public function getCloudFederationFactory() {
2206
		return $this->query(ICloudFederationFactory::class);
2207
	}
2208
2209
	/**
2210
	 * @return \OCP\Remote\IInstanceFactory
2211
	 */
2212
	public function getRemoteInstanceFactory() {
2213
		return $this->query(IInstanceFactory::class);
2214
	}
2215
2216
	/**
2217
	 * @return IStorageFactory
2218
	 */
2219
	public function getStorageFactory() {
2220
		return $this->query(IStorageFactory::class);
2221
	}
2222
2223
	/**
2224
	 * Get the Preview GeneratorHelper
2225
	 *
2226
	 * @return GeneratorHelper
2227
	 * @since 17.0.0
2228
	 */
2229
	public function getGeneratorHelper() {
2230
		return $this->query(\OC\Preview\GeneratorHelper::class);
2231
	}
2232
2233
	private function registerDeprecatedAlias(string $alias, string $target) {
2234
		$this->registerService($alias, function (IContainer $container) use ($target, $alias) {
2235
			try {
2236
				/** @var ILogger $logger */
2237
				$logger = $container->query(ILogger::class);
2238
				$logger->debug('The requested alias "' . $alias . '" is depreacted. Please request "' . $target . '" directly. This alias will be removed in a future Nextcloud version.', ['app' => 'serverDI']);
2239
			} catch (QueryException $e) {
2240
				// Could not get logger. Continue
2241
			}
2242
2243
			return $container->query($target);
2244
		}, false);
2245
	}
2246
}
2247