use ocs discover endpoint to test remote

This commit is contained in:
Robin Appelman 2016-02-29 15:17:06 +01:00 committed by Lukas Reschke
parent 52d217d775
commit 080a62231e
2 changed files with 27 additions and 8 deletions

View file

@ -96,9 +96,10 @@ class ExternalSharesController extends Controller {
* Test whether the specified remote is accessible
*
* @param string $remote
* @param bool $checkVersion
* @return bool
*/
protected function testUrl($remote) {
protected function testUrl($remote, $checkVersion = false) {
try {
$client = $this->clientService->newClient();
$response = json_decode($client->get(
@ -109,7 +110,11 @@ class ExternalSharesController extends Controller {
]
)->getBody());
return !empty($response->version) && version_compare($response->version, '7.0.0', '>=');
if ($checkVersion) {
return !empty($response->version) && version_compare($response->version, '7.0.0', '>=');
} else {
return is_object($response);
}
} catch (\Exception $e) {
return false;
}
@ -124,9 +129,17 @@ class ExternalSharesController extends Controller {
* @return DataResponse
*/
public function testRemote($remote) {
if ($this->testUrl('https://' . $remote . '/status.php')) {
if (
$this->testUrl('https://' . $remote . '/ocs-provider') ||
$this->testUrl('https://' . $remote . '/ocs-provider/index.php') ||
$this->testUrl('https://' . $remote . '/status.php', true)
) {
return new DataResponse('https');
} elseif ($this->testUrl('http://' . $remote . '/status.php')) {
} elseif (
$this->testUrl('http://' . $remote . '/ocs-provider') ||
$this->testUrl('http://' . $remote . '/ocs-provider/index.php') ||
$this->testUrl('http://' . $remote . '/status.php', true)
) {
return new DataResponse('http');
} else {
return new DataResponse(false);

View file

@ -218,20 +218,26 @@ class Storage extends DAV implements ISharedStorage {
}
/**
* check if the configured remote is a valid ownCloud instance
* check if the configured remote is a valid federated share provider
*
* @return bool
*/
protected function testRemote() {
try {
$result = file_get_contents($this->remote . '/status.php');
$data = json_decode($result);
return is_object($data) and !empty($data->version);
return $this->testRemoteUrl($this->remote . '/ocs-provider/index.php')
|| $this->testRemoteUrl($this->remote . '/ocs-provider')
|| $this->testRemoteUrl($this->remote . '/status.php');
} catch (\Exception $e) {
return false;
}
}
private function testRemoteUrl($url) {
$result = file_get_contents($url);
$data = json_decode($result);
return (is_object($data) and !empty($data->version));
}
/**
* @return mixed
* @throws ForbiddenException