diff --git a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala index dd9edc9..df4e712 100644 --- a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala @@ -364,17 +364,15 @@ redirect("/admin/plugins") }) - post("/admin/plugins/:pluginId/:version/_uninstall")(adminOnly { + post("/admin/plugins/:pluginId/_uninstall")(adminOnly { // TODO Is version unnecessary? val pluginId = params("pluginId") - val version = params("version") - PluginRegistry() - .getPlugins() - .collect { case plugin if (plugin.pluginId == pluginId && plugin.pluginVersion == version) => plugin } - .foreach { _ => - PluginRegistry - .uninstall(pluginId, request.getServletContext, loadSystemSettings(), request2Session(request).conn) - flash += "info" -> s"${pluginId} was uninstalled." - } + + if (PluginRegistry().getPlugins().exists(_.pluginId == pluginId)) { + PluginRegistry + .uninstall(pluginId, request.getServletContext, loadSystemSettings(), request2Session(request).conn) + flash += "info" -> s"${pluginId} was uninstalled." + } + redirect("/admin/plugins") }) @@ -389,6 +387,7 @@ case (meta, version) => version.foreach { version => PluginRegistry.install( + pluginId, new java.net.URL(version.url), request.getServletContext, loadSystemSettings(), diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala index 857e501..2398891 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala @@ -225,37 +225,37 @@ */ def uninstall(pluginId: String, context: ServletContext, settings: SystemSettings, conn: java.sql.Connection): Unit = synchronized { - instance - .getPlugins() - .collect { case plugin if plugin.pluginId == pluginId => plugin } - .foreach { plugin => -// try { -// plugin.pluginClass.uninstall(instance, context, settings) -// } catch { -// case e: Exception => -// logger.error(s"Error during uninstalling plugin: ${plugin.pluginJar.getName}", e) -// } - shutdown(context, settings) + shutdown(context, settings) - new File(PluginHome) - .listFiles((_: File, name: String) => { - name.startsWith(s"gitbucket-${pluginId}-plugin") && name.endsWith(".jar") - }) - .foreach { file => - file.delete() - } + new File(PluginHome) + .listFiles((_: File, name: String) => { + name.startsWith(s"gitbucket-${pluginId}-plugin") && name.endsWith(".jar") + }) + .foreach(_.delete()) - instance = new PluginRegistry() - initialize(context, settings, conn) - } + instance = new PluginRegistry() + initialize(context, settings, conn) } /** * Install a plugin from a specified jar file. */ - def install(url: java.net.URL, context: ServletContext, settings: SystemSettings, conn: java.sql.Connection): Unit = + def install( + pluginId: String, + url: java.net.URL, + context: ServletContext, + settings: SystemSettings, + conn: java.sql.Connection + ): Unit = synchronized { shutdown(context, settings) + + new File(PluginHome) + .listFiles((_: File, name: String) => { + name.startsWith(s"gitbucket-${pluginId}-plugin") && name.endsWith(".jar") + }) + .foreach(_.delete()) + val in = url.openStream() FileUtils.copyToFile(in, new File(PluginHome, new File(url.getFile).getName)) instance = new PluginRegistry() diff --git a/src/main/twirl/gitbucket/core/admin/plugins.scala.html b/src/main/twirl/gitbucket/core/admin/plugins.scala.html index d97d893..0970f82 100644 --- a/src/main/twirl/gitbucket/core/admin/plugins.scala.html +++ b/src/main/twirl/gitbucket/core/admin/plugins.scala.html @@ -16,21 +16,19 @@ @plugins.map { case (plugin, enabled, updatableVersion) =>