diff --git a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala index 69168ec..2b7174d 100644 --- a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala @@ -2,14 +2,11 @@ import java.io.FileInputStream -import com.github.zafarkhaja.semver.{Version => Semver} -import gitbucket.core.GitBucketCoreModule import gitbucket.core.admin.html -import gitbucket.core.plugin.{PluginInfoBase, PluginRegistry, PluginRepository} +import gitbucket.core.plugin.PluginRegistry import gitbucket.core.service.SystemSettingsService._ import gitbucket.core.service.{AccountService, RepositoryService} import gitbucket.core.ssh.SshServer -import gitbucket.core.util.Directory._ import gitbucket.core.util.Implicits._ import gitbucket.core.util.StringUtil._ import gitbucket.core.util.SyntaxSugars._ @@ -21,7 +18,6 @@ import org.scalatra.forms._ import org.scalatra.i18n.Messages -import scala.collection.JavaConverters._ import scala.collection.mutable.ListBuffer class SystemSettingsController @@ -93,17 +89,17 @@ )(OIDC.apply) ), "skinName" -> trim(label("AdminLTE skin name", text(required))), - "showMailAddress" -> trim(label("Show mail address", boolean())), - "pluginNetworkInstall" -> trim(label("Network plugin installation", boolean())), - "proxy" -> optionalIfNotChecked( - "useProxy", - mapping( - "host" -> trim(label("Proxy host", text(required))), - "port" -> trim(label("Proxy port", number())), - "user" -> trim(label("Keystore", optional(text()))), - "password" -> trim(label("Keystore", optional(text()))) - )(Proxy.apply) - ) + "showMailAddress" -> trim(label("Show mail address", boolean())) //, +// "pluginNetworkInstall" -> trim(label("Network plugin installation", boolean())), +// "proxy" -> optionalIfNotChecked( +// "useProxy", +// mapping( +// "host" -> trim(label("Proxy host", text(required))), +// "port" -> trim(label("Proxy port", number())), +// "user" -> trim(label("Keystore", optional(text()))), +// "password" -> trim(label("Keystore", optional(text()))) +// )(Proxy.apply) +// ) )(SystemSettings.apply).verifying { settings => Vector( if (settings.ssh.enabled && settings.baseUrl.isEmpty) { @@ -332,58 +328,7 @@ }) get("/admin/plugins")(adminOnly { - // Installed plugins - val enabledPlugins = PluginRegistry().getPlugins() - val gitbucketVersion = GitBucketCoreModule.getVersions.asScala.last.getVersion - val gitbucketSemver = Semver.valueOf(gitbucketVersion) - - // Plugins in the remote repository - val repositoryPlugins = if (context.settings.pluginNetworkInstall) { - PluginRepository - .getPlugins() - .map { - meta => - (meta, meta.versions.reverse.find { - version => - val semver = Semver.valueOf(version.version) - gitbucketVersion == version.gitbucketVersion && !enabledPlugins.exists { plugin => - if (plugin.pluginId == meta.id) { - Semver.valueOf(plugin.pluginVersion) match { - case x if x.greaterThan(semver) => true - case x if x.equals(semver) => - plugin.gitbucketVersion match { - case None => true - case Some(x) => Semver.valueOf(x).greaterThanOrEqualTo(gitbucketSemver) - } - case _ => false - } - } else false - } - }) - } - .collect { - case (meta, Some(version)) => - new PluginInfoBase( - pluginId = meta.id, - pluginName = meta.name, - pluginVersion = version.version, - gitbucketVersion = Some(version.gitbucketVersion), - description = meta.description - ) - } - } else Nil - - // Merge - val plugins = (enabledPlugins.map((_, true)) ++ repositoryPlugins.map((_, false))) - .groupBy(_._1.pluginId) - .map { - case (pluginId, plugins) => - val (plugin, enabled) = plugins.head - (plugin, enabled, if (plugins.length > 1) plugins.last._1.pluginVersion else "") - } - .toList - - html.plugins(plugins, flash.get("info")) + html.plugins(PluginRegistry().getPlugins(), flash.get("info")) }) post("/admin/plugins/_reload")(adminOnly { @@ -404,36 +349,6 @@ redirect("/admin/plugins") }) - post("/admin/plugins/:pluginId/:version/_install")(adminOnly { - if (context.settings.pluginNetworkInstall) { - val pluginId = params("pluginId") - val version = params("version") - val gitbucketVersion = GitBucketCoreModule.getVersions.asScala.last.getVersion - - PluginRepository - .getPlugins() - .collectFirst { - case meta if meta.id == pluginId => - (meta, meta.versions.find(x => x.gitbucketVersion == gitbucketVersion && x.version == version)) - } - .foreach { - case (meta, version) => - version.foreach { version => - PluginRegistry.install( - pluginId, - new java.net.URL(version.url), - request.getServletContext, - loadSystemSettings(), - request2Session(request).conn - ) - flash += "info" -> s"${pluginId}:${version.version} was installed." - } - } - } - - redirect("/admin/plugins") - }) - get("/admin/users")(adminOnly { val includeRemoved = params.get("includeRemoved").map(_.toBoolean).getOrElse(false) val includeGroups = params.get("includeGroups").map(_.toBoolean).getOrElse(false) diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala index 467bbc1..4dcd05e 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala @@ -227,40 +227,6 @@ initialize(context, settings, conn) } - /** - * Install a plugin from a specified jar file. - */ - 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()) - - withHttpClient(settings.pluginProxy) { httpClient => - val httpGet = new HttpGet(url.toString) - try { - val response = httpClient.execute(httpGet) - val in = response.getEntity.getContent - FileUtils.copyToFile(in, new File(PluginHome, new File(url.getFile).getName)) - } finally { - httpGet.releaseConnection() - } - } - - instance = new PluginRegistry() - initialize(context, settings, conn) - } - private def listPluginJars(dir: File): Seq[File] = { dir .listFiles(new FilenameFilter { diff --git a/src/main/scala/gitbucket/core/plugin/PluginRepository.scala b/src/main/scala/gitbucket/core/plugin/PluginRepository.scala deleted file mode 100644 index 1e72ca8..0000000 --- a/src/main/scala/gitbucket/core/plugin/PluginRepository.scala +++ /dev/null @@ -1,59 +0,0 @@ -package gitbucket.core.plugin - -import gitbucket.core.controller.Context -import gitbucket.core.util.SyntaxSugars.using -import gitbucket.core.util.HttpClientUtil._ -import org.json4s._ -import org.apache.commons.io.IOUtils - -import org.apache.http.client.methods.HttpGet -import org.slf4j.LoggerFactory - -object PluginRepository { - private val logger = LoggerFactory.getLogger(getClass) - implicit val formats = DefaultFormats - - def parsePluginJson(json: String): Seq[PluginMetadata] = { - org.json4s.jackson.JsonMethods.parse(json).extract[Seq[PluginMetadata]] - } - - def getPlugins()(implicit context: Context): Seq[PluginMetadata] = { - try { - val url = new java.net.URL("https://plugins.gitbucket-community.org/releases/plugins.json") - - withHttpClient(context.settings.pluginProxy) { httpClient => - val httpGet = new HttpGet(url.toString) - try { - val response = httpClient.execute(httpGet) - using(response.getEntity.getContent) { in => - val str = IOUtils.toString(in, "UTF-8") - parsePluginJson(str) - } - } finally { - httpGet.releaseConnection() - } - } - } catch { - case t: Throwable => - logger.warn("Failed to access to the plugin repository: " + t.toString) - Nil - } - } -} - -// Mapped from plugins.json -case class PluginMetadata( - id: String, - name: String, - description: String, - versions: Seq[VersionDef], - default: Boolean = false -) { - lazy val latestVersion: VersionDef = versions.last -} - -case class VersionDef( - version: String, - url: String, - gitbucketVersion: String -) diff --git a/src/main/scala/gitbucket/core/service/SystemSettingsService.scala b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala index a4df2bb..93e896c 100644 --- a/src/main/scala/gitbucket/core/service/SystemSettingsService.scala +++ b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala @@ -69,17 +69,6 @@ } props.setProperty(SkinName, settings.skinName.toString) props.setProperty(ShowMailAddress, settings.showMailAddress.toString) - props.setProperty(PluginNetworkInstall, settings.pluginNetworkInstall.toString) - settings.pluginProxy.foreach { proxy => - props.setProperty(PluginProxyHost, proxy.host) - props.setProperty(PluginProxyPort, proxy.port.toString) - proxy.user.foreach { user => - props.setProperty(PluginProxyUser, user) - } - proxy.password.foreach { password => - props.setProperty(PluginProxyPassword, password) - } - } using(new java.io.FileOutputStream(GitBucketConf)) { out => props.store(out, null) @@ -156,18 +145,7 @@ None }, getValue(props, SkinName, "skin-blue"), - getValue(props, ShowMailAddress, false), - getValue(props, PluginNetworkInstall, false), - if (getValue(props, PluginProxyHost, "").nonEmpty) { - Some( - Proxy( - getValue(props, PluginProxyHost, ""), - getValue(props, PluginProxyPort, 8080), - getOptionValue(props, PluginProxyUser, None), - getOptionValue(props, PluginProxyPassword, None) - ) - ) - } else None + getValue(props, ShowMailAddress, false) ) } } @@ -196,9 +174,7 @@ oidcAuthentication: Boolean, oidc: Option[OIDC], skinName: String, - showMailAddress: Boolean, - pluginNetworkInstall: Boolean, - pluginProxy: Option[Proxy] + showMailAddress: Boolean ) { def baseUrl(request: HttpServletRequest): String = diff --git a/src/main/twirl/gitbucket/core/admin/plugins.scala.html b/src/main/twirl/gitbucket/core/admin/plugins.scala.html index b923ec5..2ff4dbe 100644 --- a/src/main/twirl/gitbucket/core/admin/plugins.scala.html +++ b/src/main/twirl/gitbucket/core/admin/plugins.scala.html @@ -1,4 +1,4 @@ -@(plugins: List[(gitbucket.core.plugin.PluginInfoBase, Boolean, String)], info: Option[Any])(implicit context: gitbucket.core.controller.Context) +@(plugins: List[gitbucket.core.plugin.PluginInfoBase], info: Option[Any])(implicit context: gitbucket.core.controller.Context) @gitbucket.core.html.main("Plugins"){ @gitbucket.core.admin.html.menu("plugins") { @gitbucket.core.helper.html.information(info) @@ -8,26 +8,17 @@

Plugins

@if(plugins.size > 0) { - @plugins.map { case (plugin, enabled, updatableVersion) => + @plugins.map { plugin =>
- @if(enabled){ - @if(updatableVersion.nonEmpty){ - - } - - } else { - - } +
@plugin.pluginName
@@ -58,15 +49,5 @@ var name = $(e.target).data('name'); return confirm('Uninstall ' + name + '. Are you sure?'); }); - - $('.install-plugin').click(function(e){ - var name = $(e.target).data('name'); - return confirm('Install ' + name + '. Are you sure?'); - }); - - $('.update-plugin').click(function(e){ - var name = $(e.target).data('name'); - return confirm('Update ' + name + '. Are you sure?'); - }); }); diff --git a/src/main/twirl/gitbucket/core/admin/settings.scala.html b/src/main/twirl/gitbucket/core/admin/settings.scala.html index dd9eeba..62d6b47 100644 --- a/src/main/twirl/gitbucket/core/admin/settings.scala.html +++ b/src/main/twirl/gitbucket/core/admin/settings.scala.html @@ -17,9 +17,6 @@
@settings_authentication(info)
-
- @settings_plugins(info) -

@@ -34,9 +31,6 @@ if(location.hash == '#authentication'){ $('li:has(a[href="#authentication"])').addClass('active'); $('div#authentication').addClass('active'); - } else if(location.hash == '#plugins'){ - $('li:has(a[href="#plugins"])').addClass('active'); - $('div#plugins').addClass('active'); } else { $('li:has(a[href="#system"])').addClass('active'); $('div#system').addClass('active'); diff --git a/src/main/twirl/gitbucket/core/admin/settings_plugins.scala.html b/src/main/twirl/gitbucket/core/admin/settings_plugins.scala.html deleted file mode 100644 index d2923fb..0000000 --- a/src/main/twirl/gitbucket/core/admin/settings_plugins.scala.html +++ /dev/null @@ -1,52 +0,0 @@ -@(info: Option[Any])(implicit context: gitbucket.core.controller.Context) - -
- -
-
-
- -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- diff --git a/src/test/scala/gitbucket/core/service/ServiceSpecBase.scala b/src/test/scala/gitbucket/core/service/ServiceSpecBase.scala index 97a7cc4..16717f6 100644 --- a/src/test/scala/gitbucket/core/service/ServiceSpecBase.scala +++ b/src/test/scala/gitbucket/core/service/ServiceSpecBase.scala @@ -53,9 +53,7 @@ oidcAuthentication = false, oidc = None, skinName = "skin-blue", - showMailAddress = false, - pluginNetworkInstall = false, - pluginProxy = None + showMailAddress = false ) def withTestDB[A](action: (Session) => A): A = { diff --git a/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala b/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala index f967b0c..e3ee207 100644 --- a/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala +++ b/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala @@ -137,9 +137,7 @@ oidcAuthentication = false, oidc = None, skinName = "skin-blue", - showMailAddress = false, - pluginNetworkInstall = false, - pluginProxy = None + showMailAddress = false ) /**