diff options
author | Lukas Reschke <lukas@owncloud.com> | 2015-08-22 14:36:01 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2015-08-22 14:39:43 +0200 |
commit | 0a1d551090696b6423cf4fe0740468bff912a972 (patch) | |
tree | 5efff5151f8bea86ec11d8d5db6d71c40d890cab /apps/files_sharing/lib/controllers | |
parent | 510010e774c4019b7fc616c90085649abb7afac3 (diff) | |
download | nextcloud-server-0a1d551090696b6423cf4fe0740468bff912a972.tar.gz nextcloud-server-0a1d551090696b6423cf4fe0740468bff912a972.zip |
Use IClientService to check for remote ownCloud instances
1. Allows to set a timeout (though still not perfect but way better than before)
2. Allows to have unit tests
3. I also added unit tests for the existing controller code
4. Corrected PHPDoc on IClient
Diffstat (limited to 'apps/files_sharing/lib/controllers')
-rw-r--r-- | apps/files_sharing/lib/controllers/externalsharescontroller.php | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/apps/files_sharing/lib/controllers/externalsharescontroller.php b/apps/files_sharing/lib/controllers/externalsharescontroller.php index 494a544b2b8..6eb9d3c13d9 100644 --- a/apps/files_sharing/lib/controllers/externalsharescontroller.php +++ b/apps/files_sharing/lib/controllers/externalsharescontroller.php @@ -23,11 +23,11 @@ namespace OCA\Files_Sharing\Controllers; -use OC; -use OCP; use OCP\AppFramework\Controller; use OCP\IRequest; use OCP\AppFramework\Http\JSONResponse; +use OCP\Http\Client\IClientService; +use OCP\AppFramework\Http\DataResponse; /** * Class ExternalSharesController @@ -40,20 +40,25 @@ class ExternalSharesController extends Controller { private $incomingShareEnabled; /** @var \OCA\Files_Sharing\External\Manager */ private $externalManager; + /** @var IClientService */ + private $clientService; /** * @param string $appName * @param IRequest $request * @param bool $incomingShareEnabled * @param \OCA\Files_Sharing\External\Manager $externalManager + * @param IClientService $clientService */ public function __construct($appName, IRequest $request, $incomingShareEnabled, - \OCA\Files_Sharing\External\Manager $externalManager) { + \OCA\Files_Sharing\External\Manager $externalManager, + IClientService $clientService) { parent::__construct($appName, $request); $this->incomingShareEnabled = $incomingShareEnabled; $this->externalManager = $externalManager; + $this->clientService = $clientService; } /** @@ -97,4 +102,43 @@ class ExternalSharesController extends Controller { return new JSONResponse(); } + /** + * Test whether the specified remote is accessible + * + * @param string $remote + * @return bool + */ + protected function testUrl($remote) { + try { + $client = $this->clientService->newClient(); + $response = json_decode($client->get( + $remote, + [ + 'timeout' => 3, + 'connect_timeout' => 3, + ] + )->getBody()); + + return !empty($response->version) && version_compare($response->version, '7.0.0', '>='); + } catch (\Exception $e) { + return false; + } + } + + /** + * @PublicPage + * + * @param string $remote + * @return DataResponse + */ + public function testRemote($remote) { + if ($this->testUrl('https://' . $remote . '/status.php')) { + return new DataResponse('https'); + } elseif ($this->testUrl('http://' . $remote . '/status.php')) { + return new DataResponse('http'); + } else { + return new DataResponse(false); + } + } + } |