summaryrefslogtreecommitdiffstats
path: root/lib/private/updater.php
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-02-17 12:00:39 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2015-02-24 12:02:36 +0100
commitbbf7f56f949f48ec0cf95d416b431d0cd739582f (patch)
treeadb18b5b46738e81093444ae1fa860e48647373a /lib/private/updater.php
parente5c6af51027f786d74f859584f0aa6c85db6ead6 (diff)
downloadnextcloud-server-bbf7f56f949f48ec0cf95d416b431d0cd739582f.tar.gz
nextcloud-server-bbf7f56f949f48ec0cf95d416b431d0cd739582f.zip
3rd-party apps are disabled on upgrade - refs #14026
Diffstat (limited to 'lib/private/updater.php')
-rw-r--r--lib/private/updater.php93
1 files changed, 55 insertions, 38 deletions
diff --git a/lib/private/updater.php b/lib/private/updater.php
index f76630d411d..41ce779d7db 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -30,6 +30,9 @@
namespace OC;
use OC\Hooks\BasicEmitter;
+use OC_App;
+use OC_Util;
+use OCP\IConfig;
/**
* Class that handles autoupdating of ownCloud
@@ -42,29 +45,27 @@ use OC\Hooks\BasicEmitter;
*/
class Updater extends BasicEmitter {
- /**
- * @var \OC\Log $log
- */
+ /** @var \OC\Log $log */
private $log;
- /**
- * @var \OC\HTTPHelper $helper;
- */
+ /** @var \OC\HTTPHelper $helper */
private $httpHelper;
- /**
- * @var \OCP\IAppConfig;
- */
+ /** @var IConfig */
private $config;
+ /** @var bool */
private $simulateStepEnabled;
+ /** @var bool */
private $updateStepEnabled;
/**
+ * @param HTTPHelper $httpHelper
+ * @param IConfig $config
* @param \OC\Log $log
*/
- public function __construct($httpHelper, $config, $log = null) {
+ public function __construct(HTTPHelper $httpHelper, IConfig $config, $log = null) {
$this->httpHelper = $httpHelper;
$this->log = $log;
$this->config = $config;
@@ -102,23 +103,23 @@ class Updater extends BasicEmitter {
public function check($updaterUrl = null) {
// Look up the cache - it is invalidated all 30 minutes
- if (($this->config->getValue('core', 'lastupdatedat') + 1800) > time()) {
- return json_decode($this->config->getValue('core', 'lastupdateResult'), true);
+ if (((int)$this->config->getAppValue('core', 'lastupdatedat') + 1800) > time()) {
+ return json_decode($this->config->getAppValue('core', 'lastupdateResult'), true);
}
if (is_null($updaterUrl)) {
$updaterUrl = 'https://apps.owncloud.com/updater.php';
}
- $this->config->setValue('core', 'lastupdatedat', time());
+ $this->config->setAppValue('core', 'lastupdatedat', time());
- if ($this->config->getValue('core', 'installedat', '') == '') {
- $this->config->setValue('core', 'installedat', microtime(true));
+ if ($this->config->getAppValue('core', 'installedat', '') == '') {
+ $this->config->setAppValue('core', 'installedat', microtime(true));
}
$version = \OC_Util::getVersion();
- $version['installed'] = $this->config->getValue('core', 'installedat');
- $version['updated'] = $this->config->getValue('core', 'lastupdatedat');
+ $version['installed'] = $this->config->getAppValue('core', 'installedat');
+ $version['updated'] = $this->config->getAppValue('core', 'lastupdatedat');
$version['updatechannel'] = \OC_Util::getChannel();
$version['edition'] = \OC_Util::getEditionString();
$version['build'] = \OC_Util::getBuild();
@@ -146,7 +147,7 @@ class Updater extends BasicEmitter {
}
// Cache the result
- $this->config->setValue('core', 'lastupdateResult', json_encode($data));
+ $this->config->setAppValue('core', 'lastupdateResult', json_encode($data));
return $tmp;
}
@@ -157,9 +158,9 @@ class Updater extends BasicEmitter {
* @return bool true if the operation succeeded, false otherwise
*/
public function upgrade() {
- \OC_Config::setValue('maintenance', true);
+ $this->config->setSystemValue('maintenance', true);
- $installedVersion = \OC_Config::getValue('version', '0.0.0');
+ $installedVersion = $this->config->getSystemValue('version', '0.0.0');
$currentVersion = implode('.', \OC_Util::getVersion());
if ($this->log) {
$this->log->debug('starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, array('app' => 'core'));
@@ -172,7 +173,7 @@ class Updater extends BasicEmitter {
$this->emit('\OC\Updater', 'failure', array($exception->getMessage()));
}
- \OC_Config::setValue('maintenance', false);
+ $this->config->setSystemValue('maintenance', false);
$this->emit('\OC\Updater', 'maintenanceEnd');
}
@@ -220,10 +221,10 @@ class Updater extends BasicEmitter {
// create empty file in data dir, so we can later find
// out that this is indeed an ownCloud data directory
// (in case it didn't exist before)
- file_put_contents(\OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data') . '/.ocdata', '');
+ file_put_contents($this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/.ocdata', '');
// pre-upgrade repairs
- $repair = new \OC\Repair(\OC\Repair::getBeforeUpgradeRepairSteps());
+ $repair = new Repair(Repair::getBeforeUpgradeRepairSteps());
$repair->run();
// simulate DB upgrade
@@ -238,22 +239,18 @@ class Updater extends BasicEmitter {
if ($this->updateStepEnabled) {
$this->doCoreUpgrade();
- $disabledApps = \OC_App::checkAppsRequirements();
- if (!empty($disabledApps)) {
- $this->emit('\OC\Updater', 'disabledApps', array($disabledApps));
- }
-
+ $this->checkAppsRequirements();
$this->doAppUpgrade();
// post-upgrade repairs
- $repair = new \OC\Repair(\OC\Repair::getRepairSteps());
+ $repair = new Repair(Repair::getRepairSteps());
$repair->run();
//Invalidate update feed
- $this->config->setValue('core', 'lastupdatedat', 0);
+ $this->config->setAppValue('core', 'lastupdatedat', 0);
// only set the final version if everything went well
- \OC_Config::setValue('version', implode('.', \OC_Util::getVersion()));
+ $this->config->setSystemValue('version', implode('.', \OC_Util::getVersion()));
}
}
@@ -278,14 +275,11 @@ class Updater extends BasicEmitter {
$apps = \OC_App::getEnabledApps();
foreach ($apps as $appId) {
- if ($version) {
- $info = \OC_App::getAppInfo($appId);
- $compatible = \OC_App::isAppCompatible($version, $info);
- } else {
- $compatible = true;
- }
+ $info = \OC_App::getAppInfo($appId);
+ $compatible = \OC_App::isAppCompatible($version, $info);
+ $isShipped = \OC_App::isShipped($appId);
- if ($compatible && \OC_App::shouldUpgrade($appId)) {
+ if ($compatible && $isShipped && \OC_App::shouldUpgrade($appId)) {
/**
* FIXME: The preupdate check is performed before the database migration, otherwise database changes
* are not possible anymore within it. - Consider this when touching the code.
@@ -356,5 +350,28 @@ class Updater extends BasicEmitter {
}
}
}
+
+ /**
+ * check if the current enabled apps are compatible with the current
+ * ownCloud version. disable them if not.
+ * This is important if you upgrade ownCloud and have non ported 3rd
+ * party apps installed.
+ */
+ private function checkAppsRequirements() {
+ $apps = OC_App::getEnabledApps();
+ $version = OC_Util::getVersion();
+ foreach ($apps as $app) {
+ // check if the app is compatible with this version of ownCloud
+ $info = OC_App::getAppInfo($app);
+ if(!OC_App::isAppCompatible($version, $info)) {
+ OC_App::disable($app);
+ $this->emit('\OC\Updater', 'incompatibleAppDisabled', array($app));
+ }
+ if (!OC_App::isShipped($app)) {
+ \OC_App::disable($app);
+ $this->emit('\OC\Updater', 'thirdPartyAppDisabled', array($app));
+ }
+ }
+ }
}