Browse Source

Add timeouts to make the UI usable again when a remote share is unreachable

Joas Schilling 8 years ago
parent
commit
3e763ac81e

+ 4 - 1
apps/federatedfilesharing/lib/DiscoveryManager.php

@@ -84,7 +84,10 @@ class DiscoveryManager {
 
 		// Read the data from the response body
 		try {
-			$response = $this->client->get($remote . '/ocs-provider/');
+			$response = $this->client->get($remote . '/ocs-provider/', [
+				'timeout' => 3,
+				'connect_timeout' => 3,
+			]);
 			if($response->getStatusCode() === 200) {
 				$decodedService = json_decode($response->getBody(), true);
 				if(is_array($decodedService)) {

+ 3 - 1
apps/federatedfilesharing/lib/Notifications.php

@@ -287,7 +287,9 @@ class Notifications {
 			$endpoint = $this->discoveryManager->getShareEndpoint($protocol . $remoteDomain);
 			try {
 				$response = $client->post($protocol . $remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, [
-					'body' => $fields
+					'body' => $fields,
+					'timeout' => 3,
+					'connect_timeout' => 3,
 				]);
 				$result['result'] = $response->getBody();
 				$result['success'] = true;

+ 4 - 1
apps/files_sharing/ajax/external.php

@@ -77,7 +77,10 @@ $externalManager = new \OCA\Files_Sharing\External\Manager(
 // check for ssl cert
 if (substr($remote, 0, 5) === 'https') {
 	try {
-		\OC::$server->getHTTPClientService()->newClient()->get($remote)->getBody();
+		\OC::$server->getHTTPClientService()->newClient()->get($remote, [
+			'timeout' => 3,
+			'connect_timeout' => 3,
+		])->getBody();
 	} catch (\Exception $e) {
 		\OCP\JSON::error(array('data' => array('message' => $l->t('Invalid or untrusted SSL certificate'))));
 		exit;

+ 9 - 2
apps/files_sharing/lib/External/Storage.php

@@ -254,7 +254,10 @@ class Storage extends DAV implements ISharedStorage {
 
 		$client = $this->httpClient->newClient();
 		try {
-			$result = $client->get($url)->getBody();
+			$result = $client->get($url, [
+				'timeout' => 3,
+				'connect_timeout' => 3,
+			])->getBody();
 			$data = json_decode($result);
 			$returnValue = (is_object($data) && !empty($data->version));
 		} catch (ConnectException $e) {
@@ -301,7 +304,11 @@ class Storage extends DAV implements ISharedStorage {
 		// TODO: DI
 		$client = \OC::$server->getHTTPClientService()->newClient();
 		try {
-			$response = $client->post($url, ['body' => ['password' => $password]]);
+			$response = $client->post($url, [
+				'body' => ['password' => $password],
+				'timeout' => 3,
+				'connect_timeout' => 3,
+			]);
 		} catch (\GuzzleHttp\Exception\RequestException $e) {
 			if ($e->getCode() === 401 || $e->getCode() === 403) {
 				throw new ForbiddenException();