aboutsummaryrefslogtreecommitdiffstats
path: root/apps/admin_audit/lib/AppInfo/Application.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/admin_audit/lib/AppInfo/Application.php')
-rw-r--r--apps/admin_audit/lib/AppInfo/Application.php299
1 files changed, 124 insertions, 175 deletions
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php
index 860b7b70ae6..63a1d065bc8 100644
--- a/apps/admin_audit/lib/AppInfo/Application.php
+++ b/apps/admin_audit/lib/AppInfo/Application.php
@@ -3,76 +3,75 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Daniel Kesselberg <mail@danielkesselberg.de>
- * @author GrayFix <grayfix@gmail.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Tiago Flores <tiago.flores@yahoo.com.br>
- *
- * @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 <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
+
namespace OCA\AdminAudit\AppInfo;
-use OC\Files\Filesystem;
-use OC\Group\Manager as GroupManager;
-use OC\User\Session as UserSession;
-use OCA\AdminAudit\Actions\AppManagement;
use OCA\AdminAudit\Actions\Auth;
use OCA\AdminAudit\Actions\Console;
use OCA\AdminAudit\Actions\Files;
-use OCA\AdminAudit\Actions\GroupManagement;
-use OCA\AdminAudit\Actions\Security;
use OCA\AdminAudit\Actions\Sharing;
+use OCA\AdminAudit\Actions\TagManagement;
use OCA\AdminAudit\Actions\Trashbin;
-use OCA\AdminAudit\Actions\UserManagement;
use OCA\AdminAudit\Actions\Versions;
use OCA\AdminAudit\AuditLogger;
use OCA\AdminAudit\IAuditLogger;
+use OCA\AdminAudit\Listener\AppManagementEventListener;
+use OCA\AdminAudit\Listener\AuthEventListener;
+use OCA\AdminAudit\Listener\ConsoleEventListener;
use OCA\AdminAudit\Listener\CriticalActionPerformedEventListener;
-use OCP\App\ManagerEvent;
+use OCA\AdminAudit\Listener\FileEventListener;
+use OCA\AdminAudit\Listener\GroupManagementEventListener;
+use OCA\AdminAudit\Listener\SecurityEventListener;
+use OCA\AdminAudit\Listener\SharingEventListener;
+use OCA\AdminAudit\Listener\UserManagementEventListener;
+use OCA\Files_Versions\Events\VersionRestoredEvent;
+use OCP\App\Events\AppDisableEvent;
+use OCP\App\Events\AppEnableEvent;
+use OCP\App\Events\AppUpdateEvent;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\Authentication\Events\AnyLoginFailedEvent;
use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengeFailed;
use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengePassed;
use OCP\Console\ConsoleEvent;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
+use OCP\Files\Events\Node\BeforeNodeReadEvent;
+use OCP\Files\Events\Node\NodeCopiedEvent;
+use OCP\Files\Events\Node\NodeCreatedEvent;
+use OCP\Files\Events\Node\NodeRenamedEvent;
+use OCP\Files\Events\Node\NodeWrittenEvent;
+use OCP\Group\Events\GroupCreatedEvent;
+use OCP\Group\Events\GroupDeletedEvent;
+use OCP\Group\Events\UserAddedEvent;
+use OCP\Group\Events\UserRemovedEvent;
use OCP\IConfig;
-use OCP\IGroupManager;
-use OCP\IUserSession;
use OCP\Log\Audit\CriticalActionPerformedEvent;
use OCP\Log\ILogFactory;
use OCP\Preview\BeforePreviewFetchedEvent;
use OCP\Share;
+use OCP\Share\Events\ShareCreatedEvent;
+use OCP\Share\Events\ShareDeletedEvent;
+use OCP\SystemTag\ManagerEvent;
+use OCP\User\Events\BeforeUserLoggedInEvent;
+use OCP\User\Events\BeforeUserLoggedOutEvent;
+use OCP\User\Events\PasswordUpdatedEvent;
+use OCP\User\Events\UserChangedEvent;
+use OCP\User\Events\UserCreatedEvent;
+use OCP\User\Events\UserDeletedEvent;
+use OCP\User\Events\UserIdAssignedEvent;
+use OCP\User\Events\UserIdUnassignedEvent;
+use OCP\User\Events\UserLoggedInEvent;
+use OCP\User\Events\UserLoggedInWithCookieEvent;
use OCP\Util;
use Psr\Container\ContainerInterface;
-use Psr\Log\LoggerInterface;
class Application extends App implements IBootstrap {
- /** @var LoggerInterface */
- protected $logger;
-
public function __construct() {
parent::__construct('admin_audit');
}
@@ -83,6 +82,47 @@ class Application extends App implements IBootstrap {
});
$context->registerEventListener(CriticalActionPerformedEvent::class, CriticalActionPerformedEventListener::class);
+
+ // User management events
+ $context->registerEventListener(UserCreatedEvent::class, UserManagementEventListener::class);
+ $context->registerEventListener(UserDeletedEvent::class, UserManagementEventListener::class);
+ $context->registerEventListener(UserChangedEvent::class, UserManagementEventListener::class);
+ $context->registerEventListener(PasswordUpdatedEvent::class, UserManagementEventListener::class);
+ $context->registerEventListener(UserIdAssignedEvent::class, UserManagementEventListener::class);
+ $context->registerEventListener(UserIdUnassignedEvent::class, UserManagementEventListener::class);
+
+ // Group management events
+ $context->registerEventListener(UserAddedEvent::class, GroupManagementEventListener::class);
+ $context->registerEventListener(UserRemovedEvent::class, GroupManagementEventListener::class);
+ $context->registerEventListener(GroupCreatedEvent::class, GroupManagementEventListener::class);
+ $context->registerEventListener(GroupDeletedEvent::class, GroupManagementEventListener::class);
+
+ // Sharing events
+ $context->registerEventListener(ShareCreatedEvent::class, SharingEventListener::class);
+ $context->registerEventListener(ShareDeletedEvent::class, SharingEventListener::class);
+
+ // Auth events
+ $context->registerEventListener(BeforeUserLoggedInEvent::class, AuthEventListener::class);
+ $context->registerEventListener(UserLoggedInWithCookieEvent::class, AuthEventListener::class);
+ $context->registerEventListener(UserLoggedInEvent::class, AuthEventListener::class);
+ $context->registerEventListener(BeforeUserLoggedOutEvent::class, AuthEventListener::class);
+ $context->registerEventListener(AnyLoginFailedEvent::class, AuthEventListener::class);
+
+ // File events
+ $context->registerEventListener(BeforePreviewFetchedEvent::class, FileEventListener::class);
+ $context->registerEventListener(VersionRestoredEvent::class, FileEventListener::class);
+
+ // Security events
+ $context->registerEventListener(TwoFactorProviderChallengePassed::class, SecurityEventListener::class);
+ $context->registerEventListener(TwoFactorProviderChallengeFailed::class, SecurityEventListener::class);
+
+ // App management events
+ $context->registerEventListener(AppEnableEvent::class, AppManagementEventListener::class);
+ $context->registerEventListener(AppDisableEvent::class, AppManagementEventListener::class);
+ $context->registerEventListener(AppUpdateEvent::class, AppManagementEventListener::class);
+
+ // Console events
+ $context->registerEventListener(ConsoleEvent::class, ConsoleEventListener::class);
}
public function boot(IBootContext $context): void {
@@ -93,166 +133,87 @@ class Application extends App implements IBootstrap {
* TODO: once the hooks are migrated to lazy events, this should be done
* in \OCA\AdminAudit\AppInfo\Application::register
*/
- $this->registerHooks($logger, $context->getServerContainer());
+ $this->registerLegacyHooks($logger, $context->getServerContainer());
}
/**
* Register hooks in order to log them
*/
- private function registerHooks(IAuditLogger $logger,
- ContainerInterface $serverContainer): void {
- $this->userManagementHooks($logger, $serverContainer->get(IUserSession::class));
- $this->groupHooks($logger, $serverContainer->get(IGroupManager::class));
- $this->authHooks($logger);
-
-
+ private function registerLegacyHooks(IAuditLogger $logger, ContainerInterface $serverContainer): void {
/** @var IEventDispatcher $eventDispatcher */
$eventDispatcher = $serverContainer->get(IEventDispatcher::class);
- $this->consoleHooks($logger, $eventDispatcher);
- $this->appHooks($logger, $eventDispatcher);
-
- $this->sharingHooks($logger);
-
+ $this->sharingLegacyHooks($logger);
$this->fileHooks($logger, $eventDispatcher);
$this->trashbinHooks($logger);
$this->versionsHooks($logger);
-
- $this->securityHooks($logger, $eventDispatcher);
- }
-
- private function userManagementHooks(IAuditLogger $logger,
- IUserSession $userSession): void {
- $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');
-
- assert($userSession instanceof UserSession);
- $userSession->listen('\OC\User', 'postSetPassword', [$userActions, 'setPassword']);
- $userSession->listen('\OC\User', 'assignedUserId', [$userActions, 'assign']);
- $userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']);
+ $this->tagHooks($logger, $eventDispatcher);
}
- private function groupHooks(IAuditLogger $logger,
- IGroupManager $groupManager): void {
- $groupActions = new GroupManagement($logger);
-
- assert($groupManager instanceof GroupManager);
- $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']);
- }
-
- private function sharingHooks(IAuditLogger $logger): void {
+ private function sharingLegacyHooks(IAuditLogger $logger): void {
$shareActions = new Sharing($logger);
- Util::connectHook(Share::class, 'post_shared', $shareActions, 'shared');
- Util::connectHook(Share::class, 'post_unshare', $shareActions, 'unshare');
- Util::connectHook(Share::class, 'post_unshareFromSelf', $shareActions, 'unshare');
Util::connectHook(Share::class, 'post_update_permissions', $shareActions, 'updatePermissions');
Util::connectHook(Share::class, 'post_update_password', $shareActions, 'updatePassword');
Util::connectHook(Share::class, 'post_set_expiration_date', $shareActions, 'updateExpirationDate');
Util::connectHook(Share::class, 'share_link_access', $shareActions, 'shareAccessed');
}
- private function authHooks(IAuditLogger $logger): void {
- $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');
- }
-
- private function appHooks(IAuditLogger $logger,
- IEventDispatcher $eventDispatcher): void {
- $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) use ($logger) {
- $appActions = new AppManagement($logger);
- $appActions->enableAppForGroups($event->getAppID(), $event->getGroups());
- });
- $eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function (ManagerEvent $event) use ($logger) {
- $appActions = new AppManagement($logger);
- $appActions->disableApp($event->getAppID());
- });
- }
-
- private function consoleHooks(IAuditLogger $logger,
+ private function tagHooks(IAuditLogger $logger,
IEventDispatcher $eventDispatcher): void {
- $eventDispatcher->addListener(ConsoleEvent::class, function (ConsoleEvent $event) use ($logger) {
- $appActions = new Console($logger);
- $appActions->runCommand($event->getArguments());
+ $eventDispatcher->addListener(ManagerEvent::EVENT_CREATE, function (ManagerEvent $event) use ($logger): void {
+ $tagActions = new TagManagement($logger);
+ $tagActions->createTag($event->getTag());
});
}
- private function fileHooks(IAuditLogger $logger,
- IEventDispatcher $eventDispatcher): void {
+ private function fileHooks(IAuditLogger $logger, IEventDispatcher $eventDispatcher): void {
$fileActions = new Files($logger);
+
$eventDispatcher->addListener(
- BeforePreviewFetchedEvent::class,
- function (BeforePreviewFetchedEvent $event) use ($fileActions) {
- $file = $event->getNode();
- $fileActions->preview([
- 'path' => mb_substr($file->getInternalPath(), 5),
- 'width' => $event->getWidth(),
- 'height' => $event->getHeight(),
- 'crop' => $event->isCrop(),
- 'mode' => $event->getMode()
- ]);
+ NodeRenamedEvent::class,
+ function (NodeRenamedEvent $event) use ($fileActions): void {
+ $fileActions->afterRename($event);
}
);
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_post_rename,
- $fileActions,
- 'rename'
- );
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_post_create,
- $fileActions,
- 'create'
- );
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_post_copy,
- $fileActions,
- 'copy'
+ $eventDispatcher->addListener(
+ NodeCreatedEvent::class,
+ function (NodeCreatedEvent $event) use ($fileActions): void {
+ $fileActions->create($event);
+ }
);
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_post_write,
- $fileActions,
- 'write'
+
+ $eventDispatcher->addListener(
+ NodeCopiedEvent::class,
+ function (NodeCopiedEvent $event) use ($fileActions): void {
+ $fileActions->copy($event);
+ }
);
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_post_update,
- $fileActions,
- 'update'
+
+ $eventDispatcher->addListener(
+ NodeWrittenEvent::class,
+ function (NodeWrittenEvent $event) use ($fileActions): void {
+ $fileActions->write($event);
+ }
);
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_read,
- $fileActions,
- 'read'
+
+ $eventDispatcher->addListener(
+ BeforeNodeReadEvent::class,
+ function (BeforeNodeReadEvent $event) use ($fileActions): void {
+ $fileActions->read($event);
+ }
);
- Util::connectHook(
- Filesystem::CLASSNAME,
- Filesystem::signal_delete,
- $fileActions,
- 'delete'
+
+ $eventDispatcher->addListener(
+ BeforeNodeDeletedEvent::class,
+ function (BeforeNodeDeletedEvent $event) use ($fileActions): void {
+ $fileActions->delete($event);
+ }
);
}
private function versionsHooks(IAuditLogger $logger): void {
$versionsActions = new Versions($logger);
- Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete', $versionsActions, 'delete');
}
@@ -261,16 +222,4 @@ class Application extends App implements IBootstrap {
Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete');
Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore');
}
-
- private function securityHooks(IAuditLogger $logger,
- IEventDispatcher $eventDispatcher): void {
- $eventDispatcher->addListener(TwoFactorProviderChallengePassed::class, function (TwoFactorProviderChallengePassed $event) use ($logger) {
- $security = new Security($logger);
- $security->twofactorSuccess($event->getUser(), $event->getProvider());
- });
- $eventDispatcher->addListener(TwoFactorProviderChallengeFailed::class, function (TwoFactorProviderChallengeFailed $event) use ($logger) {
- $security = new Security($logger);
- $security->twofactorFailed($event->getUser(), $event->getProvider());
- });
- }
}