]> source.dussan.org Git - nextcloud-server.git/commitdiff
Load cert file before syncing addressbooks and contacts
authorJoas Schilling <coding@schilljs.com>
Thu, 23 Mar 2017 13:33:25 +0000 (14:33 +0100)
committerBjoern Schiessle <bjoern@schiessle.org>
Fri, 24 Mar 2017 10:06:44 +0000 (11:06 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
apps/dav/lib/CardDAV/SyncService.php

index 1293d8ae8a005cca144f9740a150fef528280e77..b0a4ce81e707ef890c757bedda9300bbcbeb8d0e 100644 (file)
@@ -52,6 +52,9 @@ class SyncService {
        /** @var AccountManager */
        private $accountManager;
 
+       /** @var string */
+       protected $certPath;
+
        /**
         * SyncService constructor.
         *
@@ -65,6 +68,12 @@ 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;
+               }
        }
 
        /**
@@ -136,10 +145,9 @@ class SyncService {
         * @param string $url
         * @param string $userName
         * @param string $sharedSecret
-        * @param string $syncToken
-        * @return array
+        * @return Client
         */
-       protected function requestSyncReport($url, $userName, $sharedSecret, $syncToken) {
+       protected function getClient($url, $userName, $sharedSecret) {
                $settings = [
                        'baseUri' => $url . '/',
                        'userName' => $userName,
@@ -148,6 +156,23 @@ class SyncService {
                $client = new Client($settings);
                $client->setThrowExceptions(true);
 
+               if (strpos($url, 'http://') !== 0 && $this->certPath) {
+                       $client->addCurlSetting(CURLOPT_CAINFO, $this->certPath);
+               }
+
+               return $client;
+       }
+
+       /**
+        * @param string $url
+        * @param string $userName
+        * @param string $sharedSecret
+        * @param string $syncToken
+        * @return array
+        */
+       protected function requestSyncReport($url, $userName, $sharedSecret, $syncToken) {
+               $client = $this->getClient($url, $userName, $sharedSecret);
+
                $addressBookUrl = "remote.php/dav/addressbooks/system/system/system";
                $body = $this->buildSyncCollectionRequestBody($syncToken);
 
@@ -155,9 +180,7 @@ class SyncService {
                        'Content-Type' => 'application/xml'
                ]);
 
-               $result = $this->parseMultiStatus($response['body']);
-
-               return $result;
+               return $this->parseMultiStatus($response['body']);
        }
 
        /**
@@ -167,16 +190,8 @@ class SyncService {
         * @return array
         */
        protected function download($url, $sharedSecret, $resourcePath) {
-               $settings = [
-                       'baseUri' => $url,
-                       'userName' => 'system',
-                       'password' => $sharedSecret,
-               ];
-               $client = new Client($settings);
-               $client->setThrowExceptions(true);
-
-               $response = $client->request('GET', $resourcePath);
-               return $response;
+               $client = $this->getClient($url, 'system', $sharedSecret);
+               return $client->request('GET', $resourcePath);
        }
 
        /**