From f7729cdc403a8d4c5a4e9e75e3142bcb51b7250e Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sun, 10 Jan 2016 09:59:30 +0100 Subject: Add composers default autoloader to core This introduces the defacto standard PSR-4 autoloader from composer into core. This will allow proper PSR-4 naming of our classes. Since our original autoloader is still available we can slowly switch over classes to PSR-4. --- composer.json | 8 + lib/base.php | 3 + lib/composer/autoload.php | 7 + lib/composer/composer/ClassLoader.php | 413 ++++++++++++++++++++++++++ lib/composer/composer/LICENSE | 21 ++ lib/composer/composer/autoload_classmap.php | 9 + lib/composer/composer/autoload_namespaces.php | 9 + lib/composer/composer/autoload_psr4.php | 10 + lib/composer/composer/autoload_real.php | 45 +++ lib/composer/composer/installed.json | 1 + 10 files changed, 526 insertions(+) create mode 100644 composer.json create mode 100644 lib/composer/autoload.php create mode 100644 lib/composer/composer/ClassLoader.php create mode 100644 lib/composer/composer/LICENSE create mode 100644 lib/composer/composer/autoload_classmap.php create mode 100644 lib/composer/composer/autoload_namespaces.php create mode 100644 lib/composer/composer/autoload_psr4.php create mode 100644 lib/composer/composer/autoload_real.php create mode 100644 lib/composer/composer/installed.json diff --git a/composer.json b/composer.json new file mode 100644 index 00000000000..98fdb3aa31c --- /dev/null +++ b/composer.json @@ -0,0 +1,8 @@ +{ + "config" : { + "vendor-dir": "lib/composer" + }, + "autoload" : { + "psr-4": {"OC\\": "lib/private"} + } +} diff --git a/lib/base.php b/lib/base.php index 9db4a482f23..3e384f02a21 100644 --- a/lib/base.php +++ b/lib/base.php @@ -516,6 +516,9 @@ class OC { exit(); } + // Add default composer PSR-4 autoloader + require_once OC::$SERVERROOT . '/lib/composer/autoload.php'; + // setup the basic server self::$server = new \OC\Server(\OC::$WEBROOT, self::$config); \OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd); diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php new file mode 100644 index 00000000000..610dbf34bca --- /dev/null +++ b/lib/composer/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + + private $classMapAuthoritative = false; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 + if ('\\' == $class[0]) { + $class = substr($class, 1); + } + + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative) { + return false; + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if ($file === null && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if ($file === null) { + // Remember that this class does not exist. + return $this->classMap[$class] = false; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/lib/composer/composer/LICENSE b/lib/composer/composer/LICENSE new file mode 100644 index 00000000000..c8d57af8b27 --- /dev/null +++ b/lib/composer/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) 2015 Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php new file mode 100644 index 00000000000..71dd9c179b2 --- /dev/null +++ b/lib/composer/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($baseDir . '/lib/private'), +); diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php new file mode 100644 index 00000000000..5fbea76758b --- /dev/null +++ b/lib/composer/composer/autoload_real.php @@ -0,0 +1,45 @@ + $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + + $loader->register(true); + + return $loader; + } +} diff --git a/lib/composer/composer/installed.json b/lib/composer/composer/installed.json new file mode 100644 index 00000000000..fe51488c706 --- /dev/null +++ b/lib/composer/composer/installed.json @@ -0,0 +1 @@ +[] -- cgit v1.2.3 From d16b371e38af86af565156cbe703ad537cc0b963 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sun, 10 Jan 2016 10:20:33 +0100 Subject: POC for PSR-4 autoloader server.php => Server.php --- lib/private/Server.php | 1274 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/private/server.php | 1274 ------------------------------------------------ 2 files changed, 1274 insertions(+), 1274 deletions(-) create mode 100644 lib/private/Server.php delete mode 100644 lib/private/server.php diff --git a/lib/private/Server.php b/lib/private/Server.php new file mode 100644 index 00000000000..81187cdd715 --- /dev/null +++ b/lib/private/Server.php @@ -0,0 +1,1274 @@ + + * @author Bart Visscher + * @author Bernhard Posselt + * @author Bernhard Reiter + * @author Björn Schießle + * @author Christopher Schäpers + * @author Joas Schilling + * @author Jörn Friedrich Dreyer + * @author Lukas Reschke + * @author Morris Jobke + * @author Robin Appelman + * @author Robin McCorkell + * @author Roeland Jago Douma + * @author Sander + * @author Thomas Müller + * @author Thomas Tanghus + * @author Vincent Petry + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ +namespace OC; + +use bantu\IniGetWrapper\IniGetWrapper; +use OC\AppFramework\Http\Request; +use OC\AppFramework\Db\Db; +use OC\AppFramework\Utility\TimeFactory; +use OC\Command\AsyncBus; +use OC\Diagnostics\EventLogger; +use OC\Diagnostics\NullEventLogger; +use OC\Diagnostics\NullQueryLogger; +use OC\Diagnostics\QueryLogger; +use OC\Files\Config\UserMountCache; +use OC\Files\Config\UserMountCacheListener; +use OC\Files\Node\HookConnector; +use OC\Files\Node\Root; +use OC\Files\View; +use OC\Http\Client\ClientService; +use OC\IntegrityCheck\Checker; +use OC\IntegrityCheck\Helpers\AppLocator; +use OC\IntegrityCheck\Helpers\EnvironmentHelper; +use OC\IntegrityCheck\Helpers\FileAccessHelper; +use OC\Lock\DBLockingProvider; +use OC\Lock\MemcacheLockingProvider; +use OC\Lock\NoopLockingProvider; +use OC\Mail\Mailer; +use OC\Notification\Manager; +use OC\Security\CertificateManager; +use OC\Security\CSP\ContentSecurityPolicyManager; +use OC\Security\Crypto; +use OC\Security\CSRF\CsrfTokenGenerator; +use OC\Security\CSRF\CsrfTokenManager; +use OC\Security\CSRF\TokenStorage\SessionStorage; +use OC\Security\Hasher; +use OC\Security\CredentialsManager; +use OC\Security\SecureRandom; +use OC\Security\TrustedDomainHelper; +use OC\Session\CryptoWrapper; +use OC\Tagging\TagMapper; +use OCP\IServerContainer; +use OCP\Security\IContentSecurityPolicyManager; +use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + +/** + * Class Server + * + * @package OC + * + * TODO: hookup all manager classes + */ +class Server extends ServerContainer implements IServerContainer { + /** @var string */ + private $webRoot; + + /** + * @param string $webRoot + * @param \OC\Config $config + */ + public function __construct($webRoot, \OC\Config $config) { + parent::__construct(); + $this->webRoot = $webRoot; + + $this->registerService('ContactsManager', function ($c) { + return new ContactsManager(); + }); + + $this->registerService('PreviewManager', function (Server $c) { + return new PreviewManager($c->getConfig()); + }); + + $this->registerService('EncryptionManager', function (Server $c) { + $view = new View(); + $util = new Encryption\Util( + $view, + $c->getUserManager(), + $c->getGroupManager(), + $c->getConfig() + ); + return new Encryption\Manager( + $c->getConfig(), + $c->getLogger(), + $c->getL10N('core'), + new View(), + $util + ); + }); + + $this->registerService('EncryptionFileHelper', function (Server $c) { + $util = new Encryption\Util( + new View(), + $c->getUserManager(), + $c->getGroupManager(), + $c->getConfig() + ); + return new Encryption\File($util); + }); + + $this->registerService('EncryptionKeyStorage', function (Server $c) { + $view = new View(); + $util = new Encryption\Util( + $view, + $c->getUserManager(), + $c->getGroupManager(), + $c->getConfig() + ); + + return new Encryption\Keys\Storage($view, $util); + }); + $this->registerService('TagMapper', function (Server $c) { + return new TagMapper($c->getDatabaseConnection()); + }); + $this->registerService('TagManager', function (Server $c) { + $tagMapper = $c->query('TagMapper'); + return new TagManager($tagMapper, $c->getUserSession()); + }); + $this->registerService('SystemTagManagerFactory', function (Server $c) { + $config = $c->getConfig(); + $factoryClass = $config->getSystemValue('systemtags.managerFactory', '\OC\SystemTag\ManagerFactory'); + /** @var \OC\SystemTag\ManagerFactory $factory */ + $factory = new $factoryClass($this); + return $factory; + }); + $this->registerService('SystemTagManager', function (Server $c) { + return $c->query('SystemTagManagerFactory')->getManager(); + }); + $this->registerService('SystemTagObjectMapper', function (Server $c) { + return $c->query('SystemTagManagerFactory')->getObjectMapper(); + }); + $this->registerService('RootFolder', function () { + $manager = \OC\Files\Filesystem::getMountManager(null); + $view = new View(); + $root = new Root($manager, $view, null); + $connector = new HookConnector($root, $view); + $connector->viewToNode(); + return $root; + }); + $this->registerService('UserManager', function (Server $c) { + $config = $c->getConfig(); + return new \OC\User\Manager($config); + }); + $this->registerService('GroupManager', function (Server $c) { + $groupManager = new \OC\Group\Manager($this->getUserManager()); + $groupManager->listen('\OC\Group', 'preCreate', function ($gid) { + \OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid)); + }); + $groupManager->listen('\OC\Group', 'postCreate', function (\OC\Group\Group $gid) { + \OC_Hook::emit('OC_User', 'post_createGroup', array('gid' => $gid->getGID())); + }); + $groupManager->listen('\OC\Group', 'preDelete', function (\OC\Group\Group $group) { + \OC_Hook::emit('OC_Group', 'pre_deleteGroup', array('run' => true, 'gid' => $group->getGID())); + }); + $groupManager->listen('\OC\Group', 'postDelete', function (\OC\Group\Group $group) { + \OC_Hook::emit('OC_User', 'post_deleteGroup', array('gid' => $group->getGID())); + }); + $groupManager->listen('\OC\Group', 'preAddUser', function (\OC\Group\Group $group, \OC\User\User $user) { + \OC_Hook::emit('OC_Group', 'pre_addToGroup', array('run' => true, 'uid' => $user->getUID(), 'gid' => $group->getGID())); + }); + $groupManager->listen('\OC\Group', 'postAddUser', function (\OC\Group\Group $group, \OC\User\User $user) { + \OC_Hook::emit('OC_Group', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID())); + //Minimal fix to keep it backward compatible TODO: clean up all the GroupManager hooks + \OC_Hook::emit('OC_User', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID())); + }); + return $groupManager; + }); + $this->registerService('UserSession', function (Server $c) { + $manager = $c->getUserManager(); + + $session = new \OC\Session\Memory(''); + + $userSession = new \OC\User\Session($manager, $session); + $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) { + \OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password)); + }); + $userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password)); + }); + $userSession->listen('\OC\User', 'preDelete', function ($user) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID())); + }); + $userSession->listen('\OC\User', 'postDelete', function ($user) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID())); + }); + $userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword)); + }); + $userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword)); + }); + $userSession->listen('\OC\User', 'preLogin', function ($uid, $password) { + \OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password)); + }); + $userSession->listen('\OC\User', 'postLogin', function ($user, $password) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password)); + }); + $userSession->listen('\OC\User', 'logout', function () { + \OC_Hook::emit('OC_User', 'logout', array()); + }); + $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value) { + /** @var $user \OC\User\User */ + \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value)); + }); + return $userSession; + }); + $this->registerService('NavigationManager', function ($c) { + return new \OC\NavigationManager(); + }); + $this->registerService('AllConfig', function (Server $c) { + return new \OC\AllConfig( + $c->getSystemConfig() + ); + }); + $this->registerService('SystemConfig', function ($c) use ($config) { + return new \OC\SystemConfig($config); + }); + $this->registerService('AppConfig', function (Server $c) { + return new \OC\AppConfig($c->getDatabaseConnection()); + }); + $this->registerService('L10NFactory', function (Server $c) { + return new \OC\L10N\Factory( + $c->getConfig(), + $c->getRequest(), + $c->getUserSession() + ); + }); + $this->registerService('URLGenerator', function (Server $c) { + $config = $c->getConfig(); + $cacheFactory = $c->getMemCacheFactory(); + return new \OC\URLGenerator( + $config, + $cacheFactory + ); + }); + $this->registerService('AppHelper', function ($c) { + return new \OC\AppHelper(); + }); + $this->registerService('UserCache', function ($c) { + return new Cache\File(); + }); + $this->registerService('MemCacheFactory', function (Server $c) { + $config = $c->getConfig(); + + if ($config->getSystemValue('installed', false) && !(defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { + $v = \OC_App::getAppVersions(); + $v['core'] = md5(file_get_contents(\OC::$SERVERROOT . '/version.php')); + $version = implode(',', $v); + $instanceId = \OC_Util::getInstanceId(); + $path = \OC::$SERVERROOT; + $prefix = md5($instanceId . '-' . $version . '-' . $path); + return new \OC\Memcache\Factory($prefix, $c->getLogger(), + $config->getSystemValue('memcache.local', null), + $config->getSystemValue('memcache.distributed', null), + $config->getSystemValue('memcache.locking', null) + ); + } + + return new \OC\Memcache\Factory('', $c->getLogger(), + '\\OC\\Memcache\\ArrayCache', + '\\OC\\Memcache\\ArrayCache', + '\\OC\\Memcache\\ArrayCache' + ); + }); + $this->registerService('ActivityManager', function (Server $c) { + return new ActivityManager( + $c->getRequest(), + $c->getUserSession(), + $c->getConfig() + ); + }); + $this->registerService('AvatarManager', function (Server $c) { + return new AvatarManager( + $c->getUserManager(), + $c->getRootFolder(), + $c->getL10N('lib') + ); + }); + $this->registerService('Logger', function (Server $c) { + $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud'); + $logger = 'OC_Log_' . ucfirst($logClass); + call_user_func(array($logger, 'init')); + + return new Log($logger); + }); + $this->registerService('JobList', function (Server $c) { + $config = $c->getConfig(); + return new \OC\BackgroundJob\JobList($c->getDatabaseConnection(), $config); + }); + $this->registerService('Router', function (Server $c) { + $cacheFactory = $c->getMemCacheFactory(); + $logger = $c->getLogger(); + if ($cacheFactory->isAvailable()) { + $router = new \OC\Route\CachingRouter($cacheFactory->create('route'), $logger); + } else { + $router = new \OC\Route\Router($logger); + } + return $router; + }); + $this->registerService('Search', function ($c) { + return new Search(); + }); + $this->registerService('SecureRandom', function ($c) { + return new SecureRandom(); + }); + $this->registerService('Crypto', function (Server $c) { + return new Crypto($c->getConfig(), $c->getSecureRandom()); + }); + $this->registerService('Hasher', function (Server $c) { + return new Hasher($c->getConfig()); + }); + $this->registerService('CredentialsManager', function (Server $c) { + return new CredentialsManager($c->getCrypto(), $c->getDatabaseConnection()); + }); + $this->registerService('DatabaseConnection', function (Server $c) { + $factory = new \OC\DB\ConnectionFactory(); + $systemConfig = $c->getSystemConfig(); + $type = $systemConfig->getValue('dbtype', 'sqlite'); + if (!$factory->isValidType($type)) { + throw new \OC\DatabaseException('Invalid database type'); + } + $connectionParams = $factory->createConnectionParams($systemConfig); + $connection = $factory->getConnection($type, $connectionParams); + $connection->getConfiguration()->setSQLLogger($c->getQueryLogger()); + return $connection; + }); + $this->registerService('Db', function (Server $c) { + return new Db($c->getDatabaseConnection()); + }); + $this->registerService('HTTPHelper', function (Server $c) { + $config = $c->getConfig(); + return new HTTPHelper( + $config, + $c->getHTTPClientService() + ); + }); + $this->registerService('HttpClientService', function (Server $c) { + $user = \OC_User::getUser(); + $uid = $user ? $user : null; + return new ClientService( + $c->getConfig(), + new \OC\Security\CertificateManager($uid, new View(), $c->getConfig()) + ); + }); + $this->registerService('EventLogger', function (Server $c) { + if ($c->getSystemConfig()->getValue('debug', false)) { + return new EventLogger(); + } else { + return new NullEventLogger(); + } + }); + $this->registerService('QueryLogger', function (Server $c) { + if ($c->getSystemConfig()->getValue('debug', false)) { + return new QueryLogger(); + } else { + return new NullQueryLogger(); + } + }); + $this->registerService('TempManager', function (Server $c) { + return new TempManager( + $c->getLogger(), + $c->getConfig() + ); + }); + $this->registerService('AppManager', function (Server $c) { + return new \OC\App\AppManager( + $c->getUserSession(), + $c->getAppConfig(), + $c->getGroupManager(), + $c->getMemCacheFactory(), + $c->getEventDispatcher() + ); + }); + $this->registerService('DateTimeZone', function (Server $c) { + return new DateTimeZone( + $c->getConfig(), + $c->getSession() + ); + }); + $this->registerService('DateTimeFormatter', function (Server $c) { + $language = $c->getConfig()->getUserValue($c->getSession()->get('user_id'), 'core', 'lang', null); + + return new DateTimeFormatter( + $c->getDateTimeZone()->getTimeZone(), + $c->getL10N('lib', $language) + ); + }); + $this->registerService('UserMountCache', function (Server $c) { + $mountCache = new UserMountCache($c->getDatabaseConnection(), $c->getUserManager(), $c->getLogger()); + $listener = new UserMountCacheListener($mountCache); + $listener->listen($c->getUserManager()); + return $mountCache; + }); + $this->registerService('MountConfigManager', function (Server $c) { + $loader = \OC\Files\Filesystem::getLoader(); + $mountCache = $c->query('UserMountCache'); + return new \OC\Files\Config\MountProviderCollection($loader, $mountCache); + }); + $this->registerService('IniWrapper', function ($c) { + return new IniGetWrapper(); + }); + $this->registerService('AsyncCommandBus', function (Server $c) { + $jobList = $c->getJobList(); + return new AsyncBus($jobList); + }); + $this->registerService('TrustedDomainHelper', function ($c) { + return new TrustedDomainHelper($this->getConfig()); + }); + $this->registerService('IntegrityCodeChecker', function (Server $c) { + // IConfig and IAppManager requires a working database. This code + // might however be called when ownCloud is not yet setup. + if(\OC::$server->getSystemConfig()->getValue('installed', false)) { + $config = $c->getConfig(); + $appManager = $c->getAppManager(); + } else { + $config = null; + $appManager = null; + } + + return new Checker( + new EnvironmentHelper(), + new FileAccessHelper(), + new AppLocator(), + $config, + $c->getMemCacheFactory(), + $appManager + ); + }); + $this->registerService('Request', function ($c) { + if (isset($this['urlParams'])) { + $urlParams = $this['urlParams']; + } else { + $urlParams = []; + } + + if (defined('PHPUNIT_RUN') && PHPUNIT_RUN + && in_array('fakeinput', stream_get_wrappers()) + ) { + $stream = 'fakeinput://data'; + } else { + $stream = 'php://input'; + } + + return new Request( + [ + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'server' => $_SERVER, + 'env' => $_ENV, + 'cookies' => $_COOKIE, + 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) + ? $_SERVER['REQUEST_METHOD'] + : null, + 'urlParams' => $urlParams, + ], + $this->getSecureRandom(), + $this->getConfig(), + $this->getCsrfTokenManager(), + $stream + ); + }); + $this->registerService('Mailer', function (Server $c) { + return new Mailer( + $c->getConfig(), + $c->getLogger(), + new \OC_Defaults() + ); + }); + $this->registerService('OcsClient', function (Server $c) { + return new OCSClient( + $this->getHTTPClientService(), + $this->getConfig(), + $this->getLogger() + ); + }); + $this->registerService('LockingProvider', function (Server $c) { + if ($c->getConfig()->getSystemValue('filelocking.enabled', true) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { + /** @var \OC\Memcache\Factory $memcacheFactory */ + $memcacheFactory = $c->getMemCacheFactory(); + $memcache = $memcacheFactory->createLocking('lock'); + if (!($memcache instanceof \OC\Memcache\NullCache)) { + return new MemcacheLockingProvider($memcache); + } + return new DBLockingProvider($c->getDatabaseConnection(), $c->getLogger(), new TimeFactory()); + } + return new NoopLockingProvider(); + }); + $this->registerService('MountManager', function () { + return new \OC\Files\Mount\Manager(); + }); + $this->registerService('MimeTypeDetector', function (Server $c) { + return new \OC\Files\Type\Detection( + $c->getURLGenerator(), + \OC::$SERVERROOT . '/config/', + \OC::$SERVERROOT . '/resources/config/' + ); + }); + $this->registerService('MimeTypeLoader', function (Server $c) { + return new \OC\Files\Type\Loader( + $c->getDatabaseConnection() + ); + }); + $this->registerService('NotificationManager', function () { + return new Manager(); + }); + $this->registerService('CapabilitiesManager', function (Server $c) { + $manager = new \OC\CapabilitiesManager(); + $manager->registerCapability(function () use ($c) { + return new \OC\OCS\CoreCapabilities($c->getConfig()); + }); + return $manager; + }); + $this->registerService('CommentsManager', function(Server $c) { + $config = $c->getConfig(); + $factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory'); + /** @var \OCP\Comments\ICommentsManagerFactory $factory */ + $factory = new $factoryClass($this); + return $factory->getManager(); + }); + $this->registerService('EventDispatcher', function () { + return new EventDispatcher(); + }); + $this->registerService('CryptoWrapper', function (Server $c) { + // FIXME: Instantiiated here due to cyclic dependency + $request = new Request( + [ + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'server' => $_SERVER, + 'env' => $_ENV, + 'cookies' => $_COOKIE, + 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) + ? $_SERVER['REQUEST_METHOD'] + : null, + ], + $c->getSecureRandom(), + $c->getConfig() + ); + + return new CryptoWrapper( + $c->getConfig(), + $c->getCrypto(), + $c->getSecureRandom(), + $request + ); + }); + $this->registerService('CsrfTokenManager', function (Server $c) { + $tokenGenerator = new CsrfTokenGenerator($c->getSecureRandom()); + $sessionStorage = new SessionStorage($c->getSession()); + + return new CsrfTokenManager( + $tokenGenerator, + $sessionStorage + ); + }); + $this->registerService('ContentSecurityPolicyManager', function (Server $c) { + return new ContentSecurityPolicyManager(); + }); + $this->registerService('ShareManager', function(Server $c) { + $config = $c->getConfig(); + $factoryClass = $config->getSystemValue('sharing.managerFactory', '\OC\Share20\ProviderFactory'); + /** @var \OC\Share20\IProviderFactory $factory */ + $factory = new $factoryClass($this); + + $manager = new \OC\Share20\Manager( + $c->getLogger(), + $c->getConfig(), + $c->getSecureRandom(), + $c->getHasher(), + $c->getMountManager(), + $c->getGroupManager(), + $c->getL10N('core'), + $factory, + $c->getUserManager(), + $c->getRootFolder() + ); + + return $manager; + }); + } + + /** + * @return \OCP\Contacts\IManager + */ + public function getContactsManager() { + return $this->query('ContactsManager'); + } + + /** + * @return \OC\Encryption\Manager + */ + public function getEncryptionManager() { + return $this->query('EncryptionManager'); + } + + /** + * @return \OC\Encryption\File + */ + public function getEncryptionFilesHelper() { + return $this->query('EncryptionFileHelper'); + } + + /** + * @return \OCP\Encryption\Keys\IStorage + */ + public function getEncryptionKeyStorage() { + return $this->query('EncryptionKeyStorage'); + } + + /** + * The current request object holding all information about the request + * currently being processed is returned from this method. + * In case the current execution was not initiated by a web request null is returned + * + * @return \OCP\IRequest + */ + public function getRequest() { + return $this->query('Request'); + } + + /** + * Returns the preview manager which can create preview images for a given file + * + * @return \OCP\IPreview + */ + public function getPreviewManager() { + return $this->query('PreviewManager'); + } + + /** + * Returns the tag manager which can get and set tags for different object types + * + * @see \OCP\ITagManager::load() + * @return \OCP\ITagManager + */ + public function getTagManager() { + return $this->query('TagManager'); + } + + /** + * Returns the system-tag manager + * + * @return \OCP\SystemTag\ISystemTagManager + * + * @since 9.0.0 + */ + public function getSystemTagManager() { + return $this->query('SystemTagManager'); + } + + /** + * Returns the system-tag object mapper + * + * @return \OCP\SystemTag\ISystemTagObjectMapper + * + * @since 9.0.0 + */ + public function getSystemTagObjectMapper() { + return $this->query('SystemTagObjectMapper'); + } + + + /** + * Returns the avatar manager, used for avatar functionality + * + * @return \OCP\IAvatarManager + */ + public function getAvatarManager() { + return $this->query('AvatarManager'); + } + + /** + * Returns the root folder of ownCloud's data directory + * + * @return \OCP\Files\IRootFolder + */ + public function getRootFolder() { + return $this->query('RootFolder'); + } + + /** + * Returns a view to ownCloud's files folder + * + * @param string $userId user ID + * @return \OCP\Files\Folder|null + */ + public function getUserFolder($userId = null) { + if ($userId === null) { + $user = $this->getUserSession()->getUser(); + if (!$user) { + return null; + } + $userId = $user->getUID(); + } + $root = $this->getRootFolder(); + return $root->getUserFolder($userId); + } + + /** + * Returns an app-specific view in ownClouds data directory + * + * @return \OCP\Files\Folder + */ + public function getAppFolder() { + $dir = '/' . \OC_App::getCurrentApp(); + $root = $this->getRootFolder(); + if (!$root->nodeExists($dir)) { + $folder = $root->newFolder($dir); + } else { + $folder = $root->get($dir); + } + return $folder; + } + + /** + * @return \OC\User\Manager + */ + public function getUserManager() { + return $this->query('UserManager'); + } + + /** + * @return \OC\Group\Manager + */ + public function getGroupManager() { + return $this->query('GroupManager'); + } + + /** + * @return \OC\User\Session + */ + public function getUserSession() { + return $this->query('UserSession'); + } + + /** + * @return \OCP\ISession + */ + public function getSession() { + return $this->query('UserSession')->getSession(); + } + + /** + * @param \OCP\ISession $session + */ + public function setSession(\OCP\ISession $session) { + return $this->query('UserSession')->setSession($session); + } + + /** + * @return \OC\NavigationManager + */ + public function getNavigationManager() { + return $this->query('NavigationManager'); + } + + /** + * @return \OCP\IConfig + */ + public function getConfig() { + return $this->query('AllConfig'); + } + + /** + * For internal use only + * + * @return \OC\SystemConfig + */ + public function getSystemConfig() { + return $this->query('SystemConfig'); + } + + /** + * Returns the app config manager + * + * @return \OCP\IAppConfig + */ + public function getAppConfig() { + return $this->query('AppConfig'); + } + + /** + * @return \OCP\L10N\IFactory + */ + public function getL10NFactory() { + return $this->query('L10NFactory'); + } + + /** + * get an L10N instance + * + * @param string $app appid + * @param string $lang + * @return \OC_L10N + */ + public function getL10N($app, $lang = null) { + return $this->getL10NFactory()->get($app, $lang); + } + + /** + * @return \OCP\IURLGenerator + */ + public function getURLGenerator() { + return $this->query('URLGenerator'); + } + + /** + * @return \OCP\IHelper + */ + public function getHelper() { + return $this->query('AppHelper'); + } + + /** + * Returns an ICache instance. Since 8.1.0 it returns a fake cache. Use + * getMemCacheFactory() instead. + * + * @return \OCP\ICache + * @deprecated 8.1.0 use getMemCacheFactory to obtain a proper cache + */ + public function getCache() { + return $this->query('UserCache'); + } + + /** + * Returns an \OCP\CacheFactory instance + * + * @return \OCP\ICacheFactory + */ + public function getMemCacheFactory() { + return $this->query('MemCacheFactory'); + } + + /** + * Returns the current session + * + * @return \OCP\IDBConnection + */ + public function getDatabaseConnection() { + return $this->query('DatabaseConnection'); + } + + /** + * Returns the activity manager + * + * @return \OCP\Activity\IManager + */ + public function getActivityManager() { + return $this->query('ActivityManager'); + } + + /** + * Returns an job list for controlling background jobs + * + * @return \OCP\BackgroundJob\IJobList + */ + public function getJobList() { + return $this->query('JobList'); + } + + /** + * Returns a logger instance + * + * @return \OCP\ILogger + */ + public function getLogger() { + return $this->query('Logger'); + } + + /** + * Returns a router for generating and matching urls + * + * @return \OCP\Route\IRouter + */ + public function getRouter() { + return $this->query('Router'); + } + + /** + * Returns a search instance + * + * @return \OCP\ISearch + */ + public function getSearch() { + return $this->query('Search'); + } + + /** + * Returns a SecureRandom instance + * + * @return \OCP\Security\ISecureRandom + */ + public function getSecureRandom() { + return $this->query('SecureRandom'); + } + + /** + * Returns a Crypto instance + * + * @return \OCP\Security\ICrypto + */ + public function getCrypto() { + return $this->query('Crypto'); + } + + /** + * Returns a Hasher instance + * + * @return \OCP\Security\IHasher + */ + public function getHasher() { + return $this->query('Hasher'); + } + + /** + * Returns a CredentialsManager instance + * + * @return \OCP\Security\ICredentialsManager + */ + public function getCredentialsManager() { + return $this->query('CredentialsManager'); + } + + /** + * Returns an instance of the db facade + * + * @deprecated use getDatabaseConnection, will be removed in ownCloud 10 + * @return \OCP\IDb + */ + public function getDb() { + return $this->query('Db'); + } + + /** + * Returns an instance of the HTTP helper class + * + * @deprecated Use getHTTPClientService() + * @return \OC\HTTPHelper + */ + public function getHTTPHelper() { + return $this->query('HTTPHelper'); + } + + /** + * Get the certificate manager for the user + * + * @param string $userId (optional) if not specified the current loggedin user is used, use null to get the system certificate manager + * @return \OCP\ICertificateManager | null if $uid is null and no user is logged in + */ + public function getCertificateManager($userId = '') { + if ($userId === '') { + $userSession = $this->getUserSession(); + $user = $userSession->getUser(); + if (is_null($user)) { + return null; + } + $userId = $user->getUID(); + } + return new CertificateManager($userId, new View(), $this->getConfig()); + } + + /** + * Returns an instance of the HTTP client service + * + * @return \OCP\Http\Client\IClientService + */ + public function getHTTPClientService() { + return $this->query('HttpClientService'); + } + + /** + * Create a new event source + * + * @return \OCP\IEventSource + */ + public function createEventSource() { + return new \OC_EventSource(); + } + + /** + * Get the active event logger + * + * The returned logger only logs data when debug mode is enabled + * + * @return \OCP\Diagnostics\IEventLogger + */ + public function getEventLogger() { + return $this->query('EventLogger'); + } + + /** + * Get the active query logger + * + * The returned logger only logs data when debug mode is enabled + * + * @return \OCP\Diagnostics\IQueryLogger + */ + public function getQueryLogger() { + return $this->query('QueryLogger'); + } + + /** + * Get the manager for temporary files and folders + * + * @return \OCP\ITempManager + */ + public function getTempManager() { + return $this->query('TempManager'); + } + + /** + * Get the app manager + * + * @return \OCP\App\IAppManager + */ + public function getAppManager() { + return $this->query('AppManager'); + } + + /** + * Creates a new mailer + * + * @return \OCP\Mail\IMailer + */ + public function getMailer() { + return $this->query('Mailer'); + } + + /** + * Get the webroot + * + * @return string + */ + public function getWebRoot() { + return $this->webRoot; + } + + /** + * @return \OC\OCSClient + */ + public function getOcsClient() { + return $this->query('OcsClient'); + } + + /** + * @return \OCP\IDateTimeZone + */ + public function getDateTimeZone() { + return $this->query('DateTimeZone'); + } + + /** + * @return \OCP\IDateTimeFormatter + */ + public function getDateTimeFormatter() { + return $this->query('DateTimeFormatter'); + } + + /** + * @return \OCP\Files\Config\IMountProviderCollection + */ + public function getMountProviderCollection() { + return $this->query('MountConfigManager'); + } + + /** + * Get the IniWrapper + * + * @return IniGetWrapper + */ + public function getIniWrapper() { + return $this->query('IniWrapper'); + } + + /** + * @return \OCP\Command\IBus + */ + public function getCommandBus() { + return $this->query('AsyncCommandBus'); + } + + /** + * Get the trusted domain helper + * + * @return TrustedDomainHelper + */ + public function getTrustedDomainHelper() { + return $this->query('TrustedDomainHelper'); + } + + /** + * Get the locking provider + * + * @return \OCP\Lock\ILockingProvider + * @since 8.1.0 + */ + public function getLockingProvider() { + return $this->query('LockingProvider'); + } + + /** + * @return \OCP\Files\Mount\IMountManager + **/ + function getMountManager() { + return $this->query('MountManager'); + } + + /* + * Get the MimeTypeDetector + * + * @return \OCP\Files\IMimeTypeDetector + */ + public function getMimeTypeDetector() { + return $this->query('MimeTypeDetector'); + } + + /** + * Get the MimeTypeLoader + * + * @return \OCP\Files\IMimeTypeLoader + */ + public function getMimeTypeLoader() { + return $this->query('MimeTypeLoader'); + } + + /** + * Get the manager of all the capabilities + * + * @return \OC\CapabilitiesManager + */ + public function getCapabilitiesManager() { + return $this->query('CapabilitiesManager'); + } + + /** + * Get the EventDispatcher + * + * @return EventDispatcherInterface + * @since 8.2.0 + */ + public function getEventDispatcher() { + return $this->query('EventDispatcher'); + } + + /** + * Get the Notification Manager + * + * @return \OCP\Notification\IManager + * @since 8.2.0 + */ + public function getNotificationManager() { + return $this->query('NotificationManager'); + } + + /** + * @return \OCP\Comments\ICommentsManager + */ + public function getCommentsManager() { + return $this->query('CommentsManager'); + } + + /** + * @return \OC\IntegrityCheck\Checker + */ + public function getIntegrityCodeChecker() { + return $this->query('IntegrityCodeChecker'); + } + + /** + * @return \OC\Session\CryptoWrapper + */ + public function getSessionCryptoWrapper() { + return $this->query('CryptoWrapper'); + } + + /** + * @return CsrfTokenManager + */ + public function getCsrfTokenManager() { + return $this->query('CsrfTokenManager'); + } + + /** + * @return IContentSecurityPolicyManager + */ + public function getContentSecurityPolicyManager() { + return $this->query('ContentSecurityPolicyManager'); + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\BackendService + */ + public function getStoragesBackendService() { + return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\BackendService'); + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\GlobalStoragesService + */ + public function getGlobalStoragesService() { + return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\GlobalStoragesService'); + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\UserGlobalStoragesService + */ + public function getUserGlobalStoragesService() { + return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserGlobalStoragesService'); + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\UserStoragesService + */ + public function getUserStoragesService() { + return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserStoragesService'); + } + + /** + * @return \OCP\Share\IManager + */ + public function getShareManager() { + return $this->query('ShareManager'); + } + +} diff --git a/lib/private/server.php b/lib/private/server.php deleted file mode 100644 index 81187cdd715..00000000000 --- a/lib/private/server.php +++ /dev/null @@ -1,1274 +0,0 @@ - - * @author Bart Visscher - * @author Bernhard Posselt - * @author Bernhard Reiter - * @author Björn Schießle - * @author Christopher Schäpers - * @author Joas Schilling - * @author Jörn Friedrich Dreyer - * @author Lukas Reschke - * @author Morris Jobke - * @author Robin Appelman - * @author Robin McCorkell - * @author Roeland Jago Douma - * @author Sander - * @author Thomas Müller - * @author Thomas Tanghus - * @author Vincent Petry - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see - * - */ -namespace OC; - -use bantu\IniGetWrapper\IniGetWrapper; -use OC\AppFramework\Http\Request; -use OC\AppFramework\Db\Db; -use OC\AppFramework\Utility\TimeFactory; -use OC\Command\AsyncBus; -use OC\Diagnostics\EventLogger; -use OC\Diagnostics\NullEventLogger; -use OC\Diagnostics\NullQueryLogger; -use OC\Diagnostics\QueryLogger; -use OC\Files\Config\UserMountCache; -use OC\Files\Config\UserMountCacheListener; -use OC\Files\Node\HookConnector; -use OC\Files\Node\Root; -use OC\Files\View; -use OC\Http\Client\ClientService; -use OC\IntegrityCheck\Checker; -use OC\IntegrityCheck\Helpers\AppLocator; -use OC\IntegrityCheck\Helpers\EnvironmentHelper; -use OC\IntegrityCheck\Helpers\FileAccessHelper; -use OC\Lock\DBLockingProvider; -use OC\Lock\MemcacheLockingProvider; -use OC\Lock\NoopLockingProvider; -use OC\Mail\Mailer; -use OC\Notification\Manager; -use OC\Security\CertificateManager; -use OC\Security\CSP\ContentSecurityPolicyManager; -use OC\Security\Crypto; -use OC\Security\CSRF\CsrfTokenGenerator; -use OC\Security\CSRF\CsrfTokenManager; -use OC\Security\CSRF\TokenStorage\SessionStorage; -use OC\Security\Hasher; -use OC\Security\CredentialsManager; -use OC\Security\SecureRandom; -use OC\Security\TrustedDomainHelper; -use OC\Session\CryptoWrapper; -use OC\Tagging\TagMapper; -use OCP\IServerContainer; -use OCP\Security\IContentSecurityPolicyManager; -use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; - -/** - * Class Server - * - * @package OC - * - * TODO: hookup all manager classes - */ -class Server extends ServerContainer implements IServerContainer { - /** @var string */ - private $webRoot; - - /** - * @param string $webRoot - * @param \OC\Config $config - */ - public function __construct($webRoot, \OC\Config $config) { - parent::__construct(); - $this->webRoot = $webRoot; - - $this->registerService('ContactsManager', function ($c) { - return new ContactsManager(); - }); - - $this->registerService('PreviewManager', function (Server $c) { - return new PreviewManager($c->getConfig()); - }); - - $this->registerService('EncryptionManager', function (Server $c) { - $view = new View(); - $util = new Encryption\Util( - $view, - $c->getUserManager(), - $c->getGroupManager(), - $c->getConfig() - ); - return new Encryption\Manager( - $c->getConfig(), - $c->getLogger(), - $c->getL10N('core'), - new View(), - $util - ); - }); - - $this->registerService('EncryptionFileHelper', function (Server $c) { - $util = new Encryption\Util( - new View(), - $c->getUserManager(), - $c->getGroupManager(), - $c->getConfig() - ); - return new Encryption\File($util); - }); - - $this->registerService('EncryptionKeyStorage', function (Server $c) { - $view = new View(); - $util = new Encryption\Util( - $view, - $c->getUserManager(), - $c->getGroupManager(), - $c->getConfig() - ); - - return new Encryption\Keys\Storage($view, $util); - }); - $this->registerService('TagMapper', function (Server $c) { - return new TagMapper($c->getDatabaseConnection()); - }); - $this->registerService('TagManager', function (Server $c) { - $tagMapper = $c->query('TagMapper'); - return new TagManager($tagMapper, $c->getUserSession()); - }); - $this->registerService('SystemTagManagerFactory', function (Server $c) { - $config = $c->getConfig(); - $factoryClass = $config->getSystemValue('systemtags.managerFactory', '\OC\SystemTag\ManagerFactory'); - /** @var \OC\SystemTag\ManagerFactory $factory */ - $factory = new $factoryClass($this); - return $factory; - }); - $this->registerService('SystemTagManager', function (Server $c) { - return $c->query('SystemTagManagerFactory')->getManager(); - }); - $this->registerService('SystemTagObjectMapper', function (Server $c) { - return $c->query('SystemTagManagerFactory')->getObjectMapper(); - }); - $this->registerService('RootFolder', function () { - $manager = \OC\Files\Filesystem::getMountManager(null); - $view = new View(); - $root = new Root($manager, $view, null); - $connector = new HookConnector($root, $view); - $connector->viewToNode(); - return $root; - }); - $this->registerService('UserManager', function (Server $c) { - $config = $c->getConfig(); - return new \OC\User\Manager($config); - }); - $this->registerService('GroupManager', function (Server $c) { - $groupManager = new \OC\Group\Manager($this->getUserManager()); - $groupManager->listen('\OC\Group', 'preCreate', function ($gid) { - \OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid)); - }); - $groupManager->listen('\OC\Group', 'postCreate', function (\OC\Group\Group $gid) { - \OC_Hook::emit('OC_User', 'post_createGroup', array('gid' => $gid->getGID())); - }); - $groupManager->listen('\OC\Group', 'preDelete', function (\OC\Group\Group $group) { - \OC_Hook::emit('OC_Group', 'pre_deleteGroup', array('run' => true, 'gid' => $group->getGID())); - }); - $groupManager->listen('\OC\Group', 'postDelete', function (\OC\Group\Group $group) { - \OC_Hook::emit('OC_User', 'post_deleteGroup', array('gid' => $group->getGID())); - }); - $groupManager->listen('\OC\Group', 'preAddUser', function (\OC\Group\Group $group, \OC\User\User $user) { - \OC_Hook::emit('OC_Group', 'pre_addToGroup', array('run' => true, 'uid' => $user->getUID(), 'gid' => $group->getGID())); - }); - $groupManager->listen('\OC\Group', 'postAddUser', function (\OC\Group\Group $group, \OC\User\User $user) { - \OC_Hook::emit('OC_Group', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID())); - //Minimal fix to keep it backward compatible TODO: clean up all the GroupManager hooks - \OC_Hook::emit('OC_User', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID())); - }); - return $groupManager; - }); - $this->registerService('UserSession', function (Server $c) { - $manager = $c->getUserManager(); - - $session = new \OC\Session\Memory(''); - - $userSession = new \OC\User\Session($manager, $session); - $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) { - \OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password)); - }); - $userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password)); - }); - $userSession->listen('\OC\User', 'preDelete', function ($user) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID())); - }); - $userSession->listen('\OC\User', 'postDelete', function ($user) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID())); - }); - $userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword)); - }); - $userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword)); - }); - $userSession->listen('\OC\User', 'preLogin', function ($uid, $password) { - \OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password)); - }); - $userSession->listen('\OC\User', 'postLogin', function ($user, $password) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password)); - }); - $userSession->listen('\OC\User', 'logout', function () { - \OC_Hook::emit('OC_User', 'logout', array()); - }); - $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value) { - /** @var $user \OC\User\User */ - \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value)); - }); - return $userSession; - }); - $this->registerService('NavigationManager', function ($c) { - return new \OC\NavigationManager(); - }); - $this->registerService('AllConfig', function (Server $c) { - return new \OC\AllConfig( - $c->getSystemConfig() - ); - }); - $this->registerService('SystemConfig', function ($c) use ($config) { - return new \OC\SystemConfig($config); - }); - $this->registerService('AppConfig', function (Server $c) { - return new \OC\AppConfig($c->getDatabaseConnection()); - }); - $this->registerService('L10NFactory', function (Server $c) { - return new \OC\L10N\Factory( - $c->getConfig(), - $c->getRequest(), - $c->getUserSession() - ); - }); - $this->registerService('URLGenerator', function (Server $c) { - $config = $c->getConfig(); - $cacheFactory = $c->getMemCacheFactory(); - return new \OC\URLGenerator( - $config, - $cacheFactory - ); - }); - $this->registerService('AppHelper', function ($c) { - return new \OC\AppHelper(); - }); - $this->registerService('UserCache', function ($c) { - return new Cache\File(); - }); - $this->registerService('MemCacheFactory', function (Server $c) { - $config = $c->getConfig(); - - if ($config->getSystemValue('installed', false) && !(defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { - $v = \OC_App::getAppVersions(); - $v['core'] = md5(file_get_contents(\OC::$SERVERROOT . '/version.php')); - $version = implode(',', $v); - $instanceId = \OC_Util::getInstanceId(); - $path = \OC::$SERVERROOT; - $prefix = md5($instanceId . '-' . $version . '-' . $path); - return new \OC\Memcache\Factory($prefix, $c->getLogger(), - $config->getSystemValue('memcache.local', null), - $config->getSystemValue('memcache.distributed', null), - $config->getSystemValue('memcache.locking', null) - ); - } - - return new \OC\Memcache\Factory('', $c->getLogger(), - '\\OC\\Memcache\\ArrayCache', - '\\OC\\Memcache\\ArrayCache', - '\\OC\\Memcache\\ArrayCache' - ); - }); - $this->registerService('ActivityManager', function (Server $c) { - return new ActivityManager( - $c->getRequest(), - $c->getUserSession(), - $c->getConfig() - ); - }); - $this->registerService('AvatarManager', function (Server $c) { - return new AvatarManager( - $c->getUserManager(), - $c->getRootFolder(), - $c->getL10N('lib') - ); - }); - $this->registerService('Logger', function (Server $c) { - $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud'); - $logger = 'OC_Log_' . ucfirst($logClass); - call_user_func(array($logger, 'init')); - - return new Log($logger); - }); - $this->registerService('JobList', function (Server $c) { - $config = $c->getConfig(); - return new \OC\BackgroundJob\JobList($c->getDatabaseConnection(), $config); - }); - $this->registerService('Router', function (Server $c) { - $cacheFactory = $c->getMemCacheFactory(); - $logger = $c->getLogger(); - if ($cacheFactory->isAvailable()) { - $router = new \OC\Route\CachingRouter($cacheFactory->create('route'), $logger); - } else { - $router = new \OC\Route\Router($logger); - } - return $router; - }); - $this->registerService('Search', function ($c) { - return new Search(); - }); - $this->registerService('SecureRandom', function ($c) { - return new SecureRandom(); - }); - $this->registerService('Crypto', function (Server $c) { - return new Crypto($c->getConfig(), $c->getSecureRandom()); - }); - $this->registerService('Hasher', function (Server $c) { - return new Hasher($c->getConfig()); - }); - $this->registerService('CredentialsManager', function (Server $c) { - return new CredentialsManager($c->getCrypto(), $c->getDatabaseConnection()); - }); - $this->registerService('DatabaseConnection', function (Server $c) { - $factory = new \OC\DB\ConnectionFactory(); - $systemConfig = $c->getSystemConfig(); - $type = $systemConfig->getValue('dbtype', 'sqlite'); - if (!$factory->isValidType($type)) { - throw new \OC\DatabaseException('Invalid database type'); - } - $connectionParams = $factory->createConnectionParams($systemConfig); - $connection = $factory->getConnection($type, $connectionParams); - $connection->getConfiguration()->setSQLLogger($c->getQueryLogger()); - return $connection; - }); - $this->registerService('Db', function (Server $c) { - return new Db($c->getDatabaseConnection()); - }); - $this->registerService('HTTPHelper', function (Server $c) { - $config = $c->getConfig(); - return new HTTPHelper( - $config, - $c->getHTTPClientService() - ); - }); - $this->registerService('HttpClientService', function (Server $c) { - $user = \OC_User::getUser(); - $uid = $user ? $user : null; - return new ClientService( - $c->getConfig(), - new \OC\Security\CertificateManager($uid, new View(), $c->getConfig()) - ); - }); - $this->registerService('EventLogger', function (Server $c) { - if ($c->getSystemConfig()->getValue('debug', false)) { - return new EventLogger(); - } else { - return new NullEventLogger(); - } - }); - $this->registerService('QueryLogger', function (Server $c) { - if ($c->getSystemConfig()->getValue('debug', false)) { - return new QueryLogger(); - } else { - return new NullQueryLogger(); - } - }); - $this->registerService('TempManager', function (Server $c) { - return new TempManager( - $c->getLogger(), - $c->getConfig() - ); - }); - $this->registerService('AppManager', function (Server $c) { - return new \OC\App\AppManager( - $c->getUserSession(), - $c->getAppConfig(), - $c->getGroupManager(), - $c->getMemCacheFactory(), - $c->getEventDispatcher() - ); - }); - $this->registerService('DateTimeZone', function (Server $c) { - return new DateTimeZone( - $c->getConfig(), - $c->getSession() - ); - }); - $this->registerService('DateTimeFormatter', function (Server $c) { - $language = $c->getConfig()->getUserValue($c->getSession()->get('user_id'), 'core', 'lang', null); - - return new DateTimeFormatter( - $c->getDateTimeZone()->getTimeZone(), - $c->getL10N('lib', $language) - ); - }); - $this->registerService('UserMountCache', function (Server $c) { - $mountCache = new UserMountCache($c->getDatabaseConnection(), $c->getUserManager(), $c->getLogger()); - $listener = new UserMountCacheListener($mountCache); - $listener->listen($c->getUserManager()); - return $mountCache; - }); - $this->registerService('MountConfigManager', function (Server $c) { - $loader = \OC\Files\Filesystem::getLoader(); - $mountCache = $c->query('UserMountCache'); - return new \OC\Files\Config\MountProviderCollection($loader, $mountCache); - }); - $this->registerService('IniWrapper', function ($c) { - return new IniGetWrapper(); - }); - $this->registerService('AsyncCommandBus', function (Server $c) { - $jobList = $c->getJobList(); - return new AsyncBus($jobList); - }); - $this->registerService('TrustedDomainHelper', function ($c) { - return new TrustedDomainHelper($this->getConfig()); - }); - $this->registerService('IntegrityCodeChecker', function (Server $c) { - // IConfig and IAppManager requires a working database. This code - // might however be called when ownCloud is not yet setup. - if(\OC::$server->getSystemConfig()->getValue('installed', false)) { - $config = $c->getConfig(); - $appManager = $c->getAppManager(); - } else { - $config = null; - $appManager = null; - } - - return new Checker( - new EnvironmentHelper(), - new FileAccessHelper(), - new AppLocator(), - $config, - $c->getMemCacheFactory(), - $appManager - ); - }); - $this->registerService('Request', function ($c) { - if (isset($this['urlParams'])) { - $urlParams = $this['urlParams']; - } else { - $urlParams = []; - } - - if (defined('PHPUNIT_RUN') && PHPUNIT_RUN - && in_array('fakeinput', stream_get_wrappers()) - ) { - $stream = 'fakeinput://data'; - } else { - $stream = 'php://input'; - } - - return new Request( - [ - 'get' => $_GET, - 'post' => $_POST, - 'files' => $_FILES, - 'server' => $_SERVER, - 'env' => $_ENV, - 'cookies' => $_COOKIE, - 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) - ? $_SERVER['REQUEST_METHOD'] - : null, - 'urlParams' => $urlParams, - ], - $this->getSecureRandom(), - $this->getConfig(), - $this->getCsrfTokenManager(), - $stream - ); - }); - $this->registerService('Mailer', function (Server $c) { - return new Mailer( - $c->getConfig(), - $c->getLogger(), - new \OC_Defaults() - ); - }); - $this->registerService('OcsClient', function (Server $c) { - return new OCSClient( - $this->getHTTPClientService(), - $this->getConfig(), - $this->getLogger() - ); - }); - $this->registerService('LockingProvider', function (Server $c) { - if ($c->getConfig()->getSystemValue('filelocking.enabled', true) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { - /** @var \OC\Memcache\Factory $memcacheFactory */ - $memcacheFactory = $c->getMemCacheFactory(); - $memcache = $memcacheFactory->createLocking('lock'); - if (!($memcache instanceof \OC\Memcache\NullCache)) { - return new MemcacheLockingProvider($memcache); - } - return new DBLockingProvider($c->getDatabaseConnection(), $c->getLogger(), new TimeFactory()); - } - return new NoopLockingProvider(); - }); - $this->registerService('MountManager', function () { - return new \OC\Files\Mount\Manager(); - }); - $this->registerService('MimeTypeDetector', function (Server $c) { - return new \OC\Files\Type\Detection( - $c->getURLGenerator(), - \OC::$SERVERROOT . '/config/', - \OC::$SERVERROOT . '/resources/config/' - ); - }); - $this->registerService('MimeTypeLoader', function (Server $c) { - return new \OC\Files\Type\Loader( - $c->getDatabaseConnection() - ); - }); - $this->registerService('NotificationManager', function () { - return new Manager(); - }); - $this->registerService('CapabilitiesManager', function (Server $c) { - $manager = new \OC\CapabilitiesManager(); - $manager->registerCapability(function () use ($c) { - return new \OC\OCS\CoreCapabilities($c->getConfig()); - }); - return $manager; - }); - $this->registerService('CommentsManager', function(Server $c) { - $config = $c->getConfig(); - $factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory'); - /** @var \OCP\Comments\ICommentsManagerFactory $factory */ - $factory = new $factoryClass($this); - return $factory->getManager(); - }); - $this->registerService('EventDispatcher', function () { - return new EventDispatcher(); - }); - $this->registerService('CryptoWrapper', function (Server $c) { - // FIXME: Instantiiated here due to cyclic dependency - $request = new Request( - [ - 'get' => $_GET, - 'post' => $_POST, - 'files' => $_FILES, - 'server' => $_SERVER, - 'env' => $_ENV, - 'cookies' => $_COOKIE, - 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) - ? $_SERVER['REQUEST_METHOD'] - : null, - ], - $c->getSecureRandom(), - $c->getConfig() - ); - - return new CryptoWrapper( - $c->getConfig(), - $c->getCrypto(), - $c->getSecureRandom(), - $request - ); - }); - $this->registerService('CsrfTokenManager', function (Server $c) { - $tokenGenerator = new CsrfTokenGenerator($c->getSecureRandom()); - $sessionStorage = new SessionStorage($c->getSession()); - - return new CsrfTokenManager( - $tokenGenerator, - $sessionStorage - ); - }); - $this->registerService('ContentSecurityPolicyManager', function (Server $c) { - return new ContentSecurityPolicyManager(); - }); - $this->registerService('ShareManager', function(Server $c) { - $config = $c->getConfig(); - $factoryClass = $config->getSystemValue('sharing.managerFactory', '\OC\Share20\ProviderFactory'); - /** @var \OC\Share20\IProviderFactory $factory */ - $factory = new $factoryClass($this); - - $manager = new \OC\Share20\Manager( - $c->getLogger(), - $c->getConfig(), - $c->getSecureRandom(), - $c->getHasher(), - $c->getMountManager(), - $c->getGroupManager(), - $c->getL10N('core'), - $factory, - $c->getUserManager(), - $c->getRootFolder() - ); - - return $manager; - }); - } - - /** - * @return \OCP\Contacts\IManager - */ - public function getContactsManager() { - return $this->query('ContactsManager'); - } - - /** - * @return \OC\Encryption\Manager - */ - public function getEncryptionManager() { - return $this->query('EncryptionManager'); - } - - /** - * @return \OC\Encryption\File - */ - public function getEncryptionFilesHelper() { - return $this->query('EncryptionFileHelper'); - } - - /** - * @return \OCP\Encryption\Keys\IStorage - */ - public function getEncryptionKeyStorage() { - return $this->query('EncryptionKeyStorage'); - } - - /** - * The current request object holding all information about the request - * currently being processed is returned from this method. - * In case the current execution was not initiated by a web request null is returned - * - * @return \OCP\IRequest - */ - public function getRequest() { - return $this->query('Request'); - } - - /** - * Returns the preview manager which can create preview images for a given file - * - * @return \OCP\IPreview - */ - public function getPreviewManager() { - return $this->query('PreviewManager'); - } - - /** - * Returns the tag manager which can get and set tags for different object types - * - * @see \OCP\ITagManager::load() - * @return \OCP\ITagManager - */ - public function getTagManager() { - return $this->query('TagManager'); - } - - /** - * Returns the system-tag manager - * - * @return \OCP\SystemTag\ISystemTagManager - * - * @since 9.0.0 - */ - public function getSystemTagManager() { - return $this->query('SystemTagManager'); - } - - /** - * Returns the system-tag object mapper - * - * @return \OCP\SystemTag\ISystemTagObjectMapper - * - * @since 9.0.0 - */ - public function getSystemTagObjectMapper() { - return $this->query('SystemTagObjectMapper'); - } - - - /** - * Returns the avatar manager, used for avatar functionality - * - * @return \OCP\IAvatarManager - */ - public function getAvatarManager() { - return $this->query('AvatarManager'); - } - - /** - * Returns the root folder of ownCloud's data directory - * - * @return \OCP\Files\IRootFolder - */ - public function getRootFolder() { - return $this->query('RootFolder'); - } - - /** - * Returns a view to ownCloud's files folder - * - * @param string $userId user ID - * @return \OCP\Files\Folder|null - */ - public function getUserFolder($userId = null) { - if ($userId === null) { - $user = $this->getUserSession()->getUser(); - if (!$user) { - return null; - } - $userId = $user->getUID(); - } - $root = $this->getRootFolder(); - return $root->getUserFolder($userId); - } - - /** - * Returns an app-specific view in ownClouds data directory - * - * @return \OCP\Files\Folder - */ - public function getAppFolder() { - $dir = '/' . \OC_App::getCurrentApp(); - $root = $this->getRootFolder(); - if (!$root->nodeExists($dir)) { - $folder = $root->newFolder($dir); - } else { - $folder = $root->get($dir); - } - return $folder; - } - - /** - * @return \OC\User\Manager - */ - public function getUserManager() { - return $this->query('UserManager'); - } - - /** - * @return \OC\Group\Manager - */ - public function getGroupManager() { - return $this->query('GroupManager'); - } - - /** - * @return \OC\User\Session - */ - public function getUserSession() { - return $this->query('UserSession'); - } - - /** - * @return \OCP\ISession - */ - public function getSession() { - return $this->query('UserSession')->getSession(); - } - - /** - * @param \OCP\ISession $session - */ - public function setSession(\OCP\ISession $session) { - return $this->query('UserSession')->setSession($session); - } - - /** - * @return \OC\NavigationManager - */ - public function getNavigationManager() { - return $this->query('NavigationManager'); - } - - /** - * @return \OCP\IConfig - */ - public function getConfig() { - return $this->query('AllConfig'); - } - - /** - * For internal use only - * - * @return \OC\SystemConfig - */ - public function getSystemConfig() { - return $this->query('SystemConfig'); - } - - /** - * Returns the app config manager - * - * @return \OCP\IAppConfig - */ - public function getAppConfig() { - return $this->query('AppConfig'); - } - - /** - * @return \OCP\L10N\IFactory - */ - public function getL10NFactory() { - return $this->query('L10NFactory'); - } - - /** - * get an L10N instance - * - * @param string $app appid - * @param string $lang - * @return \OC_L10N - */ - public function getL10N($app, $lang = null) { - return $this->getL10NFactory()->get($app, $lang); - } - - /** - * @return \OCP\IURLGenerator - */ - public function getURLGenerator() { - return $this->query('URLGenerator'); - } - - /** - * @return \OCP\IHelper - */ - public function getHelper() { - return $this->query('AppHelper'); - } - - /** - * Returns an ICache instance. Since 8.1.0 it returns a fake cache. Use - * getMemCacheFactory() instead. - * - * @return \OCP\ICache - * @deprecated 8.1.0 use getMemCacheFactory to obtain a proper cache - */ - public function getCache() { - return $this->query('UserCache'); - } - - /** - * Returns an \OCP\CacheFactory instance - * - * @return \OCP\ICacheFactory - */ - public function getMemCacheFactory() { - return $this->query('MemCacheFactory'); - } - - /** - * Returns the current session - * - * @return \OCP\IDBConnection - */ - public function getDatabaseConnection() { - return $this->query('DatabaseConnection'); - } - - /** - * Returns the activity manager - * - * @return \OCP\Activity\IManager - */ - public function getActivityManager() { - return $this->query('ActivityManager'); - } - - /** - * Returns an job list for controlling background jobs - * - * @return \OCP\BackgroundJob\IJobList - */ - public function getJobList() { - return $this->query('JobList'); - } - - /** - * Returns a logger instance - * - * @return \OCP\ILogger - */ - public function getLogger() { - return $this->query('Logger'); - } - - /** - * Returns a router for generating and matching urls - * - * @return \OCP\Route\IRouter - */ - public function getRouter() { - return $this->query('Router'); - } - - /** - * Returns a search instance - * - * @return \OCP\ISearch - */ - public function getSearch() { - return $this->query('Search'); - } - - /** - * Returns a SecureRandom instance - * - * @return \OCP\Security\ISecureRandom - */ - public function getSecureRandom() { - return $this->query('SecureRandom'); - } - - /** - * Returns a Crypto instance - * - * @return \OCP\Security\ICrypto - */ - public function getCrypto() { - return $this->query('Crypto'); - } - - /** - * Returns a Hasher instance - * - * @return \OCP\Security\IHasher - */ - public function getHasher() { - return $this->query('Hasher'); - } - - /** - * Returns a CredentialsManager instance - * - * @return \OCP\Security\ICredentialsManager - */ - public function getCredentialsManager() { - return $this->query('CredentialsManager'); - } - - /** - * Returns an instance of the db facade - * - * @deprecated use getDatabaseConnection, will be removed in ownCloud 10 - * @return \OCP\IDb - */ - public function getDb() { - return $this->query('Db'); - } - - /** - * Returns an instance of the HTTP helper class - * - * @deprecated Use getHTTPClientService() - * @return \OC\HTTPHelper - */ - public function getHTTPHelper() { - return $this->query('HTTPHelper'); - } - - /** - * Get the certificate manager for the user - * - * @param string $userId (optional) if not specified the current loggedin user is used, use null to get the system certificate manager - * @return \OCP\ICertificateManager | null if $uid is null and no user is logged in - */ - public function getCertificateManager($userId = '') { - if ($userId === '') { - $userSession = $this->getUserSession(); - $user = $userSession->getUser(); - if (is_null($user)) { - return null; - } - $userId = $user->getUID(); - } - return new CertificateManager($userId, new View(), $this->getConfig()); - } - - /** - * Returns an instance of the HTTP client service - * - * @return \OCP\Http\Client\IClientService - */ - public function getHTTPClientService() { - return $this->query('HttpClientService'); - } - - /** - * Create a new event source - * - * @return \OCP\IEventSource - */ - public function createEventSource() { - return new \OC_EventSource(); - } - - /** - * Get the active event logger - * - * The returned logger only logs data when debug mode is enabled - * - * @return \OCP\Diagnostics\IEventLogger - */ - public function getEventLogger() { - return $this->query('EventLogger'); - } - - /** - * Get the active query logger - * - * The returned logger only logs data when debug mode is enabled - * - * @return \OCP\Diagnostics\IQueryLogger - */ - public function getQueryLogger() { - return $this->query('QueryLogger'); - } - - /** - * Get the manager for temporary files and folders - * - * @return \OCP\ITempManager - */ - public function getTempManager() { - return $this->query('TempManager'); - } - - /** - * Get the app manager - * - * @return \OCP\App\IAppManager - */ - public function getAppManager() { - return $this->query('AppManager'); - } - - /** - * Creates a new mailer - * - * @return \OCP\Mail\IMailer - */ - public function getMailer() { - return $this->query('Mailer'); - } - - /** - * Get the webroot - * - * @return string - */ - public function getWebRoot() { - return $this->webRoot; - } - - /** - * @return \OC\OCSClient - */ - public function getOcsClient() { - return $this->query('OcsClient'); - } - - /** - * @return \OCP\IDateTimeZone - */ - public function getDateTimeZone() { - return $this->query('DateTimeZone'); - } - - /** - * @return \OCP\IDateTimeFormatter - */ - public function getDateTimeFormatter() { - return $this->query('DateTimeFormatter'); - } - - /** - * @return \OCP\Files\Config\IMountProviderCollection - */ - public function getMountProviderCollection() { - return $this->query('MountConfigManager'); - } - - /** - * Get the IniWrapper - * - * @return IniGetWrapper - */ - public function getIniWrapper() { - return $this->query('IniWrapper'); - } - - /** - * @return \OCP\Command\IBus - */ - public function getCommandBus() { - return $this->query('AsyncCommandBus'); - } - - /** - * Get the trusted domain helper - * - * @return TrustedDomainHelper - */ - public function getTrustedDomainHelper() { - return $this->query('TrustedDomainHelper'); - } - - /** - * Get the locking provider - * - * @return \OCP\Lock\ILockingProvider - * @since 8.1.0 - */ - public function getLockingProvider() { - return $this->query('LockingProvider'); - } - - /** - * @return \OCP\Files\Mount\IMountManager - **/ - function getMountManager() { - return $this->query('MountManager'); - } - - /* - * Get the MimeTypeDetector - * - * @return \OCP\Files\IMimeTypeDetector - */ - public function getMimeTypeDetector() { - return $this->query('MimeTypeDetector'); - } - - /** - * Get the MimeTypeLoader - * - * @return \OCP\Files\IMimeTypeLoader - */ - public function getMimeTypeLoader() { - return $this->query('MimeTypeLoader'); - } - - /** - * Get the manager of all the capabilities - * - * @return \OC\CapabilitiesManager - */ - public function getCapabilitiesManager() { - return $this->query('CapabilitiesManager'); - } - - /** - * Get the EventDispatcher - * - * @return EventDispatcherInterface - * @since 8.2.0 - */ - public function getEventDispatcher() { - return $this->query('EventDispatcher'); - } - - /** - * Get the Notification Manager - * - * @return \OCP\Notification\IManager - * @since 8.2.0 - */ - public function getNotificationManager() { - return $this->query('NotificationManager'); - } - - /** - * @return \OCP\Comments\ICommentsManager - */ - public function getCommentsManager() { - return $this->query('CommentsManager'); - } - - /** - * @return \OC\IntegrityCheck\Checker - */ - public function getIntegrityCodeChecker() { - return $this->query('IntegrityCodeChecker'); - } - - /** - * @return \OC\Session\CryptoWrapper - */ - public function getSessionCryptoWrapper() { - return $this->query('CryptoWrapper'); - } - - /** - * @return CsrfTokenManager - */ - public function getCsrfTokenManager() { - return $this->query('CsrfTokenManager'); - } - - /** - * @return IContentSecurityPolicyManager - */ - public function getContentSecurityPolicyManager() { - return $this->query('ContentSecurityPolicyManager'); - } - - /** - * Not a public API as of 8.2, wait for 9.0 - * - * @return \OCA\Files_External\Service\BackendService - */ - public function getStoragesBackendService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\BackendService'); - } - - /** - * Not a public API as of 8.2, wait for 9.0 - * - * @return \OCA\Files_External\Service\GlobalStoragesService - */ - public function getGlobalStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\GlobalStoragesService'); - } - - /** - * Not a public API as of 8.2, wait for 9.0 - * - * @return \OCA\Files_External\Service\UserGlobalStoragesService - */ - public function getUserGlobalStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserGlobalStoragesService'); - } - - /** - * Not a public API as of 8.2, wait for 9.0 - * - * @return \OCA\Files_External\Service\UserStoragesService - */ - public function getUserStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserStoragesService'); - } - - /** - * @return \OCP\Share\IManager - */ - public function getShareManager() { - return $this->query('ShareManager'); - } - -} -- cgit v1.2.3