From 5763ed18f28dcedcf4c24307a4124e8dc65a2840 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Mon, 6 Dec 2021 09:22:45 +0100 Subject: [PATCH] Fetch LDAP provider factory on demand The provider is not injectible on Nextcloud 20. Therefore it needs some error handling to factor in the possible absence. Signed-off-by: Christoph Wurst --- lib/Service/Provisioning/Manager.php | 32 +++++++++++++++++----------- tests/psalm-baseline.xml | 7 ++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/lib/Service/Provisioning/Manager.php b/lib/Service/Provisioning/Manager.php index b545e0f153..a364e56dbd 100644 --- a/lib/Service/Provisioning/Manager.php +++ b/lib/Service/Provisioning/Manager.php @@ -34,12 +34,14 @@ use OCA\Mail\Exception\ValidationException; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; +use OCP\IServerContainer; use OCP\IUser; use OCP\IUserManager; use OCP\LDAP\ILDAPProvider; use OCP\LDAP\ILDAPProviderFactory; use OCP\Security\ICrypto; use Psr\Log\LoggerInterface; +use Throwable; class Manager { @@ -55,8 +57,8 @@ class Manager { /** @var ICrypto */ private $crypto; - /** @var ILDAPProviderFactory */ - private $ldapProviderFactory; + /** @var IServerContainer */ + private $serverContainer; /** @var AliasMapper */ private $aliasMapper; @@ -71,7 +73,7 @@ public function __construct(IUserManager $userManager, ProvisioningMapper $provisioningMapper, MailAccountMapper $mailAccountMapper, ICrypto $crypto, - ILDAPProviderFactory $ldapProviderFactory, + IServerContainer $appContainer, AliasMapper $aliasMapper, LoggerInterface $logger, TagMapper $tagMapper) { @@ -79,7 +81,7 @@ public function __construct(IUserManager $userManager, $this->provisioningMapper = $provisioningMapper; $this->mailAccountMapper = $mailAccountMapper; $this->crypto = $crypto; - $this->ldapProviderFactory = $ldapProviderFactory; + $this->serverContainer = $appContainer; $this->aliasMapper = $aliasMapper; $this->logger = $logger; $this->tagMapper = $tagMapper; @@ -160,16 +162,22 @@ public function ldapAliasesIntegration(Provisioning $provisioning, IUser $user): return $provisioning; } - /** @psalm-suppress UndefinedInterfaceMethod */ - if ($this->ldapProviderFactory->isAvailable() === false) { - $this->logger->debug('Request to provision mail aliases but LDAP not available'); - return $provisioning; + try { + $ldapProviderFactory = $this->serverContainer->get(ILDAPProviderFactory::class); + /** @psalm-suppress UndefinedInterfaceMethod */ + if ($ldapProviderFactory->isAvailable() === false) { + $this->logger->debug('Request to provision mail aliases but LDAP not available'); + return $provisioning; + } + $ldapProvider = $ldapProviderFactory->getLDAPProvider(); + /** @psalm-suppress UndefinedInterfaceMethod */ + $provisioning->setAliases($ldapProvider->getMultiValueUserAttribute($user->getUID(), $provisioning->getLdapAliasesAttribute())); + } catch (Throwable $e) { + $this->logger->debug('Request to provision mail aliases but LDAP erros: ' . $e->getMessage(), [ + 'exception' => $e, + ]); } - $ldapProvider = $this->ldapProviderFactory->getLDAPProvider(); - /** @psalm-suppress UndefinedInterfaceMethod */ - $provisioning->setAliases($ldapProvider->getMultiValueUserAttribute($user->getUID(), $provisioning->getLdapAliasesAttribute())); - return $provisioning; } diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml index 66cc2bf0ee..84d260f538 100644 --- a/tests/psalm-baseline.xml +++ b/tests/psalm-baseline.xml @@ -311,6 +311,13 @@ SaveDraftEvent + + + $this->serverContainer + IServerContainer + IServerContainer + + NewMessagesSynchronized