diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index d88bdc1..2c06fda 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -1,5 +1,7 @@ package gitbucket.core.controller +import javax.servlet.http.{HttpServletResponse, HttpServletRequest} + import gitbucket.core.api._ import gitbucket.core.plugin.PluginRegistry import gitbucket.core.repo.html @@ -295,6 +297,21 @@ redirect(s"/${repository.owner}/${repository.name}/tree/${form.branch}${if(form.path.length == 0) "" else form.path}") }) + get("/:owner/:repository/raw/*")(referrersOnly { repository => + val (id, path) = splitPath(repository, multiParams("splat").head) + using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => + val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) + getPathObjectId(git, path, revCommit).flatMap { objectId => + JGitUtil.getObjectLoaderFromId(git, objectId){ loader => + contentType = "application/octet-stream" + response.setContentLength(loader.getSize.toInt) + loader.copyTo(response.outputStream) + () + } + } getOrElse NotFound + } + }) + /** * Displays the file content of the specified branch or commit. */ @@ -305,12 +322,11 @@ val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) getPathObjectId(git, path, revCommit).map { objectId => if(raw){ - // Download + // Download (This route is left for backword compatibility) JGitUtil.getObjectLoaderFromId(git, objectId){ loader => - //RawData("application/octet-stream", bytes) contentType = "application/octet-stream" response.setContentLength(loader.getSize.toInt) - loader.copyTo(response.getOutputStream) + loader.copyTo(response.outputStream) () } getOrElse NotFound } else { @@ -745,4 +761,11 @@ private def isEditable(owner: String, repository: String, author: String)(implicit context: Context): Boolean = hasWritePermission(owner, repository, context.loginAccount) || author == context.loginAccount.get.userName + + + + override protected def renderUncaughtException(e: Throwable)(implicit request: HttpServletRequest, response: HttpServletResponse): Unit = { + e.printStackTrace() + } + } diff --git a/src/main/twirl/gitbucket/core/helper/diff.scala.html b/src/main/twirl/gitbucket/core/helper/diff.scala.html index 99749fc..d05049d 100644 --- a/src/main/twirl/gitbucket/core/helper/diff.scala.html +++ b/src/main/twirl/gitbucket/core/helper/diff.scala.html @@ -101,14 +101,14 @@ @if(diff.newIsImage || diff.oldIsImage){ <div class="diff-image-render diff2up">@diff.oldIsImage @diff.newIsImage @if(oldCommitId.isDefined && diff.oldIsImage){ - <div class="diff-image-frame diff-old"><img src="@url(repository)/blob/@oldCommitId.get/@diff.oldPath?raw=true" class="diff-image" onload="onLoadedDiffImages(this)" style="display:none" /></div> + <div class="diff-image-frame diff-old"><img src="@url(repository)/raw/@oldCommitId.get/@diff.oldPath" class="diff-image" onload="onLoadedDiffImages(this)" style="display:none" /></div> } else { @if(diff.changeType != ChangeType.ADD){ <div style="padding: 12px;">Not supported</div> } } @if(newCommitId.isDefined && diff.newIsImage){ - <div class="diff-image-frame diff-new"><img src="@url(repository)/blob/@newCommitId.get/@diff.newPath?raw=true" class="diff-image" onload="onLoadedDiffImages(this)" style="display:none" /></div> + <div class="diff-image-frame diff-new"><img src="@url(repository)/raw/@newCommitId.get/@diff.newPath" class="diff-image" onload="onLoadedDiffImages(this)" style="display:none" /></div> } else { @if(diff.changeType != ChangeType.DELETE){ <div style="padding: 12px;">Not supported</div> diff --git a/src/main/twirl/gitbucket/core/repo/blob.scala.html b/src/main/twirl/gitbucket/core/repo/blob.scala.html index 4dc3d4c..3c08cd1 100644 --- a/src/main/twirl/gitbucket/core/repo/blob.scala.html +++ b/src/main/twirl/gitbucket/core/repo/blob.scala.html @@ -56,7 +56,7 @@ @if(hasWritePermission && content.viewType == "text" && repository.branchList.contains(branch)){ <a class="btn btn-sm btn-default" href="@url(repository)/edit/@encodeRefName(branch)/@pathList.mkString("/")">Edit</a> } - <a class="btn btn-sm btn-default" href="?raw=true">Raw</a> + <a class="btn btn-sm btn-default" href="@url(repository)/raw/@latestCommit.id/@pathList.mkString("/")">Raw</a> @if(content.viewType == "text"){ <a class="btn btn-sm btn-default blame-action" href="@url(repository)/blame/@latestCommit.id/@pathList.mkString("/")" data-url="@url(repository)/get-blame/@latestCommit.id/@pathList.mkString("/")" data-repository="@url(repository)">Blame</a> } @@ -81,12 +81,12 @@ } @if(content.viewType == "image"){ <div class="box-content-bottom"> - <img src="?raw=true"/> + <img src="@url(repository)/raw/@encodeRefName(branch)/@pathList.mkString("/")"/> </div> } @if(content.viewType == "large" || content.viewType == "binary"){ <div class="box-content-bottom" style="text-align: center; padding-top: 20px; padding-bottom: 20px;"> - <a href="?raw=true">View Raw</a><br> + <a href="@url(repository)/raw/@encodeRefName(branch)/@pathList.mkString("/")">View Raw</a><br> <br> (Sorry about that, but we can't show files that are this big right now) </div>