Load cert file before syncing addressbooks and contacts

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-03-23 14:33:25 +01:00 committed by Bjoern Schiessle
parent aa26a3ae74
commit 33867f331c
No known key found for this signature in database
GPG Key ID: 2378A753E2BF04F6
1 changed files with 31 additions and 16 deletions

View 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);
}
/**