diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index d00b1d2e9a3..1189712ba8d 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -132,7 +132,9 @@ class AccountManager implements IAccountManager { $property->setScope(self::SCOPE_LOCAL); } } else { - $property->setScope($property->getScope()); + // migrate scope values to the new format + // invalid scopes are mapped to a default value + $property->setScope(AccountProperty::mapScopeToV2($property->getScope())); } } diff --git a/lib/private/Accounts/AccountProperty.php b/lib/private/Accounts/AccountProperty.php index 3a89e9bbc7a..11ad03d6c7f 100644 --- a/lib/private/Accounts/AccountProperty.php +++ b/lib/private/Accounts/AccountProperty.php @@ -55,11 +55,16 @@ class AccountProperty implements IAccountProperty { * @since 15.0.0 */ public function setScope(string $scope): IAccountProperty { - if (!in_array($scope, IAccountManager::ALLOWED_SCOPES, )) { + $newScope = $this->mapScopeToV2($scope); + if (!in_array($newScope, [ + IAccountManager::SCOPE_LOCAL, + IAccountManager::SCOPE_FEDERATED, + IAccountManager::SCOPE_PRIVATE, + IAccountManager::SCOPE_PUBLISHED + ])) { throw new InvalidArgumentException('Invalid scope'); } - /** @var IAccountManager::SCOPE_* $scope */ - $this->scope = $scope; + $this->scope = $newScope; return $this; } @@ -100,6 +105,19 @@ class AccountProperty implements IAccountProperty { return $this->scope; } + public static function mapScopeToV2(string $scope): string { + if (str_starts_with($scope, 'v2-')) { + return $scope; + } + + return match ($scope) { + 'private', '' => IAccountManager::SCOPE_LOCAL, + 'contacts' => IAccountManager::SCOPE_FEDERATED, + 'public' => IAccountManager::SCOPE_PUBLISHED, + default => $scope, + }; + } + /** * Get the verification status of a property *