|
|
|
|
@ -22,29 +22,19 @@ use OCP\IUserManager; |
|
|
|
|
use OCP\User\Events\UserChangedEvent; |
|
|
|
|
|
|
|
|
|
class CloudIdManager implements ICloudIdManager { |
|
|
|
|
/** @var IManager */ |
|
|
|
|
private $contactsManager; |
|
|
|
|
/** @var IURLGenerator */ |
|
|
|
|
private $urlGenerator; |
|
|
|
|
/** @var IUserManager */ |
|
|
|
|
private $userManager; |
|
|
|
|
private ICache $memCache; |
|
|
|
|
private ICache $displayNameCache; |
|
|
|
|
/** @var array[] */ |
|
|
|
|
private array $cache = []; |
|
|
|
|
/** @var ICloudIdResolver[] */ |
|
|
|
|
private array $cloudIdResolvers = []; |
|
|
|
|
|
|
|
|
|
public function __construct( |
|
|
|
|
IManager $contactsManager, |
|
|
|
|
IURLGenerator $urlGenerator, |
|
|
|
|
IUserManager $userManager, |
|
|
|
|
ICacheFactory $cacheFactory, |
|
|
|
|
IEventDispatcher $eventDispatcher, |
|
|
|
|
private IManager $contactsManager, |
|
|
|
|
private IURLGenerator $urlGenerator, |
|
|
|
|
private IUserManager $userManager, |
|
|
|
|
) { |
|
|
|
|
$this->contactsManager = $contactsManager; |
|
|
|
|
$this->urlGenerator = $urlGenerator; |
|
|
|
|
$this->userManager = $userManager; |
|
|
|
|
$this->memCache = $cacheFactory->createDistributed('cloud_id_'); |
|
|
|
|
$this->displayNameCache = $cacheFactory->createDistributed('cloudid_name_'); |
|
|
|
|
$eventDispatcher->addListener(UserChangedEvent::class, [$this, 'handleUserEvent']); |
|
|
|
|
@ -83,7 +73,7 @@ class CloudIdManager implements ICloudIdManager { |
|
|
|
|
*/ |
|
|
|
|
public function resolveCloudId(string $cloudId): ICloudId { |
|
|
|
|
// TODO magic here to get the url and user instead of just splitting on @ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($this->cloudIdResolvers as $resolver) { |
|
|
|
|
if ($resolver->isValidCloudId($cloudId)) { |
|
|
|
|
return $resolver->resolveCloudId($cloudId); |
|
|
|
|
@ -269,34 +259,15 @@ class CloudIdManager implements ICloudIdManager { |
|
|
|
|
return strpos($cloudId, '@') !== false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $id, |
|
|
|
|
* @param string $user |
|
|
|
|
* @param string $remote |
|
|
|
|
* @param ?string $displayName |
|
|
|
|
* @return ICloudId |
|
|
|
|
* |
|
|
|
|
* @since 32.0.0 |
|
|
|
|
*/ |
|
|
|
|
public function createCloudId(string $id, string $user, string $remote, ?string $displayName = null): ICloudId { |
|
|
|
|
return new CloudId($id, $user, $remote, $displayName); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param ICloudIdResolver $resolver |
|
|
|
|
* |
|
|
|
|
* @since 32.0.0 |
|
|
|
|
*/ |
|
|
|
|
public function registerCloudIdResolver(ICloudIdResolver $resolver) { |
|
|
|
|
public function registerCloudIdResolver(ICloudIdResolver $resolver): void { |
|
|
|
|
array_unshift($this->cloudIdResolvers, $resolver); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param ICloudIdResolver $resolver |
|
|
|
|
* |
|
|
|
|
* @since 32.0.0 |
|
|
|
|
*/ |
|
|
|
|
public function unregisterCloudIdResolver(ICloudIdResolver $resolver) { |
|
|
|
|
public function unregisterCloudIdResolver(ICloudIdResolver $resolver): void { |
|
|
|
|
if (($key = array_search($resolver, $this->cloudIdResolvers)) !== false) { |
|
|
|
|
array_splice($this->cloudIdResolvers, $key, 1); |
|
|
|
|
} |
|
|
|
|
|