diff options
Diffstat (limited to 'apps/files_sharing/lib/controllers/externalsharescontroller.php')
-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); + } + } + } |