From 4fcac9d2cbdafb51e3ee9ca3b3da64fd86103174 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 26 Nov 2013 15:58:15 -0500 Subject: [PATCH] Remove artifact setting from manager dialog --- src/main/java/com/gitblit/wicket/pages/RawPage.java | 65 ++++++++++++++++++++++++++++---- 1 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/RawPage.java b/src/main/java/com/gitblit/wicket/pages/RawPage.java index 28e8bae..1783764 100644 --- a/src/main/java/com/gitblit/wicket/pages/RawPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RawPage.java @@ -16,13 +16,15 @@ package com.gitblit.wicket.pages; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.wicket.IRequestTarget; import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; -import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.protocol.http.WebRequest; import org.apache.wicket.protocol.http.WebResponse; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -31,13 +33,18 @@ import com.gitblit.GitBlit; import com.gitblit.Keys; +import com.gitblit.models.RepositoryModel; +import com.gitblit.models.UserModel; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; +import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; -public class RawPage extends WebPage { +public class RawPage extends SessionPage { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); + + String contentType; public RawPage(final PageParameters params) { super(params); @@ -60,6 +67,16 @@ final String objectId = WicketUtils.getObject(params); final String blobPath = WicketUtils.getPath(params); String[] encodings = GitBlit.getEncodings(); + GitBlitWebSession session = GitBlitWebSession.get(); + UserModel user = session.getUser(); + + RepositoryModel model = GitBlit.self().getRepositoryModel(user, repositoryName); + if (model == null) { + // user does not have permission + error(getString("gb.canNotLoadRepository") + " " + repositoryName); + redirectToInterceptPage(new RepositoriesPage()); + return; + } Repository r = GitBlit.self().getRepository(repositoryName); if (r == null) { @@ -71,7 +88,8 @@ if (StringUtils.isEmpty(blobPath)) { // objectid referenced raw view byte [] binary = JGitUtils.getByteContent(r, objectId); - response.setContentType("application/octet-stream"); + contentType = "application/octet-stream"; + response.setContentType(contentType); response.setContentLength(binary.length); try { response.getOutputStream().write(binary); @@ -110,7 +128,8 @@ case 2: // image blobs byte[] image = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true); - response.setContentType("image/" + extension.toLowerCase()); + contentType = "image/" + extension.toLowerCase(); + response.setContentType(contentType); response.setContentLength(image.length); try { response.getOutputStream().write(image); @@ -121,9 +140,29 @@ case 3: // binary blobs (download) byte[] binary = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true); + contentType = "application/octet-stream"; response.setContentLength(binary.length); - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); + response.setContentType(contentType); + + try { + WebRequest request = (WebRequest) requestCycle.getRequest(); + String userAgent = request.getHttpServletRequest().getHeader("User-Agent"); + + if (userAgent != null && userAgent.indexOf("MSIE 5.5") > -1) { + response.setHeader("Content-Disposition", "filename=\"" + + URLEncoder.encode(filename, "UTF-8") + "\""); + } else if (userAgent != null && userAgent.indexOf("MSIE") > -1) { + response.setHeader("Content-Disposition", "attachment; filename=\"" + + URLEncoder.encode(filename, "UTF-8") + "\""); + } else { + response.setHeader("Content-Disposition", "attachment; filename=\"" + + new String(filename.getBytes("UTF-8"), "latin1") + "\""); + } + } + catch (UnsupportedEncodingException e) { + response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); + } + try { response.getOutputStream().write(binary); } catch (IOException e) { @@ -134,7 +173,8 @@ // plain text String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings); - response.setContentType("text/plain; charset=UTF-8"); + contentType = "text/plain; charset=UTF-8"; + response.setContentType(contentType); try { response.getOutputStream().write(content.getBytes("UTF-8")); } catch (Exception e) { @@ -146,7 +186,8 @@ // plain text String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings); - response.setContentType("text/plain; charset=UTF-8"); + contentType = "text/plain; charset=UTF-8"; + response.setContentType(contentType); try { response.getOutputStream().write(content.getBytes("UTF-8")); } catch (Exception e) { @@ -158,4 +199,12 @@ } }); } + + @Override + protected void setHeaders(WebResponse response) { + super.setHeaders(response); + if (!StringUtils.isEmpty(contentType)) { + response.setContentType(contentType); + } + } } -- Gitblit v1.9.1