diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php index a085b74585..59f7e3987a 100644 --- a/apps/admin_audit/appinfo/app.php +++ b/apps/admin_audit/appinfo/app.php @@ -1,6 +1,7 @@ + * @copyright Copyright (c) 2017 Lukas Reschke * * @author Bjoern Schiessle * @author Lukas Reschke @@ -25,6 +26,12 @@ $logger = \OC::$server->getLogger(); $userSession = \OC::$server->getUserSession(); $groupManager = \OC::$server->getGroupManager(); +$eventDispatcher = \OC::$server->getEventDispatcher(); -$auditLogger = new \OCA\Admin_Audit\AuditLogger($logger, $userSession, $groupManager); +$auditLogger = new \OCA\Admin_Audit\AuditLogger( + $logger, + $userSession, + $groupManager, + $eventDispatcher +); $auditLogger->registerHooks(); diff --git a/apps/admin_audit/lib/actions/files.php b/apps/admin_audit/lib/actions/files.php index d7b35aa2d3..d0a030d892 100644 --- a/apps/admin_audit/lib/actions/files.php +++ b/apps/admin_audit/lib/actions/files.php @@ -134,4 +134,23 @@ class Files extends Action { ] ); } + + /** + * Logs preview access to a file + * + * @param array $params + */ + public function preview(array $params) { + $this->log( + 'Preview accessed: "%s" (width: "%s", height: "%s" crop: "%s", mode: "%s")', + $params, + [ + 'path', + 'width', + 'height', + 'crop', + 'mode' + ] + ); + } } diff --git a/apps/admin_audit/lib/auditlogger.php b/apps/admin_audit/lib/auditlogger.php index 674282b5fe..20d3465550 100644 --- a/apps/admin_audit/lib/auditlogger.php +++ b/apps/admin_audit/lib/auditlogger.php @@ -1,8 +1,10 @@ + * @copyright Copyright (c) 2017 Lukas Reschke * * @author Bjoern Schiessle + * @author Lukas Reschke * * @license GNU AGPL version 3 or any later version * @@ -21,11 +23,10 @@ * */ - namespace OCA\Admin_Audit; - use OC\Files\Filesystem; +use OC\Files\Node\File; use OCA\Admin_Audit\Actions\Auth; use OCA\Admin_Audit\Actions\Files; use OCA\Admin_Audit\Actions\GroupManagement; @@ -35,17 +36,17 @@ use OCA\Admin_Audit\Actions\UserManagement; use OCA\Admin_Audit\Actions\Versions; use OCP\IGroupManager; use OCP\ILogger; +use OCP\IPreview; use OCP\IUserSession; use OCP\Util; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\GenericEvent; class AuditLogger { - /** @var ILogger */ private $logger; - /** @var IUserSession */ private $userSession; - /** @var IGroupManager */ private $groupManager; @@ -55,17 +56,20 @@ class AuditLogger { * @param ILogger $logger * @param IUserSession $userSession * @param IGroupManager $groupManager + * @param EventDispatcherInterface $eventDispatcher */ public function __construct(ILogger $logger, IUserSession $userSession, - IGroupManager $groupManager) { + IGroupManager $groupManager, + EventDispatcherInterface $eventDispatcher) { $this->logger = $logger; $this->userSession = $userSession; $this->groupManager = $groupManager; + $this->eventDispatcher = $eventDispatcher; } /** - * register hooks in order to log them + * Register hooks in order to log them */ public function registerHooks() { $this->userManagementHooks(); @@ -78,7 +82,7 @@ class AuditLogger { } /** - * connect to user management hooks + * Connect to user management hooks */ private function userManagementHooks() { $userActions = new UserManagement($this->logger); @@ -119,12 +123,25 @@ class AuditLogger { Util::connectHook('OC_User', 'logout', $authActions, 'logout'); } - /** - * connect to file hooks + * Connect to file hooks */ private function fileHooks() { $fileActions = new Files($this->logger); + $this->eventDispatcher->addListener( + IPreview::EVENT, + function(GenericEvent $event) use ($fileActions) { + /** @var File $file */ + $file = $event->getSubject(); + $fileActions->preview([ + 'path' => substr($file->getInternalPath(), 5), + 'width' => $event->getArguments()['width'], + 'height' => $event->getArguments()['height'], + 'crop' => $event->getArguments()['crop'], + 'mode' => $event->getArguments()['mode'] + ]); + } + ); Util::connectHook( Filesystem::CLASSNAME, @@ -177,7 +194,7 @@ class AuditLogger { } /** - * connect to trash bin hooks + * Connect to trash bin hooks */ private function trashbinHooks() { $trashActions = new Trashbin($this->logger);