summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/lib/controllers/externalsharescontroller.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/lib/controllers/externalsharescontroller.php')
-rw-r--r--apps/files_sharing/lib/controllers/externalsharescontroller.php50
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);
+ }
+ }
+
}