diff --git a/apps/dav/lib/CardDAV/SyncService.php b/apps/dav/lib/CardDAV/SyncService.php index b0a4ce81e7..477e912a79 100644 --- a/apps/dav/lib/CardDAV/SyncService.php +++ b/apps/dav/lib/CardDAV/SyncService.php @@ -26,6 +26,7 @@ namespace OCA\DAV\CardDAV; use OC\Accounts\AccountManager; use OCP\AppFramework\Http; +use OCP\ICertificateManager; use OCP\ILogger; use OCP\IUser; use OCP\IUserManager; @@ -68,12 +69,7 @@ class SyncService { $this->userManager = $userManager; $this->logger = $logger; $this->accountManager = $accountManager; - - $certManager = \OC::$server->getCertificateManager(null); - $certPath = $certManager->getAbsoluteBundlePath(); - if (file_exists($certPath)) { - $this->certPath = $certPath; - } + $this->certPath = ''; } /** @@ -141,6 +137,28 @@ class SyncService { return $this->backend->getAddressBooksByUri($principal, $id); } + /** + * Check if there is a valid certPath we should use + * + * @return string + */ + protected function getCertPath() { + + // we already have a valid certPath + if ($this->certPath !== '') { + return $this->certPath; + } + + /** @var ICertificateManager $certManager */ + $certManager = \OC::$server->getCertificateManager(null); + $certPath = $certManager->getAbsoluteBundlePath(); + if (file_exists($certPath)) { + $this->certPath = $certPath; + } + + return $this->certPath; + } + /** * @param string $url * @param string $userName @@ -154,9 +172,10 @@ class SyncService { 'password' => $sharedSecret, ]; $client = new Client($settings); + $certPath = $this->getCertPath(); $client->setThrowExceptions(true); - if (strpos($url, 'http://') !== 0 && $this->certPath) { + if ($certPath !== '' && strpos($url, 'http://') !== 0) { $client->addCurlSetting(CURLOPT_CAINFO, $this->certPath); } diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php index de4e8ead4c..c06e485774 100644 --- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php +++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php @@ -179,7 +179,7 @@ class SyncServiceTest extends TestCase { $accountManager = $this->getMockBuilder('OC\Accounts\AccountManager')->disableOriginalConstructor()->getMock(); /** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $ss */ $ss = $this->getMockBuilder(SyncService::class) - ->setMethods(['ensureSystemAddressBookExists', 'requestSyncReport', 'download']) + ->setMethods(['ensureSystemAddressBookExists', 'requestSyncReport', 'download', 'getCertPath']) ->setConstructorArgs([$backend, $userManager, $logger, $accountManager]) ->getMock(); $ss->method('requestSyncReport')->withAnyParameters()->willReturn(['response' => $response, 'token' => 'sync-token-1']); @@ -189,6 +189,7 @@ class SyncServiceTest extends TestCase { 'statusCode' => 200, 'headers' => [] ]); + $ss->method('getCertPath')->willReturn(''); return $ss; }