From d06ef07a97a9ca8826d9c47c925f633c145683a7 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@arthur-schiwon.de>
Date: Wed, 12 Feb 2020 13:31:11 +0100
Subject: [PATCH] disable timeout on app install via cli

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
---
 lib/private/Installer.php   | 19 +++++++++++++------
 lib/private/Server.php      |  3 ++-
 tests/lib/InstallerTest.php | 12 ++++++++----
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index 790bec0ddd5..b3919f22d03 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -70,6 +70,8 @@ class Installer {
 	private $apps = null;
 	/** @var bool|null - for caching the result of the ready status */
 	private $isInstanceReadyForUpdates = null;
+	/** @var bool */
+	private $isCLI;
 
 	/**
 	 * @param AppFetcher $appFetcher
@@ -78,16 +80,20 @@ class Installer {
 	 * @param ILogger $logger
 	 * @param IConfig $config
 	 */
-	public function __construct(AppFetcher $appFetcher,
-								IClientService $clientService,
-								ITempManager $tempManager,
-								ILogger $logger,
-								IConfig $config) {
+	public function __construct(
+		AppFetcher $appFetcher,
+		IClientService $clientService,
+		ITempManager $tempManager,
+		ILogger $logger,
+		IConfig $config,
+		bool $isCLI
+	) {
 		$this->appFetcher = $appFetcher;
 		$this->clientService = $clientService;
 		$this->tempManager = $tempManager;
 		$this->logger = $logger;
 		$this->config = $config;
+		$this->isCLI = $isCLI;
 	}
 
 	/**
@@ -270,8 +276,9 @@ class Installer {
 
 				// Download the release
 				$tempFile = $this->tempManager->getTemporaryFile('.tar.gz');
+				$timeout = $this->isCLI ? 0 : 120;
 				$client = $this->clientService->newClient();
-				$client->get($app['releases'][0]['download'], ['save_to' => $tempFile, 'timeout' => 120]);
+				$client->get($app['releases'][0]['download'], ['save_to' => $tempFile, 'timeout' => $timeout]);
 
 				// Check if the signature actually matches the downloaded content
 				$certificate = openssl_get_publickey($app['certificate']);
diff --git a/lib/private/Server.php b/lib/private/Server.php
index caaacab0a0a..d6c8e57d696 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -1272,7 +1272,8 @@ class Server extends ServerContainer implements IServerContainer {
 				$c->getHTTPClientService(),
 				$c->getTempManager(),
 				$c->getLogger(),
-				$c->getConfig()
+				$c->getConfig(),
+				\OC::$CLI
 			);
 		});
 
diff --git a/tests/lib/InstallerTest.php b/tests/lib/InstallerTest.php
index 01a2506270a..4530784e8e2 100644
--- a/tests/lib/InstallerTest.php
+++ b/tests/lib/InstallerTest.php
@@ -57,7 +57,8 @@ class InstallerTest extends TestCase {
 			\OC::$server->getHTTPClientService(),
 			\OC::$server->getTempManager(),
 			\OC::$server->getLogger(),
-			$config
+			$config,
+			false
 		);
 		$installer->removeApp(self::$appid);
 	}
@@ -68,7 +69,8 @@ class InstallerTest extends TestCase {
 			$this->clientService,
 			$this->tempManager,
 			$this->logger,
-			$this->config
+			$this->config,
+			false
 		);
 	}
 
@@ -78,7 +80,8 @@ class InstallerTest extends TestCase {
 			\OC::$server->getHTTPClientService(),
 			\OC::$server->getTempManager(),
 			\OC::$server->getLogger(),
-			\OC::$server->getConfig()
+			\OC::$server->getConfig(),
+			false
 		);
 		$installer->removeApp(self::$appid);
 		\OC::$server->getConfig()->setSystemValue('appstoreenabled', $this->appstore);
@@ -101,7 +104,8 @@ class InstallerTest extends TestCase {
 			\OC::$server->getHTTPClientService(),
 			\OC::$server->getTempManager(),
 			\OC::$server->getLogger(),
-			\OC::$server->getConfig()
+			\OC::$server->getConfig(),
+			false
 		);
 		$this->assertNull(\OC::$server->getConfig()->getAppValue('testapp', 'enabled', null), 'Check that the app is not listed before installation');
 		$this->assertSame('testapp', $installer->installApp(self::$appid));
-- 
GitLab