diff --git a/src/main/resources/plugins/plugins b/src/main/resources/plugins/plugins new file mode 100644 index 0000000..a550c0e --- /dev/null +++ b/src/main/resources/plugins/plugins @@ -0,0 +1 @@ +#gitbucket-gist-plugin_2.12-4.9.0.jar diff --git a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala index 94dfc81..d851ee7 100644 --- a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala +++ b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala @@ -1,6 +1,6 @@ package gitbucket.core.servlet -import java.io.File +import java.io.{File, FileOutputStream} import akka.event.Logging import com.typesafe.config.ConfigFactory @@ -9,15 +9,18 @@ import gitbucket.core.service.{ActivityService, SystemSettingsService} import gitbucket.core.util.DatabaseConfig import gitbucket.core.util.Directory._ +import gitbucket.core.util.SyntaxSugars._ import gitbucket.core.util.JDBCUtil._ import gitbucket.core.model.Profile.profile.blockingApi._ import io.github.gitbucket.solidbase.Solidbase import io.github.gitbucket.solidbase.manager.JDBCVersionManager -import javax.servlet.{ServletContextListener, ServletContextEvent} -import org.apache.commons.io.FileUtils +import javax.servlet.{ServletContextEvent, ServletContextListener} + +import org.apache.commons.io.{FileUtils, IOUtils} import org.slf4j.LoggerFactory -import akka.actor.{Actor, Props, ActorSystem} +import akka.actor.{Actor, ActorSystem, Props} import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension + import scala.collection.JavaConverters._ /** @@ -106,6 +109,22 @@ throw new IllegalStateException(s"Initialization failed. GitBucket version is ${gitbucketVersion}, but database version is ${databaseVersion}.") } + // Install bundled plugins + logger.info("Install bundled plugins") + val cl = Thread.currentThread.getContextClassLoader + try { + using(cl.getResourceAsStream("plugins/plugins")){ pluginsFile => + val plugins = IOUtils.toString(pluginsFile, "UTF-8").split("\n").map(_.trim) + plugins.collect { case plugin if plugin.nonEmpty && !plugin.startsWith("#") => + val file = new File(PluginHome, plugin) + logger.info(s"Copy ${plugin} to ${file.getAbsolutePath}") + using(cl.getResourceAsStream("plugins/" + plugin), new FileOutputStream(file)){ case (in, out) => IOUtils.copy(in, out) } + } + } + } catch { + case e: Exception => logger.error("Error in installing bundled plugin", e) + } + // Load plugins logger.info("Initialize plugins") PluginRegistry.initialize(event.getServletContext, loadSystemSettings(), conn) @@ -146,4 +165,4 @@ } } } -} \ No newline at end of file +}