From da25ed997e25fb31fcb0b1fe992d38992ff071d7 Mon Sep 17 00:00:00 2001
From: Roeland Jago Douma <roeland@famdouma.nl>
Date: Tue, 19 Nov 2019 11:01:00 +0100
Subject: [PATCH] Do not check for updates if we have no internet

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
---
 lib/private/Updater/VersionCheck.php   |  7 +-
 tests/lib/Updater/VersionCheckTest.php | 88 +++++++++++++++++++-------
 2 files changed, 70 insertions(+), 25 deletions(-)

diff --git a/lib/private/Updater/VersionCheck.php b/lib/private/Updater/VersionCheck.php
index 3cbd7061fe0..446e04dc5ed 100644
--- a/lib/private/Updater/VersionCheck.php
+++ b/lib/private/Updater/VersionCheck.php
@@ -33,7 +33,7 @@ class VersionCheck {
 
 	/** @var IClientService */
 	private $clientService;
-	
+
 	/** @var IConfig */
 	private $config;
 
@@ -54,6 +54,11 @@ class VersionCheck {
 	 * @return array|bool
 	 */
 	public function check() {
+		// If this server is set to have no internet connection this is all not needed
+		if (!$this->config->getSystemValueBool('has_internet_connection', true)) {
+			return false;
+		}
+
 		// Look up the cache - it is invalidated all 30 minutes
 		if (((int)$this->config->getAppValue('core', 'lastupdatedat') + 1800) > time()) {
 			return json_decode($this->config->getAppValue('core', 'lastupdateResult'), true);
diff --git a/tests/lib/Updater/VersionCheckTest.php b/tests/lib/Updater/VersionCheckTest.php
index 6da4fd2c3b2..eef16eeb520 100644
--- a/tests/lib/Updater/VersionCheckTest.php
+++ b/tests/lib/Updater/VersionCheckTest.php
@@ -67,11 +67,16 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(time()));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getAppValue')
 			->with('core', 'lastupdateResult')
 			->will($this->returnValue(json_encode($expectedResult)));
@@ -92,30 +97,35 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(0));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getSystemValue')
 			->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
 			->willReturnArgument(1);
 		$this->config
-			->expects($this->at(2))
+			->expects($this->at(3))
 			->method('setAppValue')
 			->with('core', 'lastupdatedat', $this->isType('integer'));
 		$this->config
-			->expects($this->at(4))
+			->expects($this->at(5))
 			->method('getAppValue')
 			->with('core', 'installedat')
 			->will($this->returnValue('installedat'));
 		$this->config
-			->expects($this->at(5))
+			->expects($this->at(6))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue('lastupdatedat'));
 		$this->config
-			->expects($this->at(6))
+			->expects($this->at(7))
 			->method('setAppValue')
 			->with('core', 'lastupdateResult', json_encode($expectedResult));
 
@@ -140,30 +150,35 @@ class VersionCheckTest extends \Test\TestCase {
 	public function testCheckWithInvalidXml() {
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(0));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getSystemValue')
 			->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
 			->willReturnArgument(1);
 		$this->config
-			->expects($this->at(2))
+			->expects($this->at(3))
 			->method('setAppValue')
 			->with('core', 'lastupdatedat', $this->isType('integer'));
 		$this->config
-			->expects($this->at(4))
+			->expects($this->at(5))
 			->method('getAppValue')
 			->with('core', 'installedat')
 			->will($this->returnValue('installedat'));
 		$this->config
-			->expects($this->at(5))
+			->expects($this->at(6))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue('lastupdatedat'));
 		$this->config
-			->expects($this->at(6))
+			->expects($this->at(7))
 			->method('setAppValue')
 			->with('core', 'lastupdateResult', '[]');
 
@@ -190,25 +205,30 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(0));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getSystemValue')
 			->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
 			->willReturnArgument(1);
 		$this->config
-			->expects($this->at(2))
+			->expects($this->at(3))
 			->method('setAppValue')
 			->with('core', 'lastupdatedat', $this->isType('integer'));
 		$this->config
-			->expects($this->at(4))
+			->expects($this->at(5))
 			->method('getAppValue')
 			->with('core', 'installedat')
 			->will($this->returnValue('installedat'));
 		$this->config
-			->expects($this->at(5))
+			->expects($this->at(6))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue('lastupdatedat'));
@@ -235,30 +255,35 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(0));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getSystemValue')
 			->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
 			->willReturnArgument(1);
 		$this->config
-			->expects($this->at(2))
+			->expects($this->at(3))
 			->method('setAppValue')
 			->with('core', 'lastupdatedat', $this->isType('integer'));
 		$this->config
-			->expects($this->at(4))
+			->expects($this->at(5))
 			->method('getAppValue')
 			->with('core', 'installedat')
 			->will($this->returnValue('installedat'));
 		$this->config
-			->expects($this->at(5))
+			->expects($this->at(6))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue('lastupdatedat'));
 		$this->config
-			->expects($this->at(6))
+			->expects($this->at(7))
 			->method('setAppValue')
 			->with('core', 'lastupdateResult', json_encode($expectedResult));
 
@@ -285,25 +310,30 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->config
 			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(true);
+		$this->config
+			->expects($this->at(1))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue(0));
 		$this->config
-			->expects($this->at(1))
+			->expects($this->at(2))
 			->method('getSystemValue')
 			->with('updater.server.url', 'https://updates.nextcloud.com/updater_server/')
 			->willReturnArgument(1);
 		$this->config
-			->expects($this->at(2))
+			->expects($this->at(3))
 			->method('setAppValue')
 			->with('core', 'lastupdatedat', $this->isType('integer'));
 		$this->config
-			->expects($this->at(4))
+			->expects($this->at(5))
 			->method('getAppValue')
 			->with('core', 'installedat')
 			->will($this->returnValue('installedat'));
 		$this->config
-			->expects($this->at(5))
+			->expects($this->at(6))
 			->method('getAppValue')
 			->with('core', 'lastupdatedat')
 			->will($this->returnValue('lastupdatedat'));
@@ -324,4 +354,14 @@ class VersionCheckTest extends \Test\TestCase {
 
 		$this->assertSame($expectedResult, $this->updater->check());
 	}
+
+	public function testNoInternet() {
+		$this->config
+			->expects($this->at(0))
+			->method('getSystemValueBool')
+			->with('has_internet_connection', true)
+			->willReturn(false);
+
+		$this->assertFalse($this->updater->check());
+	}
 }
-- 
GitLab