diff --git a/src/main/scala/gitbucket/core/servlet/GitLfsTransferServlet.scala b/src/main/scala/gitbucket/core/servlet/GitLfsTransferServlet.scala index 610a19b..ed14f30 100644 --- a/src/main/scala/gitbucket/core/servlet/GitLfsTransferServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitLfsTransferServlet.scala @@ -64,11 +64,10 @@ } private def getPathInfo(req: HttpServletRequest, res: HttpServletResponse): Option[(String, String, String)] = { - val paths = req.getRequestURI.substring(1).split("/") - val owner = paths.dropRight(2).last - val repository = paths.dropRight(1).last - val oid = paths.last - Some((owner, repository, oid)) + req.getRequestURI.substring(1).split("/").reverse match { + case Array(oid, repository, owner, _*) => Some((owner, repository, oid)) + case _ => None + } } private def sendError(res: HttpServletResponse, status: Int, message: String): Unit = { diff --git a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala index 1910025..9ed2205 100644 --- a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala @@ -76,42 +76,41 @@ case Some(baseUrl) => { val index = req.getRequestURI.indexOf(".git") if(index >= 0){ - val paths = req.getRequestURI.substring(0, index).split("/") - val owner = paths.dropRight(1).last - val repository = paths.last + req.getRequestURI.substring(0, index).split("/").reverse match { + case Array(repository, owner, _*) => + val timeout = System.currentTimeMillis + (60000 * 10) // 10 min. + val batchResponse = batchRequest.operation match { + case "upload" => + GitLfs.BatchUploadResponse("basic", batchRequest.objects.map { requestObject => + GitLfs.BatchResponseObject(requestObject.oid, requestObject.size, true, + GitLfs.Actions( + upload = Some(GitLfs.Action( + href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid, + header = Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)), + expires_at = new Date(timeout) + )) + ) + ) + }) + case "download" => + GitLfs.BatchUploadResponse("basic", batchRequest.objects.map { requestObject => + GitLfs.BatchResponseObject(requestObject.oid, requestObject.size, true, + GitLfs.Actions( + download = Some(GitLfs.Action( + href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid, + header = Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)), + expires_at = new Date(timeout) + )) + ) + ) + }) + } - val timeout = System.currentTimeMillis + (60000 * 10) // 10 min. - val batchResponse = batchRequest.operation match { - case "upload" => - GitLfs.BatchUploadResponse("basic", batchRequest.objects.map { requestObject => - GitLfs.BatchResponseObject(requestObject.oid, requestObject.size, true, - GitLfs.Actions( - upload = Some(GitLfs.Action( - href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid, - header = Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)), - expires_at = new Date(timeout) - )) - ) - ) - }) - case "download" => - GitLfs.BatchUploadResponse("basic", batchRequest.objects.map { requestObject => - GitLfs.BatchResponseObject(requestObject.oid, requestObject.size, true, - GitLfs.Actions( - download = Some(GitLfs.Action( - href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid, - header = Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)), - expires_at = new Date(timeout) - )) - ) - ) - }) - } - - res.setContentType("application/vnd.git-lfs+json") - using(res.getWriter){ out => - out.print(write(batchResponse)) - out.flush() + res.setContentType("application/vnd.git-lfs+json") + using(res.getWriter){ out => + out.print(write(batchResponse)) + out.flush() + } } } }