aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-02-23 21:28:53 +0100
committerGitHub <noreply@github.com>2024-02-23 21:28:53 +0100
commit3cc50790bc9883f8637a916132c1b4322527d59e (patch)
tree191c947bb09cff0cf4fff8c15b5fddb9d0986b4f /apps
parentf40c2a03b01ef55c329951adf4d808aed0b1c5e2 (diff)
parenta770fd82364569851b92a7e5f49db98f0c58c640 (diff)
downloadnextcloud-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.php14
-rw-r--r--apps/dav/lib/UserMigration/ContactsMigrator.php36
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();
+ }
}
}
}