From 6d819f8813286913294244acc1b27c2152c5ca23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Tue, 10 Nov 2026 16:46:54 +0100 Subject: [PATCH 1/2] feat: Add audit log for import and export MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- lib/Service/UserMigrationService.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/Service/UserMigrationService.php b/lib/Service/UserMigrationService.php index df487d82..e8b4c018 100644 --- a/lib/Service/UserMigrationService.php +++ b/lib/Service/UserMigrationService.php @@ -24,6 +24,7 @@ use OCP\Config\Exceptions\UnknownKeyException; use OCP\Config\IUserConfig; use OCP\Config\ValueType; +use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; @@ -31,6 +32,7 @@ use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; +use OCP\Log\Audit\CriticalActionPerformedEvent; use OCP\Security\ISecureRandom; use OCP\UserMigration\IExportDestination; use OCP\UserMigration\IImportSource; @@ -65,6 +67,7 @@ public function __construct( private IJobList $jobList, private IAppConfig $appConfig, private ISecureRandom $secureRandom, + private IEventDispatcher $eventDispatcher, ) { $this->internalCache = new CappedMemoryCache(); @@ -197,6 +200,14 @@ public function export(IExportDestination $exportDestination, IUser $user, ?arra } $exportDestination->close(); + + $this->eventDispatcher->dispatchTyped( + new CriticalActionPerformedEvent( + 'Exported user {user}', + ['user' => $uid], + operation: 'user_migration.user.export' + ) + ); } public function import(IImportSource $importSource, ?IUser $user = null, ?OutputInterface $output = null): IUser { @@ -225,6 +236,14 @@ public function import(IImportSource $importSource, ?IUser $user = null, ?Output $uid = $user->getUID(); $output->writeln("Successfully imported $uid"); + $this->eventDispatcher->dispatchTyped( + new CriticalActionPerformedEvent( + 'Imported user {user}', + ['user' => $uid], + operation: 'user_migration.user.import' + ) + ); + return $user; } finally { $importSource->close(); From a88e232bffa1b188ede6ea38658f5aef3e50e592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Tue, 10 Nov 2026 17:25:05 +0100 Subject: [PATCH 2/2] fix: Create CriticalActionPerformedEvent in a backward compatible way MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also fixed the operation string to be consistent with other apps. Signed-off-by: Côme Chilliet --- lib/Service/UserMigrationService.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Service/UserMigrationService.php b/lib/Service/UserMigrationService.php index e8b4c018..953e6f6b 100644 --- a/lib/Service/UserMigrationService.php +++ b/lib/Service/UserMigrationService.php @@ -205,7 +205,8 @@ public function export(IExportDestination $exportDestination, IUser $user, ?arra new CriticalActionPerformedEvent( 'Exported user {user}', ['user' => $uid], - operation: 'user_migration.user.export' + false, + 'user_migration.user.exported', ) ); } @@ -240,7 +241,8 @@ public function import(IImportSource $importSource, ?IUser $user = null, ?Output new CriticalActionPerformedEvent( 'Imported user {user}', ['user' => $uid], - operation: 'user_migration.user.import' + false, + 'user_migration.user.imported', ) );