getContainer(); /** @var $config \OCP\IConfig */ $configManager = $container->query('OCP\IConfig'); self::$config['polling'] = $configManager->getSystemValue('ojsxc.polling', ['sleep_time' => 1, 'max_cycles' => 10]); self::$config['polling']['timeout'] = self::$config['polling']['sleep_time'] * self::$config['polling']['max_cycles'] + 5; self::$config['use_memcache'] = $configManager->getSystemValue('ojsxc.use_memcache', ['locking' => false]); $container->registerService('HttpBindController', function(IContainer $c) { return new HttpBindController( $c->query('AppName'), $c->query('Request'), $c->query('OJSXC_UserId'), $c->query('StanzaMapper'), $c->query('IQHandler'), $c->query('MessageHandler'), $c->query('Host'), $this->getLock(), $c->query('OCP\ILogger'), $c->query('PresenceHandler'), $c->query('PresenceMapper'), file_get_contents("php://input"), self::$config['polling']['sleep_time'], self::$config['polling']['max_cycles'], $c->query('NewContentContainer'), $c->query('StanzaLogger') ); }); $container->registerService('SettingsController', function(IContainer $c) { return new SettingsController( $c->query('AppName'), $c->query('Request'), $c->query('OCP\IConfig'), $c->query('OCP\IUserManager'), \OC::$server->getUserSession() ); }); $container->registerService('ExternalApiController', function(IContainer $c) { return new ExternalApiController( $c->query('AppName'), $c->query('Request'), $c->query('OCP\IUserManager'), $c->query('OCP\IUserSession'), $c->query('OCP\IGroupManager'), $c->query('OCP\ILogger') ); }); $container->registerService('ManagedServerController', function(IContainer $c) { return new ManagedServerController( $c->query('AppName'), $c->query('Request'), $c->query('OCP\IURLGenerator'), $c->query('OCP\IConfig'), $c->query('OCP\IUserSession'), $c->query('OCP\ILogger'), $c->query('DataRetriever'), $c->query('OCP\Security\ISecureRandom'), 'https://xmpp.jsxc.ch/registration' ); }); /** * Middleware */ $container->registerService('ExternalApiMiddleware', function(IContainer $c) { return new ExternalApiMiddleware( $c->query('Request'), $c->query('OCP\IConfig'), $c->query('RawRequest') ); }); $container->registerMiddleware('ExternalApiMiddleware'); /** * Database Layer */ $container->registerService('MessageMapper', function(IContainer $c) use ($container) { return new MessageMapper( $container->getServer()->getDatabaseConnection(), $c->query('Host'), $c->query('StanzaLogger') ); }); $container->registerService('IQRosterPushMapper', function(IContainer $c) use ($container) { return new IQRosterPushMapper( $container->getServer()->getDatabaseConnection(), $c->query('Host'), $c->query('StanzaLogger') ); }); $container->registerService('StanzaMapper', function(IContainer $c) use ($container) { return new StanzaMapper( $container->getServer()->getDatabaseConnection(), $c->query('Host'), $c->query('StanzaLogger') ); }); $container->registerService('PresenceMapper', function(IContainer $c) use ($container) { return new PresenceMapper( $container->getServer()->getDatabaseConnection(), $c->query('Host'), $c->query('OJSXC_UserId'), $c->query('MessageMapper'), $c->query('NewContentContainer'), self::$config['polling']['timeout'] ); }); /** * XMPP Stanza Handlers */ $container->registerService('IQHandler', function(IContainer $c) { return new IQ( $c->query('OJSXC_UserId'), $c->query('Host'), $c->query('OCP\IUserManager'), $c->query('OCP\IConfig') ); }); $container->registerService('PresenceHandler', function(IContainer $c) { return new Presence( $c->query('OJSXC_UserId'), $c->query('Host'), $c->query('PresenceMapper'), $c->query('MessageMapper') ); }); $container->registerService('MessageHandler', function(IContainer $c) { return new Message( $c->query('OJSXC_UserId'), $c->query('Host'), $c->query('MessageMapper') ); }); /** * Config values */ $container->registerService('Host', function(IContainer $c) { /** @var IRequest $request */ $request = $c->query('Request'); return $request->getServerHost(); }); $container->registerService('NewContentContainer', function() { return new NewContentContainer(); }); $container->registerService('StanzaLogger', function(IContainer $c) { return new StanzaLogger( $c->query('\OCP\ILogger'), $c->query('UserId') ); }); $container->registerService('RosterPush', function($c) { return new RosterPush( $c->query('ServerContainer')->getUserManager(), $c->query('ServerContainer')->getUserSession(), $c->query('Host'), $c->query('IQRosterPushMapper'), $c->query('ServerContainer')->getDatabaseConnection() ); }); $container->registerService('UserHooks', function($c) { return new Hooks( $c->query('ServerContainer')->getUserManager(), $c->query('ServerContainer')->getUserSession(), $c->query('RosterPush'), $c->query('PresenceMapper'), $c->query('StanzaMapper') ); }); $container->registerService('RefreshRosterCommand', function($c) { return new RefreshRoster( $c->query('ServerContainer')->getUserManager(), $c->query('RosterPush') ); }); /** * A modified userID for use in OJSXC. * This is automatically made lowercase. */ $container->registerService('OJSXC_UserId', function(IContainer $c) { return strtolower($c->query('UserId')); }); /** * Raw request body */ $container->registerService('RawRequest', function($c) { return new RawRequest(); }); /** * Data retriever */ $container->registerService('DataRetriever', function($c) { return new DataRetriever(); }); $container->registerService('OCA\OJSXC\Migration\RefreshRoster', function(IContainer $c) { return new RefreshRosterMigration( $c->query('RosterPush'), $c->query('OCP\IConfig'), $c->query('OCP\ILogger') ); }); } /** * @return ILock */ private function getLock() { $c = $this->getContainer(); if (self::$config['use_memcache']['locking'] === true) { $cache = $c->getServer()->getMemCacheFactory(); $version = \OC::$server->getSession()->get('OC_Version'); if ($version[0] === 8 && $version[1] === 0){ $c->getServer()->getLogger()->warning('OJSXC is configured to use memcache as backend for locking, but ownCloud version 8 doesn\'t suppor this.'); } else if ($cache->isAvailable()) { $memcache = $cache->create('ojsxc'); return new MemLock( $c->query('OJSXC_UserId'), $memcache ); } else { $c->getServer()->getLogger()->warning('OJSXC is configured to use memcache as backend for locking, but no memcache is available.'); } } // default return new DbLock( $c->query('OJSXC_UserId'), $c->query('OCP\IConfig'), $c->getServer()->getDatabaseConnection() ); } }