From 38f05fe689e930453997c71bf5bd686427024887 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 16 Sep 2019 14:12:49 +0200 Subject: [PATCH] Prohibit uninstallation of core plugins --- .../java/sonia/scm/plugin/DefaultPluginManager.java | 1 + .../sonia/scm/plugin/DefaultPluginManagerTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index 6c715c2842..e646bf6372 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -188,6 +188,7 @@ public class DefaultPluginManager implements PluginManager { PluginPermissions.manage().check(); InstalledPlugin installed = getInstalled(name) .orElseThrow(() -> NotFoundException.notFound(entity(InstalledPlugin.class, name))); + doThrow().violation("plugin is a core plugin and cannot be uninstalled").when(installed.isCore()); dependencyTracker.removeInstalled(installed.getDescriptor()); diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java index 44799a03fb..6e2bb29dba 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java @@ -344,6 +344,19 @@ class DefaultPluginManagerTest { assertThat(temp.resolve("uninstall")).exists(); } + + @Test + void shouldThrowExceptionWhenUninstallingCorePlugin(@TempDirectory.TempDir Path temp) { + InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin"); + when(mailPlugin.getDirectory()).thenReturn(temp); + when(mailPlugin.isCore()).thenReturn(true); + + when(loader.getInstalledPlugins()).thenReturn(singletonList(mailPlugin)); + + assertThrows(ScmConstraintViolationException.class, () -> manager.uninstall("scm-mail-plugin", false)); + + assertThat(temp.resolve("uninstall")).doesNotExist(); + } } @Nested