summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2019-09-05 12:55:24 +0200
committerChristoph Wurst <christoph@winzerhof-wurst.at>2019-12-13 13:06:12 +0100
commit3eee359d7ffd6219f6a2ab8cca18a13118552842 (patch)
tree94aa2317588ce3864a3d3715330c757f61d25713 /lib/private
parent642606754b133a36d7715b45b243155cbb006f95 (diff)
downloadnextcloud-server-3eee359d7ffd6219f6a2ab8cca18a13118552842.tar.gz
nextcloud-server-3eee359d7ffd6219f6a2ab8cca18a13118552842.zip
Allow to force enable apps via CLI
Co-authored-by: Christoph Wurst <christoph@winzerhof-wurst.at> Signed-off-by: Joas Schilling <coding@schilljs.com> Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/App/AppManager.php29
-rw-r--r--lib/private/Installer.php5
-rw-r--r--lib/private/Server.php1
3 files changed, 31 insertions, 4 deletions
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php
index 130ea1510c3..937cc511985 100644
--- a/lib/private/App/AppManager.php
+++ b/lib/private/App/AppManager.php
@@ -42,6 +42,7 @@ use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\App\ManagerEvent;
use OCP\ICacheFactory;
+use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\ILogger;
@@ -66,6 +67,9 @@ class AppManager implements IAppManager {
/** @var IUserSession */
private $userSession;
+ /** @var IConfig */
+ private $config;
+
/** @var AppConfig */
private $appConfig;
@@ -101,18 +105,21 @@ class AppManager implements IAppManager {
/**
* @param IUserSession $userSession
+ * @param IConfig $config
* @param AppConfig $appConfig
* @param IGroupManager $groupManager
* @param ICacheFactory $memCacheFactory
* @param EventDispatcherInterface $dispatcher
*/
public function __construct(IUserSession $userSession,
+ IConfig $config,
AppConfig $appConfig,
IGroupManager $groupManager,
ICacheFactory $memCacheFactory,
EventDispatcherInterface $dispatcher,
ILogger $logger) {
$this->userSession = $userSession;
+ $this->config = $config;
$this->appConfig = $appConfig;
$this->groupManager = $groupManager;
$this->memCacheFactory = $memCacheFactory;
@@ -296,16 +303,29 @@ class AppManager implements IAppManager {
return isset($installedApps[$appId]);
}
+ public function ignoreNextcloudRequirementForApp(string $appId): void {
+ $ignoreMaxApps = $this->config->getSystemValue('app_install_overwrite', []);
+ if (!in_array($appId, $ignoreMaxApps, true)) {
+ $ignoreMaxApps[] = $appId;
+ $this->config->setSystemValue('app_install_overwrite', $ignoreMaxApps);
+ }
+ }
+
/**
* Enable an app for every user
*
* @param string $appId
+ * @param bool $forceEnable
* @throws AppPathNotFoundException
*/
- public function enableApp($appId) {
+ public function enableApp(string $appId, bool $forceEnable = false): void {
// Check if app exists
$this->getAppPath($appId);
+ if ($forceEnable) {
+ $this->ignoreNextcloudRequirementForApp($appId);
+ }
+
$this->installedAppsCache[$appId] = 'yes';
$this->appConfig->setValue($appId, 'enabled', 'yes');
$this->dispatcher->dispatch(ManagerEvent::EVENT_APP_ENABLE, new ManagerEvent(
@@ -334,10 +354,11 @@ class AppManager implements IAppManager {
*
* @param string $appId
* @param \OCP\IGroup[] $groups
+ * @param bool $forceEnable
* @throws \InvalidArgumentException if app can't be enabled for groups
* @throws AppPathNotFoundException
*/
- public function enableAppForGroups($appId, $groups) {
+ public function enableAppForGroups(string $appId, array $groups, bool $forceEnable = false): void {
// Check if app exists
$this->getAppPath($appId);
@@ -346,6 +367,10 @@ class AppManager implements IAppManager {
throw new \InvalidArgumentException("$appId can't be enabled for groups.");
}
+ if ($forceEnable) {
+ $this->ignoreNextcloudRequirementForApp($appId);
+ }
+
$groupIds = array_map(function ($group) {
/** @var \OCP\IGroup $group */
return ($group instanceof IGroup)
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index 2ad1fb36af7..d583dd20761 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -94,10 +94,11 @@ class Installer {
* Installs an app that is located in one of the app folders already
*
* @param string $appId App to install
+ * @param bool $forceEnable
* @throws \Exception
* @return string app ID
*/
- public function installApp($appId) {
+ public function installApp(string $appId, bool $forceEnable = false): string {
$app = \OC_App::findAppInDirectories($appId);
if($app === false) {
throw new \Exception('App not found in any app directory');
@@ -117,7 +118,7 @@ class Installer {
}
$ignoreMaxApps = $this->config->getSystemValue('app_install_overwrite', []);
- $ignoreMax = in_array($appId, $ignoreMaxApps);
+ $ignoreMax = $forceEnable || in_array($appId, $ignoreMaxApps, true);
$version = implode('.', \OCP\Util::getVersion());
if (!\OC_App::isAppCompatible($version, $info, $ignoreMax)) {
diff --git a/lib/private/Server.php b/lib/private/Server.php
index b8765654c3f..78304b6fcb4 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -798,6 +798,7 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(AppManager::class, function (Server $c) {
return new \OC\App\AppManager(
$c->getUserSession(),
+ $c->getConfig(),
$c->query(\OC\AppConfig::class),
$c->getGroupManager(),
$c->getMemCacheFactory(),