diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2024-02-23 21:28:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-23 21:28:53 +0100 |
commit | 3cc50790bc9883f8637a916132c1b4322527d59e (patch) | |
tree | 191c947bb09cff0cf4fff8c15b5fddb9d0986b4f /apps | |
parent | f40c2a03b01ef55c329951adf4d808aed0b1c5e2 (diff) | |
parent | a770fd82364569851b92a7e5f49db98f0c58c640 (diff) | |
download | nextcloud-server-3cc50790bc9883f8637a916132c1b4322527d59e.tar.gz nextcloud-server-3cc50790bc9883f8637a916132c1b4322527d59e.zip |
Merge pull request #32466 from nextcloud/fix/skip-dav-migrator
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/UserMigration/CalendarMigrator.php | 14 | ||||
-rw-r--r-- | apps/dav/lib/UserMigration/ContactsMigrator.php | 36 |
2 files changed, 33 insertions, 17 deletions
diff --git a/apps/dav/lib/UserMigration/CalendarMigrator.php b/apps/dav/lib/UserMigration/CalendarMigrator.php index 14ea4459435..22a20703024 100644 --- a/apps/dav/lib/UserMigration/CalendarMigrator.php +++ b/apps/dav/lib/UserMigration/CalendarMigrator.php @@ -182,6 +182,9 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator { ))); } + /** + * @throws InvalidCalendarException + */ private function getUniqueCalendarUri(IUser $user, string $initialCalendarUri): string { $principalUri = $this->getPrincipalUri($user); @@ -190,7 +193,7 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator { : CalendarMigrator::MIGRATED_URI_PREFIX . $initialCalendarUri; if ($initialCalendarUri === '') { - throw new CalendarMigratorException('Failed to get unique calendar URI'); + throw new InvalidCalendarException(); } $existingCalendarUris = array_map( @@ -457,17 +460,20 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator { VObjectReader::OPTION_FORGIVING, ); } catch (Throwable $e) { - throw new CalendarMigratorException("Failed to read file \"$importPath\"", 0, $e); + $output->writeln("Failed to read file \"$importPath\", skipping…"); + continue; } $problems = $vCalendar->validate(); if (!empty($problems)) { - throw new CalendarMigratorException("Invalid calendar data contained in \"$importPath\""); + $output->writeln("Invalid calendar data contained in \"$importPath\", skipping…"); + continue; } $splitFilename = explode('.', $filename, 2); if (count($splitFilename) !== 2) { - throw new CalendarMigratorException("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '"'); + $output->writeln("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '", skipping…'); + continue; } [$initialCalendarUri, $ext] = $splitFilename; diff --git a/apps/dav/lib/UserMigration/ContactsMigrator.php b/apps/dav/lib/UserMigration/ContactsMigrator.php index 879642b9dc1..38c53a1f76e 100644 --- a/apps/dav/lib/UserMigration/ContactsMigrator.php +++ b/apps/dav/lib/UserMigration/ContactsMigrator.php @@ -160,6 +160,9 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { ))); } + /** + * @throws InvalidAddressBookException + */ private function getUniqueAddressBookUri(IUser $user, string $initialAddressBookUri): string { $principalUri = $this->getPrincipalUri($user); @@ -168,7 +171,7 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { : ContactsMigrator::MIGRATED_URI_PREFIX . $initialAddressBookUri; if ($initialAddressBookUri === '') { - throw new ContactsMigratorException('Failed to get unique address book URI'); + throw new InvalidAddressBookException(); } $existingAddressBookUris = array_map( @@ -272,6 +275,8 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { /** * @param array{displayName: string, description?: string} $metadata * @param VCard[] $vCards + * + * @throws InvalidAddressBookException */ private function importAddressBook(IUser $user, string $filename, string $initialAddressBookUri, array $metadata, array $vCards, OutputInterface $output): void { $principalUri = $this->getPrincipalUri($user); @@ -366,24 +371,29 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { $splitFilename = explode('.', $addressBookFilename, 2); if (count($splitFilename) !== 2) { - throw new ContactsMigratorException("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '"'); + $output->writeln("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '", skipping…'); + continue; } [$initialAddressBookUri, $ext] = $splitFilename; /** @var array{displayName: string, description?: string} $metadata */ $metadata = json_decode($importSource->getFileContents($metadataImportPath), true, 512, JSON_THROW_ON_ERROR); - $this->importAddressBook( - $user, - $addressBookFilename, - $initialAddressBookUri, - $metadata, - $vCards, - $output, - ); - - foreach ($vCards as $vCard) { - $vCard->destroy(); + try { + $this->importAddressBook( + $user, + $addressBookFilename, + $initialAddressBookUri, + $metadata, + $vCards, + $output, + ); + } catch (InvalidAddressBookException $e) { + // Allow this exception to skip a failed import + } finally { + foreach ($vCards as $vCard) { + $vCard->destroy(); + } } } } |