. * */ namespace OCA\Passman\AppInfo; use OC\Files\View; use OCA\Passman\Controller\CredentialController; use OCA\Passman\Controller\PageController; use OCA\Passman\Controller\ShareController; use OCA\Passman\Controller\VaultController; use OCA\Passman\Middleware\APIMiddleware; use OCA\Passman\Middleware\ShareMiddleware; use OCA\Passman\Service\ActivityService; use OCA\Passman\Service\CronService; use OCA\Passman\Service\CredentialService; use OCA\Passman\Service\ShareService; use OCA\Passman\Service\FileService; use OCA\Passman\Service\VaultService; use OCA\Passman\Utility\Utils; use OCA\Passman\Service\NotificationService; Use OCA\Passman\Service\SettingsService; use OCP\IConfig; use OCP\IDBConnection; use OCP\AppFramework\App; use OCP\IL10N; use OCP\Util; class Application extends App { public function __construct() { parent::__construct('passman'); $container = $this->getContainer(); // Allow automatic DI for the View, until we migrated to Nodes API $container->registerService(View::class, function () { return new View(''); }, false); $container->registerService('isCLI', function () { return \OC::$CLI; }); /** * Middleware */ $container->registerService('ShareMiddleware', function ($c) { return new ShareMiddleware($c->query('SettingsService')); }); $container->registerMiddleware('ShareMiddleware'); /** * Controllers */ $container->registerService('ShareController', function ($c) { $container = $this->getContainer(); $server = $container->getServer(); return new ShareController( $c->query('AppName'), $c->query('Request'), $server->getUserSession()->getUser(), $server->getGroupManager(), $server->getUserManager(), $c->query('ActivityService'), $c->query('VaultService'), $c->query('ShareService'), $c->query('CredentialService'), $c->query('NotificationService'), $c->query('FileService'), $c->query('SettingsService') ); }); /** Cron **/ $container->registerService('CronService', function ($c) { return new CronService( $c->query('CredentialService'), $c->query('Logger'), $c->query('Utils'), $c->query('NotificationService'), $c->query('ActivityService'), $c->query('IDBConnection') ); }); $container->registerService('Db', function () { return new Db(); }); $container->registerService('Logger', function ($c) { return $c->query('ServerContainer')->getLogger(); }); $container->registerMiddleware('APIMiddleware'); // Aliases for the controllers so we can use the automatic DI $container->registerAlias('CredentialController', CredentialController::class); $container->registerAlias('PageController', PageController::class); $container->registerAlias('VaultController', VaultController::class); $container->registerAlias('VaultController', VaultController::class); $container->registerAlias('CredentialService', CredentialService::class); $container->registerAlias('NotificationService', NotificationService::class); $container->registerAlias('ActivityService', ActivityService::class); $container->registerAlias('VaultService', VaultService::class); $container->registerAlias('FileService', FileService::class); $container->registerAlias('ShareService', ShareService::class); $container->registerAlias('Utils', Utils::class); $container->registerAlias('IDBConnection', IDBConnection::class); $container->registerAlias('IConfig', IConfig::class); $container->registerAlias('SettingsService', SettingsService::class); $container->registerAlias('APIMiddleware', APIMiddleware::class); } /** * Register the navigation entry */ public function registerNavigationEntry() { $c = $this->getContainer(); /** @var \OCP\IServerContainer $server */ $server = $c->getServer(); $navigationEntry = function () use ($c, $server) { return [ 'id' => $c->getAppName(), 'order' => 10, 'name' => $c->query(IL10N::class)->t('Passwords'), 'href' => $server->getURLGenerator()->linkToRoute('passman.page.index'), 'icon' => $server->getURLGenerator()->imagePath($c->getAppName(), 'app.svg'), ]; }; $server->getNavigationManager()->add($navigationEntry); } /** * Register personal settings for notifications and emails */ public function registerPersonalPage() { \OCP\App::registerPersonal($this->getContainer()->getAppName(), 'personal'); } }