From: Christoph Wurst Date: Mon, 8 Jun 2020 16:43:16 +0000 (+0200) Subject: Migrate Admin Audit app to new bootstrap mechanism X-Git-Tag: v20.0.0beta1~411^2~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=16ab7986b4c019d18bfbfa083ce63040f104ea5b;p=nextcloud-server.git Migrate Admin Audit app to new bootstrap mechanism Signed-off-by: Christoph Wurst --- diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php deleted file mode 100644 index aa44f6931d4..00000000000 --- a/apps/admin_audit/appinfo/app.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @copyright Copyright (c) 2017 Lukas Reschke - * - * @author Christoph Wurst - * @author Joas Schilling - * @author Lukas Reschke - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * 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 - * along with this program. If not, see . - * - */ - -$app = \OC::$server->query(\OCA\AdminAudit\AppInfo\Application::class); -$app->register(); diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php index 83c392e92ea..dde0605103c 100644 --- a/apps/admin_audit/lib/AppInfo/Application.php +++ b/apps/admin_audit/lib/AppInfo/Application.php @@ -49,90 +49,110 @@ use OCA\AdminAudit\Actions\UserManagement; use OCA\AdminAudit\Actions\Versions; use OCP\App\ManagerEvent; use OCP\AppFramework\App; +use OCP\AppFramework\Bootstrap\IBootContext; +use OCP\AppFramework\Bootstrap\IBootstrap; +use OCP\AppFramework\Bootstrap\IRegistrationContext; use OCP\Authentication\TwoFactorAuth\IProvider; use OCP\Console\ConsoleEvent; +use OCP\IConfig; use OCP\IGroupManager; use OCP\ILogger; use OCP\IPreview; +use OCP\IServerContainer; use OCP\IUserSession; +use OCP\Log\ILogFactory; use OCP\Share; use OCP\Util; use Symfony\Component\EventDispatcher\GenericEvent; -class Application extends App { +class Application extends App implements IBootstrap { /** @var ILogger */ protected $logger; public function __construct() { parent::__construct('admin_audit'); - $this->initLogger(); } - public function initLogger() { - $c = $this->getContainer()->getServer(); - $config = $c->getConfig(); + public function register(IRegistrationContext $context): void { + } + + public function boot(IBootContext $context): void { + $logger = $this->getLogger( + $context->getAppContainer()->query(IConfig::class), + $context->getAppContainer()->query(ILogger::class), + $context->getAppContainer()->query(ILogFactory::class) + ); + + /* + * TODO: once the hooks are migrated to lazy events, this should be done + * in \OCA\AdminAudit\AppInfo\Application::register + */ + $this->registerHooks($logger, $context->getServerContainer()); + } + private function getLogger(IConfig $config, + ILogger $logger, + ILogFactory $logFactory): ILogger { $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log'; $logFile = $config->getAppValue('admin_audit', 'logfile', $default); + if ($logFile === null) { - $this->logger = $c->getLogger(); - return; + return $logger; } - $this->logger = $c->getLogFactory()->getCustomLogger($logFile); - } - - public function register() { - $this->registerHooks(); + return $logFactory->getCustomLogger($logFile); } /** * Register hooks in order to log them */ - protected function registerHooks() { - $this->userManagementHooks(); - $this->groupHooks(); - $this->authHooks(); + private function registerHooks(ILogger $logger, + IServerContainer $serverContainer) { + $this->userManagementHooks($logger, $serverContainer); + $this->groupHooks($logger, $serverContainer); + $this->authHooks($logger); - $this->consoleHooks(); - $this->appHooks(); + $this->consoleHooks($logger, $serverContainer); + $this->appHooks($logger, $serverContainer); - $this->sharingHooks(); + $this->sharingHooks($logger); - $this->fileHooks(); - $this->trashbinHooks(); - $this->versionsHooks(); + $this->fileHooks($logger, $serverContainer); + $this->trashbinHooks($logger); + $this->versionsHooks($logger); - $this->securityHooks(); + $this->securityHooks($logger, $serverContainer); } - protected function userManagementHooks() { - $userActions = new UserManagement($this->logger); + private function userManagementHooks(ILogger $logger, + IServerContainer $serverContainer) { + $userActions = new UserManagement($logger); - Util::connectHook('OC_User', 'post_createUser', $userActions, 'create'); - Util::connectHook('OC_User', 'post_deleteUser', $userActions, 'delete'); - Util::connectHook('OC_User', 'changeUser', $userActions, 'change'); + Util::connectHook('OC_User', 'post_createUser', $userActions, 'create'); + Util::connectHook('OC_User', 'post_deleteUser', $userActions, 'delete'); + Util::connectHook('OC_User', 'changeUser', $userActions, 'change'); /** @var IUserSession|Session $userSession */ - $userSession = $this->getContainer()->getServer()->getUserSession(); + $userSession = $serverContainer->getUserSession(); $userSession->listen('\OC\User', 'postSetPassword', [$userActions, 'setPassword']); $userSession->listen('\OC\User', 'assignedUserId', [$userActions, 'assign']); $userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']); } - protected function groupHooks() { - $groupActions = new GroupManagement($this->logger); + private function groupHooks(ILogger $logger, + IServerContainer $serverContainer) { + $groupActions = new GroupManagement($logger); /** @var IGroupManager|Manager $groupManager */ - $groupManager = $this->getContainer()->getServer()->getGroupManager(); - $groupManager->listen('\OC\Group', 'postRemoveUser', [$groupActions, 'removeUser']); - $groupManager->listen('\OC\Group', 'postAddUser', [$groupActions, 'addUser']); - $groupManager->listen('\OC\Group', 'postDelete', [$groupActions, 'deleteGroup']); - $groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']); + $groupManager = $serverContainer->getGroupManager(); + $groupManager->listen('\OC\Group', 'postRemoveUser', [$groupActions, 'removeUser']); + $groupManager->listen('\OC\Group', 'postAddUser', [$groupActions, 'addUser']); + $groupManager->listen('\OC\Group', 'postDelete', [$groupActions, 'deleteGroup']); + $groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']); } - protected function sharingHooks() { - $shareActions = new Sharing($this->logger); + private function sharingHooks(ILogger $logger) { + $shareActions = new Sharing($logger); Util::connectHook(Share::class, 'post_shared', $shareActions, 'shared'); Util::connectHook(Share::class, 'post_unshare', $shareActions, 'unshare'); @@ -143,41 +163,44 @@ class Application extends App { Util::connectHook(Share::class, 'share_link_access', $shareActions, 'shareAccessed'); } - protected function authHooks() { - $authActions = new Auth($this->logger); + private function authHooks(ILogger $logger) { + $authActions = new Auth($logger); Util::connectHook('OC_User', 'pre_login', $authActions, 'loginAttempt'); Util::connectHook('OC_User', 'post_login', $authActions, 'loginSuccessful'); Util::connectHook('OC_User', 'logout', $authActions, 'logout'); } - protected function appHooks() { - $eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher(); - $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function (ManagerEvent $event) { - $appActions = new AppManagement($this->logger); + private function appHooks(ILogger $logger, + IServerContainer $serverContainer) { + $eventDispatcher = $serverContainer->getEventDispatcher(); + $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function (ManagerEvent $event) use ($logger) { + $appActions = new AppManagement($logger); $appActions->enableApp($event->getAppID()); }); - $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function (ManagerEvent $event) { - $appActions = new AppManagement($this->logger); + $eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function (ManagerEvent $event) use ($logger) { + $appActions = new AppManagement($logger); $appActions->enableAppForGroups($event->getAppID(), $event->getGroups()); }); - $eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function (ManagerEvent $event) { - $appActions = new AppManagement($this->logger); + $eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function (ManagerEvent $event) use ($logger) { + $appActions = new AppManagement($logger); $appActions->disableApp($event->getAppID()); }); } - protected function consoleHooks() { - $eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher(); - $eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function (ConsoleEvent $event) { - $appActions = new Console($this->logger); + private function consoleHooks(ILogger $logger, + IServerContainer $serverContainer) { + $eventDispatcher = $serverContainer->getEventDispatcher(); + $eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function (ConsoleEvent $event) use ($logger) { + $appActions = new Console($logger); $appActions->runCommand($event->getArguments()); }); } - protected function fileHooks() { - $fileActions = new Files($this->logger); - $eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher(); + private function fileHooks(ILogger $logger, + IServerContainer $serverContainer) { + $fileActions = new Files($logger); + $eventDispatcher = $serverContainer->getEventDispatcher(); $eventDispatcher->addListener( IPreview::EVENT, function (GenericEvent $event) use ($fileActions) { @@ -188,7 +211,7 @@ class Application extends App { 'width' => $event->getArguments()['width'], 'height' => $event->getArguments()['height'], 'crop' => $event->getArguments()['crop'], - 'mode' => $event->getArguments()['mode'] + 'mode' => $event->getArguments()['mode'] ]); } ); @@ -237,26 +260,27 @@ class Application extends App { ); } - protected function versionsHooks() { - $versionsActions = new Versions($this->logger); + private function versionsHooks(ILogger $logger) { + $versionsActions = new Versions($logger); Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback'); - Util::connectHook('\OCP\Versions', 'delete',$versionsActions, 'delete'); + Util::connectHook('\OCP\Versions', 'delete', $versionsActions, 'delete'); } - protected function trashbinHooks() { - $trashActions = new Trashbin($this->logger); + private function trashbinHooks(ILogger $logger) { + $trashActions = new Trashbin($logger); Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete'); Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore'); } - protected function securityHooks() { - $eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher(); - $eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function (GenericEvent $event) { - $security = new Security($this->logger); + private function securityHooks(ILogger $logger, + IServerContainer $serverContainer) { + $eventDispatcher = $serverContainer->getEventDispatcher(); + $eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function (GenericEvent $event) use ($logger) { + $security = new Security($logger); $security->twofactorSuccess($event->getSubject(), $event->getArguments()); }); - $eventDispatcher->addListener(IProvider::EVENT_FAILED, function (GenericEvent $event) { - $security = new Security($this->logger); + $eventDispatcher->addListener(IProvider::EVENT_FAILED, function (GenericEvent $event) use ($logger) { + $security = new Security($logger); $security->twofactorFailed($event->getSubject(), $event->getArguments()); }); }