From d496e78acd5076f746b4be0b16fdfc91976efee5 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sun, 4 Nov 2018 01:44:35 +0900 Subject: [PATCH 01/25] Bump sbt-scalatra plugin to 1.0.3 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 6d6b112ac..daba3aa84 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -3,7 +3,7 @@ scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature") addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.0") addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.15") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8") -addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.1") +addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.3") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2") addSbtCoursier addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0") From 86a849634431d61e8531c7bc086c333a1b52da88 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Fri, 5 Oct 2018 13:44:56 +0200 Subject: [PATCH 02/25] Upgraded apache-sshd: 1.7.0 -> 2.1.0 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index ad28306bd..bbfca7dc7 100644 --- a/build.sbt +++ b/build.sbt @@ -43,7 +43,7 @@ libraryDependencies ++= Seq( "org.apache.commons" % "commons-compress" % "1.18", "org.apache.commons" % "commons-email" % "1.5", "org.apache.httpcomponents" % "httpclient" % "4.5.6", - "org.apache.sshd" % "apache-sshd" % "1.7.0" exclude ("org.slf4j", "slf4j-jdk14"), + "org.apache.sshd" % "apache-sshd" % "2.1.0" exclude ("org.slf4j", "slf4j-jdk14"), "org.apache.tika" % "tika-core" % "1.19.1", "com.github.takezoe" %% "blocking-slick-32" % "0.0.11", "com.novell.ldap" % "jldap" % "2009-10-07", From ebd2efcd6e6dc48e606bd23edd2b842bf9a1525f Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Fri, 5 Oct 2018 13:45:40 +0200 Subject: [PATCH 03/25] Fixes for apache-sshd-2.1.0: Package name for Command and CommandFactory --- src/main/scala/gitbucket/core/plugin/Plugin.scala | 2 +- src/main/scala/gitbucket/core/plugin/PluginRegistry.scala | 2 +- src/main/scala/gitbucket/core/ssh/GitCommand.scala | 2 +- src/main/scala/gitbucket/core/ssh/NoShell.scala | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/gitbucket/core/plugin/Plugin.scala b/src/main/scala/gitbucket/core/plugin/Plugin.scala index 92a51ea23..06355f299 100644 --- a/src/main/scala/gitbucket/core/plugin/Plugin.scala +++ b/src/main/scala/gitbucket/core/plugin/Plugin.scala @@ -8,7 +8,7 @@ import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.util.SyntaxSugars._ import io.github.gitbucket.solidbase.model.Version -import org.apache.sshd.server.Command +import org.apache.sshd.server.command.Command import play.twirl.api.Html /** diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala index 6964732da..c37f1aede 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala @@ -24,7 +24,7 @@ import io.github.gitbucket.solidbase.manager.JDBCVersionManager import io.github.gitbucket.solidbase.model.Module import org.apache.commons.io.FileUtils import org.apache.http.client.methods.HttpGet -import org.apache.sshd.server.Command +import org.apache.sshd.server.command.Command import org.slf4j.LoggerFactory import play.twirl.api.Html diff --git a/src/main/scala/gitbucket/core/ssh/GitCommand.scala b/src/main/scala/gitbucket/core/ssh/GitCommand.scala index 19dcdbf5c..b997f65c0 100644 --- a/src/main/scala/gitbucket/core/ssh/GitCommand.scala +++ b/src/main/scala/gitbucket/core/ssh/GitCommand.scala @@ -6,7 +6,7 @@ import gitbucket.core.service.{AccountService, DeployKeyService, RepositoryServi import gitbucket.core.servlet.{CommitLogHook, Database} import gitbucket.core.util.{SyntaxSugars, Directory} import org.apache.sshd.server.{Environment, ExitCallback, SessionAware} -import org.apache.sshd.server.{Command, CommandFactory} +import org.apache.sshd.server.command.{Command, CommandFactory} import org.apache.sshd.server.session.ServerSession import org.slf4j.LoggerFactory import java.io.{File, InputStream, OutputStream} diff --git a/src/main/scala/gitbucket/core/ssh/NoShell.scala b/src/main/scala/gitbucket/core/ssh/NoShell.scala index 35f276aff..b350e266d 100644 --- a/src/main/scala/gitbucket/core/ssh/NoShell.scala +++ b/src/main/scala/gitbucket/core/ssh/NoShell.scala @@ -3,7 +3,7 @@ package gitbucket.core.ssh import gitbucket.core.service.SystemSettingsService.SshAddress import org.apache.sshd.common.Factory import org.apache.sshd.server.{Environment, ExitCallback} -import org.apache.sshd.server.Command +import org.apache.sshd.server.command.Command import java.io.{OutputStream, InputStream} import org.eclipse.jgit.lib.Constants From e513a581e747393a4e8161aa18e7e793fe79ea61 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Fri, 5 Oct 2018 14:24:56 +0200 Subject: [PATCH 04/25] Fixes for apache-sshd-2.1.0: Fixed package for 'UnknownCommand' - closes #2161 --- src/main/scala/gitbucket/core/ssh/GitCommand.scala | 2 +- src/test/scala/gitbucket/core/ssh/GitCommandSpec.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/gitbucket/core/ssh/GitCommand.scala b/src/main/scala/gitbucket/core/ssh/GitCommand.scala index b997f65c0..8e8cfe568 100644 --- a/src/main/scala/gitbucket/core/ssh/GitCommand.scala +++ b/src/main/scala/gitbucket/core/ssh/GitCommand.scala @@ -16,7 +16,7 @@ import org.eclipse.jgit.api.Git import Directory._ import gitbucket.core.ssh.PublicKeyAuthenticator.AuthType import org.eclipse.jgit.transport.{ReceivePack, UploadPack} -import org.apache.sshd.server.scp.UnknownCommand +import org.apache.sshd.server.shell.UnknownCommand import org.eclipse.jgit.errors.RepositoryNotFoundException object GitCommand { diff --git a/src/test/scala/gitbucket/core/ssh/GitCommandSpec.scala b/src/test/scala/gitbucket/core/ssh/GitCommandSpec.scala index 9051c5770..93dd0d4b0 100644 --- a/src/test/scala/gitbucket/core/ssh/GitCommandSpec.scala +++ b/src/test/scala/gitbucket/core/ssh/GitCommandSpec.scala @@ -1,6 +1,6 @@ package gitbucket.core.ssh -import org.apache.sshd.server.scp.UnknownCommand +import org.apache.sshd.server.shell.UnknownCommand import org.scalatest.FunSpec class GitCommandFactorySpec extends FunSpec { From 03e32f970e1ea7aa599dddfbe718105bc9e54388 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Sun, 4 Nov 2018 09:56:29 +0100 Subject: [PATCH 05/25] Fixes for apache-sshd-2.1.0: exclude sshd-mina and sshd-netty - closes #2168 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index bbfca7dc7..1452d3235 100644 --- a/build.sbt +++ b/build.sbt @@ -43,7 +43,7 @@ libraryDependencies ++= Seq( "org.apache.commons" % "commons-compress" % "1.18", "org.apache.commons" % "commons-email" % "1.5", "org.apache.httpcomponents" % "httpclient" % "4.5.6", - "org.apache.sshd" % "apache-sshd" % "2.1.0" exclude ("org.slf4j", "slf4j-jdk14"), + "org.apache.sshd" % "apache-sshd" % "2.1.0" exclude ("org.slf4j", "slf4j-jdk14") exclude ("org.apache.sshd", "sshd-mina") exclude ("org.apache.sshd", "sshd-netty"), "org.apache.tika" % "tika-core" % "1.19.1", "com.github.takezoe" %% "blocking-slick-32" % "0.0.11", "com.novell.ldap" % "jldap" % "2009-10-07", From 32ef9205495fe5cb6cdea183145909dd59d240c2 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Sun, 4 Nov 2018 10:44:21 +0100 Subject: [PATCH 06/25] Added sbt plugin in order to determine transitive dependencies - 'sbt dependencyTree' --- project/plugins.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/project/plugins.sbt b/project/plugins.sbt index daba3aa84..565cd692a 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -7,3 +7,4 @@ addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.3") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2") addSbtCoursier addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0") +addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2") From e5c6b9f67ea757b8eddba0383eee2cd8b7246d94 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Sun, 4 Nov 2018 10:45:17 +0100 Subject: [PATCH 07/25] Exclude HikariCP-java6 - fixes #2181 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index ad28306bd..51447d351 100644 --- a/build.sbt +++ b/build.sbt @@ -57,7 +57,7 @@ libraryDependencies ++= Seq( "fr.brouillard.oss.security.xhub" % "xhub4j-core" % "1.0.0", "com.github.bkromhout" % "java-diff-utils" % "2.1.1", "org.cache2k" % "cache2k-all" % "1.0.2.Final", - "com.enragedginger" %% "akka-quartz-scheduler" % "1.7.0-akka-2.5.x" exclude ("c3p0", "c3p0"), + "com.enragedginger" %% "akka-quartz-scheduler" % "1.7.0-akka-2.5.x" exclude ("c3p0", "c3p0") exclude ("com.zaxxer", "HikariCP-java6"), "net.coobird" % "thumbnailator" % "0.4.8", "com.github.zafarkhaja" % "java-semver" % "0.9.0", "com.nimbusds" % "oauth2-oidc-sdk" % "5.64.4", From 44370452486f4f5ab900b142d780c8e979a5e85d Mon Sep 17 00:00:00 2001 From: SIkebe Date: Mon, 5 Nov 2018 12:24:21 +0900 Subject: [PATCH 08/25] Fix typo --- src/main/twirl/gitbucket/core/settings/edithookform.scala.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/twirl/gitbucket/core/settings/edithookform.scala.html b/src/main/twirl/gitbucket/core/settings/edithookform.scala.html index d452f437c..3923e5524 100644 --- a/src/main/twirl/gitbucket/core/settings/edithookform.scala.html +++ b/src/main/twirl/gitbucket/core/settings/edithookform.scala.html @@ -181,7 +181,7 @@ $(function(){ error:function (e) { if(e) { console.log(e.responseText, e); - alert("request error ( http status " + e.status + " error on gitbugket or browser to gitbucket. show details on your javascript console )"); + alert("request error ( http status " + e.status + " error on gitbucket or browser to gitbucket. show details on your javascript console )"); }else{ alert("unknown javascript error (please report to gitbucket team)"); } From 7fe3211485c734e90f7fd5bd0d732f4a23551f92 Mon Sep 17 00:00:00 2001 From: Uli Heller Date: Mon, 5 Nov 2018 06:37:07 +0100 Subject: [PATCH 09/25] Fixed scalafmtSbtCheck --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 565cd692a..238030ac4 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -6,5 +6,5 @@ addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8") addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.3") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2") addSbtCoursier -addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0") addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2") From e65b0f63bbeafa99e9ff4828623e78267b849add Mon Sep 17 00:00:00 2001 From: Matthieu Brouillard Date: Mon, 5 Nov 2018 13:35:51 +0100 Subject: [PATCH 10/25] add openjdk 8 & 11 in the travis-ci build matrix --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index ff18003fd..b901b6c21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,8 @@ sudo: true jdk: - oraclejdk8 - oraclejdk11 + - openjdk8 + - openjdk11 script: - sbt scalafmtSbtCheck scalafmtCheck test:scalafmtCheck test before_script: From 3782c74f61ee7e6996989a9c11671ad526641a86 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 9 Nov 2018 10:16:35 +0900 Subject: [PATCH 11/25] Fix markdown rendering --- .../core/controller/IssuesController.scala | 2 + .../RepositoryViewerController.scala | 4 +- .../gitbucket/core/plugin/Renderer.scala | 1 + .../scala/gitbucket/core/view/Markdown.scala | 22 ++++++----- .../scala/gitbucket/core/view/helpers.scala | 2 + .../core/helper/commitcomment.scala.html | 13 ++++--- .../core/issues/commentlist.scala.html | 39 ++++++++++--------- .../core/issues/milestones/list.scala.html | 11 +++--- .../core/pulls/mergeguide.scala.html | 9 ++++- .../gitbucket/core/releases/list.scala.html | 1 + .../core/releases/release.scala.html | 1 + .../twirl/gitbucket/core/wiki/page.scala.html | 14 ++++++- 12 files changed, 77 insertions(+), 42 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/IssuesController.scala b/src/main/scala/gitbucket/core/controller/IssuesController.scala index 514564a16..2c2fa686f 100644 --- a/src/main/scala/gitbucket/core/controller/IssuesController.scala +++ b/src/main/scala/gitbucket/core/controller/IssuesController.scala @@ -257,6 +257,7 @@ trait IssuesControllerBase extends ControllerBase { "content" -> Markdown.toHtml( markdown = x.content getOrElse "No description given.", repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = false, enableRefsLink = true, enableAnchor = true, @@ -284,6 +285,7 @@ trait IssuesControllerBase extends ControllerBase { "content" -> view.Markdown.toHtml( markdown = x.content, repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = false, enableRefsLink = true, enableAnchor = true, diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 49ceccebe..d4a27a0d6 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -174,7 +174,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { helpers.renderMarkup( filePath = List(f), fileContent = params("content"), - branch = "master", + branch = repository.repository.defaultBranch, repository = repository, enableWikiLink = params("enableWikiLink").toBoolean, enableRefsLink = params("enableRefsLink").toBoolean, @@ -184,6 +184,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { helpers.markdown( markdown = params("content"), repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = params("enableWikiLink").toBoolean, enableRefsLink = params("enableRefsLink").toBoolean, enableLineBreaks = params("enableLineBreaks").toBoolean, @@ -679,6 +680,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { "content" -> view.Markdown.toHtml( markdown = x.content, repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = false, enableRefsLink = true, enableAnchor = true, diff --git a/src/main/scala/gitbucket/core/plugin/Renderer.scala b/src/main/scala/gitbucket/core/plugin/Renderer.scala index 6c4037b10..5a78705ab 100644 --- a/src/main/scala/gitbucket/core/plugin/Renderer.scala +++ b/src/main/scala/gitbucket/core/plugin/Renderer.scala @@ -25,6 +25,7 @@ object MarkdownRenderer extends Renderer { Markdown.toHtml( markdown = fileContent, repository = repository, + branch = branch, enableWikiLink = enableWikiLink, enableRefsLink = enableRefsLink, enableAnchor = enableAnchor, diff --git a/src/main/scala/gitbucket/core/view/Markdown.scala b/src/main/scala/gitbucket/core/view/Markdown.scala index 4eac1376b..723208c49 100644 --- a/src/main/scala/gitbucket/core/view/Markdown.scala +++ b/src/main/scala/gitbucket/core/view/Markdown.scala @@ -16,6 +16,7 @@ object Markdown { * Converts Markdown of Wiki pages to HTML. * * @param repository the repository which contains the markdown + * @param branch the target branch * @param enableWikiLink if true then wiki style link is available in markdown * @param enableRefsLink if true then issue reference (e.g. #123) is rendered as link * @param enableAnchor if true then anchor for headline is generated @@ -27,6 +28,7 @@ object Markdown { def toHtml( markdown: String, repository: RepositoryService.RepositoryInfo, + branch: String, enableWikiLink: Boolean, enableRefsLink: Boolean, enableAnchor: Boolean, @@ -45,6 +47,7 @@ object Markdown { val renderer = new GitBucketMarkedRenderer( options, repository, + branch, enableWikiLink, enableRefsLink, enableAnchor, @@ -62,6 +65,7 @@ object Markdown { class GitBucketMarkedRenderer( options: Options, repository: RepositoryService.RepositoryInfo, + branch: String, enableWikiLink: Boolean, enableRefsLink: Boolean, enableAnchor: Boolean, @@ -131,11 +135,11 @@ object Markdown { } override def link(href: String, title: String, text: String): String = { - super.link(fixUrl(href, false), title, text) + super.link(fixUrl(href, branch, false), title, text) } override def image(href: String, title: String, text: String): String = { - super.image(fixUrl(href, true), title, text) + super.image(fixUrl(href, branch, true), title, text) } override def nolink(text: String): String = { @@ -162,7 +166,7 @@ object Markdown { } } - private def fixUrl(url: String, isImage: Boolean = false): String = { + private def fixUrl(url: String, branch: String, isImage: Boolean = false): String = { lazy val urlWithRawParam: String = url + (if (isImage && !url.endsWith("?raw=true")) "?raw=true" else "") if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:") || url.startsWith("/")) { @@ -172,13 +176,13 @@ object Markdown { } else if (!enableWikiLink) { if (context.currentPath.contains("/blob/")) { urlWithRawParam - } else if (context.currentPath.contains("/tree/")) { - val paths = context.currentPath.split("/") - val branch = if (paths.length > 3) paths.drop(4).mkString("/") else repository.repository.defaultBranch - repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam +// } else if (context.currentPath.contains("/tree/")) { +// val paths = context.currentPath.split("/") +// //val branch = if (paths.length > 3) paths.drop(4).mkString("/") else branch +// repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam } else { - val paths = context.currentPath.split("/") - val branch = if (paths.length > 3) paths.last else repository.repository.defaultBranch +// val paths = context.currentPath.split("/") + //val branch = if (paths.length > 3) paths.last else branch repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam } } else { diff --git a/src/main/scala/gitbucket/core/view/helpers.scala b/src/main/scala/gitbucket/core/view/helpers.scala index ab7d5bd0d..5fa80eddd 100644 --- a/src/main/scala/gitbucket/core/view/helpers.scala +++ b/src/main/scala/gitbucket/core/view/helpers.scala @@ -102,6 +102,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache def markdown( markdown: String, repository: RepositoryService.RepositoryInfo, + branch: String, enableWikiLink: Boolean, enableRefsLink: Boolean, enableLineBreaks: Boolean, @@ -114,6 +115,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache Markdown.toHtml( markdown = markdown, repository = repository, + branch = branch, enableWikiLink = enableWikiLink, enableRefsLink = enableRefsLink, enableAnchor = enableAnchor, diff --git a/src/main/twirl/gitbucket/core/helper/commitcomment.scala.html b/src/main/twirl/gitbucket/core/helper/commitcomment.scala.html index 63f099b78..0a45e8e7c 100644 --- a/src/main/twirl/gitbucket/core/helper/commitcomment.scala.html +++ b/src/main/twirl/gitbucket/core/helper/commitcomment.scala.html @@ -22,12 +22,13 @@
@helpers.markdown( - markdown = comment.content, - repository = repository, - enableWikiLink = false, - enableRefsLink = true, - enableLineBreaks = true, - enableTaskList = true, + markdown = comment.content, + repository = repository, + branch = repository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = true, + enableLineBreaks = true, + enableTaskList = true, hasWritePermission = hasWritePermission )
diff --git a/src/main/twirl/gitbucket/core/issues/commentlist.scala.html b/src/main/twirl/gitbucket/core/issues/commentlist.scala.html index 8f7f911e0..b28b98d3e 100644 --- a/src/main/twirl/gitbucket/core/issues/commentlist.scala.html +++ b/src/main/twirl/gitbucket/core/issues/commentlist.scala.html @@ -32,12 +32,13 @@
@helpers.markdown( - markdown = comment.content, - repository = repository, - enableWikiLink = false, - enableRefsLink = true, - enableLineBreaks = true, - enableTaskList = true, + markdown = comment.content, + repository = repository, + branch = repository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = true, + enableLineBreaks = true, + enableTaskList = true, hasWritePermission = isManageable )
@@ -57,12 +58,13 @@
@helpers.markdown( - markdown = issue.get.content getOrElse "No description provided.", - repository = repository, - enableWikiLink = false, - enableRefsLink = true, - enableLineBreaks = true, - enableTaskList = true, + markdown = issue.get.content getOrElse "No description provided.", + repository = repository, + branch = repository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = true, + enableLineBreaks = true, + enableTaskList = true, hasWritePermission = isManageable )
@@ -268,12 +270,13 @@
@helpers.markdown( - markdown = comment.content, - repository = repository, - enableWikiLink = false, - enableRefsLink = true, - enableLineBreaks = true, - enableTaskList = true, + markdown = comment.content, + repository = repository, + branch = repository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = true, + enableLineBreaks = true, + enableTaskList = true, hasWritePermission = isManageable )
diff --git a/src/main/twirl/gitbucket/core/issues/milestones/list.scala.html b/src/main/twirl/gitbucket/core/issues/milestones/list.scala.html index 7f41eb6bd..80e0ba699 100644 --- a/src/main/twirl/gitbucket/core/issues/milestones/list.scala.html +++ b/src/main/twirl/gitbucket/core/issues/milestones/list.scala.html @@ -76,13 +76,14 @@ - @if(milestone.description.isDefined){ + @milestone.description.map { description =>
@helpers.markdown( - markdown = milestone.description.get, - repository = repository, - enableWikiLink = false, - enableRefsLink = false, + markdown = description, + repository = repository, + branch = repository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = false, enableLineBreaks = true )
diff --git a/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html b/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html index a7e868539..df71c3f5a 100644 --- a/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html +++ b/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html @@ -43,7 +43,14 @@

- @status.conflictMessage.map { message => @helpers.markdown(message, originRepository, false, true, false) } + @status.conflictMessage.map { message => @helpers.markdown( + markdown = message, + repository = originRepository, + branch = originRepository.repository.defaultBranch, + enableWikiLink = false, + enableRefsLink = true, + enableLineBreaks = false + ) }
} else { @if(status.branchIsOutOfDate){ diff --git a/src/main/twirl/gitbucket/core/releases/list.scala.html b/src/main/twirl/gitbucket/core/releases/list.scala.html index 135a3545f..814db32c0 100644 --- a/src/main/twirl/gitbucket/core/releases/list.scala.html +++ b/src/main/twirl/gitbucket/core/releases/list.scala.html @@ -27,6 +27,7 @@ @helpers.markdown( markdown = release.content getOrElse "No description provided.", repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = false, enableRefsLink = true, enableLineBreaks = true, diff --git a/src/main/twirl/gitbucket/core/releases/release.scala.html b/src/main/twirl/gitbucket/core/releases/release.scala.html index db1cbfac1..14b6376a5 100644 --- a/src/main/twirl/gitbucket/core/releases/release.scala.html +++ b/src/main/twirl/gitbucket/core/releases/release.scala.html @@ -34,6 +34,7 @@ @helpers.markdown( markdown = release.content getOrElse "No description provided.", repository = repository, + branch = repository.repository.defaultBranch, enableWikiLink = false, enableRefsLink = true, enableLineBreaks = true, diff --git a/src/main/twirl/gitbucket/core/wiki/page.scala.html b/src/main/twirl/gitbucket/core/wiki/page.scala.html index 90fc9d109..c68d68c5a 100644 --- a/src/main/twirl/gitbucket/core/wiki/page.scala.html +++ b/src/main/twirl/gitbucket/core/wiki/page.scala.html @@ -59,7 +59,7 @@ @if(isEditable){ } - @helpers.markdown(sidebarPage.content, repository, true, false, false, false, pages) + @helpers.markdown(sidebarPage.content, repository, "master", true, false, false, false, pages) }.getOrElse{ @if(isEditable){ @@ -85,6 +85,7 @@ @helpers.markdown( markdown = page.content, repository = repository, + branch = "master", enableWikiLink = true, enableRefsLink = false, enableLineBreaks = false, @@ -98,7 +99,16 @@ @if(isEditable){ } - @helpers.markdown(footerPage.content, repository, true, false, false, false, pages) + @helpers.markdown( + markdown = footerPage.content, + repository = repository, + branch = "master", + enableWikiLink = true, + enableRefsLink = false, + enableLineBreaks = false, + enableAnchor = false, + pages = pages + ) }.getOrElse{ @if(isEditable){ From 37df03815e93e831c81fc732b7cf303cada3b18d Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 9 Nov 2018 14:03:49 +0900 Subject: [PATCH 12/25] Cleanup --- src/main/scala/gitbucket/core/view/Markdown.scala | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/scala/gitbucket/core/view/Markdown.scala b/src/main/scala/gitbucket/core/view/Markdown.scala index 723208c49..989a66819 100644 --- a/src/main/scala/gitbucket/core/view/Markdown.scala +++ b/src/main/scala/gitbucket/core/view/Markdown.scala @@ -176,13 +176,7 @@ object Markdown { } else if (!enableWikiLink) { if (context.currentPath.contains("/blob/")) { urlWithRawParam -// } else if (context.currentPath.contains("/tree/")) { -// val paths = context.currentPath.split("/") -// //val branch = if (paths.length > 3) paths.drop(4).mkString("/") else branch -// repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam } else { -// val paths = context.currentPath.split("/") - //val branch = if (paths.length > 3) paths.last else branch repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam } } else { From 36ce8701ef095da416eb3aba393b4ef85187bcfa Mon Sep 17 00:00:00 2001 From: Ryo oki Date: Sun, 11 Nov 2018 14:30:40 +0900 Subject: [PATCH 13/25] add fail pattern for resolve warning --- .../scala/gitbucket/core/service/AccessTokenServiceSpec.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala b/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala index 39fca81b4..eb44c2fe5 100644 --- a/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala +++ b/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala @@ -53,6 +53,7 @@ class AccessTokenServiceSpec extends FunSuite with ServiceSpecBase { val (id, token) = AccessTokenService.generateAccessToken("root", "note") assert(AccessTokenService.getAccountByAccessToken(token) match { case Some(user) => user.userName == "root" + case _ => fail() }) } } @@ -88,6 +89,7 @@ class AccessTokenServiceSpec extends FunSuite with ServiceSpecBase { assert(AccessTokenService.getAccountByAccessToken(token) match { case Some(user) => user.userName == "user3" + case _ => fail() }) } } From 5375ec88c888eb7dd7ddfbf4986f413b92ff61a7 Mon Sep 17 00:00:00 2001 From: NomadBlacky Date: Sun, 11 Nov 2018 14:31:25 +0900 Subject: [PATCH 14/25] Update akka-actor 2.5.17 -> 2.5.18 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index c30df1cec..377964e10 100644 --- a/build.sbt +++ b/build.sbt @@ -53,7 +53,7 @@ libraryDependencies ++= Seq( "ch.qos.logback" % "logback-classic" % "1.2.3", "com.zaxxer" % "HikariCP" % "2.7.9", "com.typesafe" % "config" % "1.3.3", - "com.typesafe.akka" %% "akka-actor" % "2.5.17", + "com.typesafe.akka" %% "akka-actor" % "2.5.18", "fr.brouillard.oss.security.xhub" % "xhub4j-core" % "1.0.0", "com.github.bkromhout" % "java-diff-utils" % "2.1.1", "org.cache2k" % "cache2k-all" % "1.0.2.Final", From 43febc2f55676fce8cc99b9400fb489a35eb7932 Mon Sep 17 00:00:00 2001 From: Ryo oki Date: Sun, 11 Nov 2018 14:34:04 +0900 Subject: [PATCH 15/25] delete unused import --- .../scala/gitbucket/core/service/AccessTokenServiceSpec.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala b/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala index eb44c2fe5..7951e2cf5 100644 --- a/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala +++ b/src/test/scala/gitbucket/core/service/AccessTokenServiceSpec.scala @@ -3,7 +3,6 @@ package gitbucket.core.service import gitbucket.core.model._ import org.scalatest.FunSuite import gitbucket.core.model.Profile._ -import gitbucket.core.model.Profile.profile._ import gitbucket.core.model.Profile.profile.blockingApi._ class AccessTokenServiceSpec extends FunSuite with ServiceSpecBase { From 7e0fb5b2bbec7fb924fe50427ede10f64ba19d60 Mon Sep 17 00:00:00 2001 From: NomadBlacky Date: Sun, 11 Nov 2018 15:14:03 +0900 Subject: [PATCH 16/25] Fix Map#get & getOrElse to Map#getOrElse --- .../core/controller/RepositorySettingsController.scala | 4 ++-- src/main/scala/gitbucket/core/util/SyntaxSugars.scala | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala index 521a10a29..4dc1dc0db 100644 --- a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala @@ -512,10 +512,10 @@ trait RepositorySettingsControllerBase extends ControllerBase { private def mergeOptions = new ValueType[Seq[String]] { override def convert(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[String] = { - params.get("mergeOptions").getOrElse(Nil) + params.getOrElse("mergeOptions", Nil) } override def validate(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[(String, String)] = { - val mergeOptions = params.get("mergeOptions").getOrElse(Nil) + val mergeOptions = params.getOrElse("mergeOptions", Nil) if (mergeOptions.isEmpty) { Seq("mergeOptions" -> "At least one option must be enabled.") } else if (!mergeOptions.forall(x => Seq("merge-commit", "squash", "rebase").contains(x))) { diff --git a/src/main/scala/gitbucket/core/util/SyntaxSugars.scala b/src/main/scala/gitbucket/core/util/SyntaxSugars.scala index 2ede3231c..cc3ad4127 100644 --- a/src/main/scala/gitbucket/core/util/SyntaxSugars.scala +++ b/src/main/scala/gitbucket/core/util/SyntaxSugars.scala @@ -65,7 +65,7 @@ object SyntaxSugars { implicit class HeadValueAccessibleMap(map: Map[String, Seq[String]]) { def value(key: String): String = map(key).head def optionValue(key: String): Option[String] = map.get(key).flatMap(_.headOption) - def values(key: String): Seq[String] = map.get(key).getOrElse(Seq.empty) + def values(key: String): Seq[String] = map.getOrElse(key, Seq.empty) } } From d17070bc35beb4851e3634859dc1c1e16b65da0b Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sun, 11 Nov 2018 20:04:05 +0900 Subject: [PATCH 17/25] Set commit date time to archive entries --- .../controller/RepositoryViewerController.scala | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index d4a27a0d6..b33d83c85 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -945,18 +945,19 @@ trait RepositoryViewerControllerBase extends ControllerBase { path: String ) = { def archive(revision: String, archiveFormat: String, archive: ArchiveOutputStream)( - entryCreator: (String, Long, Int) => ArchiveEntry + entryCreator: (String, Long, Long, Int) => ArchiveEntry ): Unit = { using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => val oid = git.getRepository.resolve(revision) - val revCommit = JGitUtil.getRevCommitFromId(git, oid) + val commit = JGitUtil.getRevCommitFromId(git, oid) + val time = commit.getCommitterIdent.getWhen.getTime val sha1 = oid.getName() val repositorySuffix = (if (sha1.startsWith(revision)) sha1 else revision).replace('/', '-') val pathSuffix = if (path.isEmpty) "" else '-' + path.replace('/', '-') val baseName = repository.name + "-" + repositorySuffix + pathSuffix using(new TreeWalk(git.getRepository)) { treeWalk => - treeWalk.addTree(revCommit.getTree) + treeWalk.addTree(commit.getTree) treeWalk.setRecursive(true) if (!path.isEmpty) { treeWalk.setFilter(PathFilter.create(path)) @@ -968,8 +969,8 @@ trait RepositoryViewerControllerBase extends ControllerBase { else path.split("/").last + treeWalk.getPathString.substring(path.length) val size = JGitUtil.getFileSize(git, repository, treeWalk) val mode = treeWalk.getFileMode.getBits - val entry: ArchiveEntry = entryCreator(entryPath, size, mode) - JGitUtil.openFile(git, repository, revCommit.getTree, treeWalk.getPathString) { in => + val entry: ArchiveEntry = entryCreator(entryPath, size, time, mode) + JGitUtil.openFile(git, repository, commit.getTree, treeWalk.getPathString) { in => archive.putArchiveEntry(entry) IOUtils.copy(in, archive) archive.closeArchiveEntry() @@ -994,10 +995,11 @@ trait RepositoryViewerControllerBase extends ControllerBase { contentType = "application/octet-stream" response.setBufferSize(1024 * 1024) using(new ZipArchiveOutputStream(response.getOutputStream)) { zip => - archive(revision, ".zip", zip) { (path, size, mode) => + archive(revision, ".zip", zip) { (path, size, time, mode) => val entry = new ZipArchiveEntry(path) entry.setSize(size) entry.setUnixMode(mode) + entry.setTime(time) entry } } @@ -1018,9 +1020,10 @@ trait RepositoryViewerControllerBase extends ControllerBase { tar.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR) tar.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU) tar.setAddPaxHeadersForNonAsciiNames(true) - archive(revision, ".tar.gz", tar) { (path, size, mode) => + archive(revision, ".tar.gz", tar) { (path, size, time, mode) => val entry = new TarArchiveEntry(path) entry.setSize(size) + entry.setModTime(time) entry.setMode(mode) entry } From 2592e5a41d2d2529c773d58a8a3bb811c71d1fa2 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Mon, 12 Nov 2018 02:49:21 +0000 Subject: [PATCH 18/25] Update dependencies --- build.sbt | 6 +++--- project/plugins.sbt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index 377964e10..e6d566a70 100644 --- a/build.sbt +++ b/build.sbt @@ -51,12 +51,12 @@ libraryDependencies ++= Seq( "org.mariadb.jdbc" % "mariadb-java-client" % "2.3.0", "org.postgresql" % "postgresql" % "42.2.5", "ch.qos.logback" % "logback-classic" % "1.2.3", - "com.zaxxer" % "HikariCP" % "2.7.9", + "com.zaxxer" % "HikariCP" % "3.2.0", "com.typesafe" % "config" % "1.3.3", "com.typesafe.akka" %% "akka-actor" % "2.5.18", "fr.brouillard.oss.security.xhub" % "xhub4j-core" % "1.0.0", "com.github.bkromhout" % "java-diff-utils" % "2.1.1", - "org.cache2k" % "cache2k-all" % "1.0.2.Final", + "org.cache2k" % "cache2k-all" % "1.2.0.Final", "com.enragedginger" %% "akka-quartz-scheduler" % "1.7.0-akka-2.5.x" exclude ("c3p0", "c3p0") exclude ("com.zaxxer", "HikariCP-java6"), "net.coobird" % "thumbnailator" % "0.4.8", "com.github.zafarkhaja" % "java-semver" % "0.9.0", @@ -70,7 +70,7 @@ libraryDependencies ++= Seq( "ru.yandex.qatools.embed" % "postgresql-embedded" % "2.9" % "test", "net.i2p.crypto" % "eddsa" % "0.3.0", "is.tagomor.woothee" % "woothee-java" % "1.8.0", - "org.ec4j.core" % "ec4j-core" % "0.0.1" + "org.ec4j.core" % "ec4j-core" % "0.0.2" ) // Compiler settings diff --git a/project/plugins.sbt b/project/plugins.sbt index 238030ac4..11c15117c 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,7 +2,7 @@ scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature") addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.0") addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.15") -addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8") +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9") addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.3") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2") addSbtCoursier From b3294f03fdfee4090c04d1dcbeaa7c9f2632ad4a Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Mon, 12 Nov 2018 23:38:35 +0900 Subject: [PATCH 19/25] Use java.util.Date instead of Long for modtime of archive entries --- .../controller/RepositoryViewerController.scala | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index b33d83c85..e8b9288a8 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -945,12 +945,12 @@ trait RepositoryViewerControllerBase extends ControllerBase { path: String ) = { def archive(revision: String, archiveFormat: String, archive: ArchiveOutputStream)( - entryCreator: (String, Long, Long, Int) => ArchiveEntry + entryCreator: (String, Long, java.util.Date, Int) => ArchiveEntry ): Unit = { using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => val oid = git.getRepository.resolve(revision) val commit = JGitUtil.getRevCommitFromId(git, oid) - val time = commit.getCommitterIdent.getWhen.getTime + val date = commit.getCommitterIdent.getWhen val sha1 = oid.getName() val repositorySuffix = (if (sha1.startsWith(revision)) sha1 else revision).replace('/', '-') val pathSuffix = if (path.isEmpty) "" else '-' + path.replace('/', '-') @@ -969,7 +969,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { else path.split("/").last + treeWalk.getPathString.substring(path.length) val size = JGitUtil.getFileSize(git, repository, treeWalk) val mode = treeWalk.getFileMode.getBits - val entry: ArchiveEntry = entryCreator(entryPath, size, time, mode) + val entry: ArchiveEntry = entryCreator(entryPath, size, date, mode) JGitUtil.openFile(git, repository, commit.getTree, treeWalk.getPathString) { in => archive.putArchiveEntry(entry) IOUtils.copy(in, archive) @@ -995,11 +995,11 @@ trait RepositoryViewerControllerBase extends ControllerBase { contentType = "application/octet-stream" response.setBufferSize(1024 * 1024) using(new ZipArchiveOutputStream(response.getOutputStream)) { zip => - archive(revision, ".zip", zip) { (path, size, time, mode) => + archive(revision, ".zip", zip) { (path, size, date, mode) => val entry = new ZipArchiveEntry(path) entry.setSize(size) entry.setUnixMode(mode) - entry.setTime(time) + entry.setTime(date.getTime) entry } } @@ -1020,10 +1020,10 @@ trait RepositoryViewerControllerBase extends ControllerBase { tar.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR) tar.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU) tar.setAddPaxHeadersForNonAsciiNames(true) - archive(revision, ".tar.gz", tar) { (path, size, time, mode) => + archive(revision, ".tar.gz", tar) { (path, size, date, mode) => val entry = new TarArchiveEntry(path) entry.setSize(size) - entry.setModTime(time) + entry.setModTime(date) entry.setMode(mode) entry } From 41f1c0c136ef4f6d89d23935ce19186646b6568a Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 13 Nov 2018 21:32:31 +0900 Subject: [PATCH 20/25] (refs #2184) Fix authorization for group web hook configuration page --- .../core/controller/AccountController.scala | 14 +++++++------- .../scala/gitbucket/core/util/Authenticator.scala | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/AccountController.scala b/src/main/scala/gitbucket/core/controller/AccountController.scala index b04ce6367..005aa8ac2 100644 --- a/src/main/scala/gitbucket/core/controller/AccountController.scala +++ b/src/main/scala/gitbucket/core/controller/AccountController.scala @@ -421,7 +421,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { redirect(s"/${userName}/_application") }) - get("/:userName/_hooks")(oneselfOnly { + get("/:userName/_hooks")(managersOnly { val userName = params("userName") getAccountByUserName(userName).map { account => gitbucket.core.account.html.hooks(account, getAccountWebHooks(account.userName), flash.get("info")) @@ -431,7 +431,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Display the account web hook edit page. */ - get("/:userName/_hooks/new")(oneselfOnly { + get("/:userName/_hooks/new")(managersOnly { val userName = params("userName") getAccountByUserName(userName).map { account => val webhook = AccountWebHook(userName, "", WebHookContentType.FORM, None) @@ -442,7 +442,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Add the account web hook URL. */ - post("/:userName/_hooks/new", accountWebHookForm(false))(oneselfOnly { form => + post("/:userName/_hooks/new", accountWebHookForm(false))(managersOnly { form => val userName = params("userName") addAccountWebHook(userName, form.url, form.events, form.ctype, form.token) flash += "info" -> s"Webhook ${form.url} created" @@ -452,7 +452,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Delete the account web hook URL. */ - get("/:userName/_hooks/delete")(oneselfOnly { + get("/:userName/_hooks/delete")(managersOnly { val userName = params("userName") deleteAccountWebHook(userName, params("url")) flash += "info" -> s"Webhook ${params("url")} deleted" @@ -462,7 +462,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Display the account web hook edit page. */ - get("/:userName/_hooks/edit")(oneselfOnly { + get("/:userName/_hooks/edit")(managersOnly { val userName = params("userName") getAccountByUserName(userName).flatMap { account => getAccountWebHook(userName, params("url")).map { @@ -475,7 +475,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Update account web hook settings. */ - post("/:userName/_hooks/edit", accountWebHookForm(true))(oneselfOnly { form => + post("/:userName/_hooks/edit", accountWebHookForm(true))(managersOnly { form => val userName = params("userName") updateAccountWebHook(userName, form.url, form.events, form.ctype, form.token) flash += "info" -> s"webhook ${form.url} updated" @@ -485,7 +485,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { /** * Send the test request to registered account web hook URLs. */ - ajaxPost("/:userName/_hooks/test")(oneselfOnly { + ajaxPost("/:userName/_hooks/test")(managersOnly { // TODO Is it possible to merge with [[RepositorySettingsController.ajaxPost]]? import scala.concurrent.duration._ import scala.concurrent._ diff --git a/src/main/scala/gitbucket/core/util/Authenticator.scala b/src/main/scala/gitbucket/core/util/Authenticator.scala index 7dd8fd534..b226509e4 100644 --- a/src/main/scala/gitbucket/core/util/Authenticator.scala +++ b/src/main/scala/gitbucket/core/util/Authenticator.scala @@ -161,6 +161,8 @@ trait GroupManagerAuthenticator { self: ControllerBase with AccountService => private def authenticate(action: => Any) = { context.loginAccount match { + case Some(x) if x.isAdmin => action + case Some(x) if x.userName == request.paths(0) => action case Some(x) if (getGroupMembers(request.paths(0)).exists { member => member.userName == x.userName && member.isManager }) => From 694b77294cea10fc4030f177e24c781a73d23baa Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Thu, 15 Nov 2018 23:46:25 +0900 Subject: [PATCH 21/25] Remove deprecated methods --- .../gitbucket/core/plugin/PluginRegistry.scala | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala index c37f1aede..ebe93a64f 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala @@ -70,23 +70,10 @@ class PluginRegistry { images.put(id, encoded) } - @deprecated("Use addImage(id: String, bytes: Array[Byte]) instead", "3.4.0") - def addImage(id: String, in: InputStream): Unit = { - val bytes = using(in) { in => - val bytes = new Array[Byte](in.available) - in.read(bytes) - bytes - } - addImage(id, bytes) - } - def getImage(id: String): String = images.get(id) def addController(path: String, controller: ControllerBase): Unit = controllers.add((controller, path)) - @deprecated("Use addController(path: String, controller: ControllerBase) instead", "3.4.0") - def addController(controller: ControllerBase, path: String): Unit = addController(path, controller) - def getControllers(): Seq[(ControllerBase, String)] = controllers.asScala.toSeq def addJavaScript(path: String, script: String): Unit = From d5f1fc33d159fff59a0a3c21d104de6646a8095e Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 16 Nov 2018 00:00:18 +0900 Subject: [PATCH 22/25] Add new extension point: anonymousAccessiblePaths --- .../core/controller/PreProcessController.scala | 6 +++++- src/main/scala/gitbucket/core/plugin/Plugin.scala | 14 ++++++++++++++ .../gitbucket/core/plugin/PluginRegistry.scala | 8 ++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/PreProcessController.scala b/src/main/scala/gitbucket/core/controller/PreProcessController.scala index 50023c4d1..9e21ecc82 100644 --- a/src/main/scala/gitbucket/core/controller/PreProcessController.scala +++ b/src/main/scala/gitbucket/core/controller/PreProcessController.scala @@ -1,5 +1,6 @@ package gitbucket.core.controller +import gitbucket.core.plugin.PluginRegistry import org.scalatra.MovedPermanently class PreProcessController extends PreProcessControllerBase @@ -30,7 +31,10 @@ trait PreProcessControllerBase extends ControllerBase { */ get(!context.settings.allowAnonymousAccess, context.loginAccount.isEmpty) { if (!context.currentPath.startsWith("/assets") && !context.currentPath.startsWith("/signin") && - !context.currentPath.startsWith("/register") && !context.currentPath.endsWith("/info/refs")) { + !context.currentPath.startsWith("/register") && !context.currentPath.endsWith("/info/refs") && + !PluginRegistry().getAnonymousAccessiblePaths().exists { path => + context.currentPath.startsWith(path) + }) { Unauthorized() } else { pass() diff --git a/src/main/scala/gitbucket/core/plugin/Plugin.scala b/src/main/scala/gitbucket/core/plugin/Plugin.scala index 06355f299..30b3aa97d 100644 --- a/src/main/scala/gitbucket/core/plugin/Plugin.scala +++ b/src/main/scala/gitbucket/core/plugin/Plugin.scala @@ -47,6 +47,20 @@ abstract class Plugin { settings: SystemSettings ): Seq[(String, ControllerBase)] = Nil + /** + * Override to declare this plug-in provides anonymous accessible paths. + */ + val anonymousAccessiblePaths: Seq[String] = Nil + + /** + * Override to declare this plug-in provides anonymous accessible paths. + */ + def anonymousAccessiblePaths( + registry: PluginRegistry, + context: ServletContext, + settings: SystemSettings + ): Seq[String] = Nil + /** * Override to declare this plug-in provides JavaScript. */ diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala index ebe93a64f..a68a9b34f 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistry.scala @@ -1,6 +1,6 @@ package gitbucket.core.plugin -import java.io.{File, FilenameFilter, InputStream} +import java.io.{File, FilenameFilter} import java.net.URLClassLoader import java.nio.file.{Files, Paths, StandardWatchEventKinds} import java.util.Base64 @@ -15,7 +15,6 @@ import gitbucket.core.service.ProtectedBranchService.ProtectedBranchReceiveHook import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.SystemSettingsService import gitbucket.core.service.SystemSettingsService.SystemSettings -import gitbucket.core.util.SyntaxSugars._ import gitbucket.core.util.DatabaseConfig import gitbucket.core.util.Directory._ import gitbucket.core.util.HttpClientUtil._ @@ -35,6 +34,7 @@ class PluginRegistry { private val plugins = new ConcurrentLinkedQueue[PluginInfo] private val javaScripts = new ConcurrentLinkedQueue[(String, String)] private val controllers = new ConcurrentLinkedQueue[(ControllerBase, String)] + private val anonymousAccessiblePaths = new ConcurrentLinkedQueue[String] private val images = new ConcurrentHashMap[String, String] private val renderers = new ConcurrentHashMap[String, Renderer] renderers.put("md", MarkdownRenderer) @@ -76,6 +76,10 @@ class PluginRegistry { def getControllers(): Seq[(ControllerBase, String)] = controllers.asScala.toSeq + def addAnonymousAccessiblePath(path: String): Unit = anonymousAccessiblePaths.add(path) + + def getAnonymousAccessiblePaths(): Seq[String] = anonymousAccessiblePaths.asScala.toSeq + def addJavaScript(path: String, script: String): Unit = javaScripts.add((path, script)) //javaScripts += ((path, script)) From 6104d7657b4718d2d18319c7ed91ad4d834fba43 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 16 Nov 2018 08:19:41 +0900 Subject: [PATCH 23/25] Leaked implementation #2199 --- src/main/scala/gitbucket/core/plugin/Plugin.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/scala/gitbucket/core/plugin/Plugin.scala b/src/main/scala/gitbucket/core/plugin/Plugin.scala index 30b3aa97d..e5ccb5988 100644 --- a/src/main/scala/gitbucket/core/plugin/Plugin.scala +++ b/src/main/scala/gitbucket/core/plugin/Plugin.scala @@ -347,6 +347,10 @@ abstract class Plugin { case (path, controller) => registry.addController(path, controller) } + (anonymousAccessiblePaths ++ anonymousAccessiblePaths(registry, context, settings)).foreach { + case (path) => + registry.addAnonymousAccessiblePath(path) + } (javaScripts ++ javaScripts(registry, context, settings)).foreach { case (path, script) => registry.addJavaScript(path, script) From 60592debe35ca9721f9dc102bb474e82de76faf6 Mon Sep 17 00:00:00 2001 From: aadrian Date: Thu, 22 Nov 2018 19:14:57 +0100 Subject: [PATCH 24/25] update some more dependencies --- build.sbt | 14 +++++++------- .../gitbucket/core/GitBucketCoreModuleSpec.scala | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.sbt b/build.sbt index e6d566a70..abd15541f 100644 --- a/build.sbt +++ b/build.sbt @@ -5,7 +5,7 @@ val Organization = "io.github.gitbucket" val Name = "gitbucket" val GitBucketVersion = "4.30.0-SNAPSHOT" val ScalatraVersion = "2.6.3" -val JettyVersion = "9.4.11.v20180605" +val JettyVersion = "9.4.14.v20181114" val JgitVersion = "5.1.3.201810200350-r" lazy val root = (project in file(".")) @@ -36,9 +36,9 @@ libraryDependencies ++= Seq( "org.scalatra" %% "scalatra" % ScalatraVersion, "org.scalatra" %% "scalatra-json" % ScalatraVersion, "org.scalatra" %% "scalatra-forms" % ScalatraVersion, - "org.json4s" %% "json4s-jackson" % "3.5.4", + "org.json4s" %% "json4s-jackson" % "3.6.2", "commons-io" % "commons-io" % "2.6", - "io.github.gitbucket" % "solidbase" % "1.0.2", + "io.github.gitbucket" % "solidbase" % "1.0.3", "io.github.gitbucket" % "markedj" % "1.0.15", "org.apache.commons" % "commons-compress" % "1.18", "org.apache.commons" % "commons-email" % "1.5", @@ -65,12 +65,12 @@ libraryDependencies ++= Seq( "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided", "junit" % "junit" % "4.12" % "test", "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test", - "org.mockito" % "mockito-core" % "2.23.0" % "test", - "com.wix" % "wix-embedded-mysql" % "3.0.0" % "test", - "ru.yandex.qatools.embed" % "postgresql-embedded" % "2.9" % "test", + "org.mockito" % "mockito-core" % "2.23.4" % "test", + "com.wix" % "wix-embedded-mysql" % "4.2.0" % "test", + "ru.yandex.qatools.embed" % "postgresql-embedded" % "2.10" % "test", "net.i2p.crypto" % "eddsa" % "0.3.0", "is.tagomor.woothee" % "woothee-java" % "1.8.0", - "org.ec4j.core" % "ec4j-core" % "0.0.2" + "org.ec4j.core" % "ec4j-core" % "0.0.3" ) // Compiler settings diff --git a/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala b/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala index 264778fad..4d39eb759 100644 --- a/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala +++ b/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala @@ -33,7 +33,7 @@ class GitBucketCoreModuleSpec extends FunSuite { .withPort(3306) .withUser("sa", "sa") .withCharset(Charset.UTF8) - .withServerVariable("log_syslog", 0) + // .withServerVariable("log_syslog", 0) .withServerVariable("bind-address", "127.0.0.1") .build() From ace583ecce80ccdec8cf02ee3a41ea8d3a78a7b0 Mon Sep 17 00:00:00 2001 From: aadrian Date: Fri, 23 Nov 2018 10:16:49 +0100 Subject: [PATCH 25/25] remove commented out parameter --- src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala b/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala index 4d39eb759..4c253f276 100644 --- a/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala +++ b/src/test/scala/gitbucket/core/GitBucketCoreModuleSpec.scala @@ -33,7 +33,6 @@ class GitBucketCoreModuleSpec extends FunSuite { .withPort(3306) .withUser("sa", "sa") .withCharset(Charset.UTF8) - // .withServerVariable("log_syslog", 0) .withServerVariable("bind-address", "127.0.0.1") .build()