From 3fa604cc5edad8efae30cb33b13e3a23ee2494fd Mon Sep 17 00:00:00 2001
From: Morris Jobke <hey@morrisjobke.de>
Date: Wed, 10 May 2017 22:26:51 -0500
Subject: [PATCH] Allow to enforce update via web UI

* adds a disclaimer that an update via web UI is on own risk
* allows to skip the warning
* fixes #4353

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
---
 core/css/guest.css                | 14 ++++++++++++++
 core/templates/update.use-cli.php |  9 +++++++++
 lib/base.php                      |  5 ++++-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/core/css/guest.css b/core/css/guest.css
index 689eb45d65f..cf9bec50dc3 100644
--- a/core/css/guest.css
+++ b/core/css/guest.css
@@ -178,6 +178,17 @@ input.updateButton,
 input.update-continue {
 	padding: 10px 20px; /* larger log in and installation buttons */
 }
+.updateAnyways a.updateAnywaysButton {
+	font-size: 14px;
+	padding: 10px 20px;
+	color: #666 !important;
+	display: inline-block;
+	border-radius: 3px;
+	margin: 15px 5px;
+}
+.updateAnyways a.updateAnywaysButton:hover {
+	color: #222 !important;
+}
 input.primary,
 button.primary {
 	border: 1px solid #0082c9;
@@ -442,6 +453,9 @@ form #selectDbType label.ui-state-active {
 	border-radius: 3px;
 	cursor: default;
 }
+.warning.updateAnyways {
+	text-align: center;
+}
 .warning legend,
 .warning a,
 .error a {
diff --git a/core/templates/update.use-cli.php b/core/templates/update.use-cli.php
index 9fbdbca8b21..d30e15c8573 100644
--- a/core/templates/update.use-cli.php
+++ b/core/templates/update.use-cli.php
@@ -11,4 +11,13 @@
 			print_unescaped($l->t('For help, see the  <a target="_blank" rel="noreferrer" href="%s">documentation</a>.', [link_to_docs('admin-cli-upgrade')])); ?><br><br>
 		</div>
 	</div>
+
+	<?php if ($_['tooBig']) { ?>
+		<div class="warning updateAnyways">
+			<?php p($l->t('I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure.' )); ?>
+			<a href="?IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup=IAmSuperSureToDoThis" class="button updateAnywaysButton"><?php p($l->t('Upgrade via web on my own risk' )); ?></a>
+		</div>
+	<?php } ?>
+
+
 </div>
diff --git a/lib/base.php b/lib/base.php
index 483cd656916..0a51d3af5fc 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -343,7 +343,10 @@ class OC {
 				$tooBig = ($totalUsers > 50);
 			}
 		}
-		if ($disableWebUpdater || $tooBig) {
+		$ignoreTooBigWarning = isset($_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup']) &&
+			$_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup'] === 'IAmSuperSureToDoThis';
+
+		if ($disableWebUpdater || ($tooBig && !$ignoreTooBigWarning)) {
 			// send http status 503
 			header('HTTP/1.1 503 Service Temporarily Unavailable');
 			header('Status: 503 Service Temporarily Unavailable');
-- 
GitLab