From a75a1819f4c7fa5080ddb47545fe9012a842e5b3 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 20 Jul 2011 21:08:57 -0400 Subject: [PATCH] Misc fixes. --- src/com/gitblit/DownloadZipServlet.java | 36 ++++++++++++++++++++++++++++++++++-- 1 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/com/gitblit/DownloadZipServlet.java b/src/com/gitblit/DownloadZipServlet.java index 86ca4e7..32369ae 100644 --- a/src/com/gitblit/DownloadZipServlet.java +++ b/src/com/gitblit/DownloadZipServlet.java @@ -30,6 +30,19 @@ import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; +/** + * Streams out a zip file from the specified repository for any tree path at any + * revision. + * + * Unlike the GitServlet and the SyndicationServlet, this servlet is not + * protected by an AccessRestrictionFilter. It performs its own authorization + * check, but it does not perform any authentication. The assumption is that + * requests to this servlet are made via the web ui and not by direct url + * access. Unauthorized requests fail with a standard 403 (FORBIDDEN) code. + * + * @author James Moger + * + */ public class DownloadZipServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -40,12 +53,32 @@ super(); } + /** + * Returns an url to this servlet for the specified parameters. + * + * @param baseURL + * @param repository + * @param objectId + * @param path + * @return an url + */ public static String asLink(String baseURL, String repository, String objectId, String path) { - return baseURL + (baseURL.endsWith("/") ? "" : "/") + "zip?r=" + repository + if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') { + baseURL = baseURL.substring(0, baseURL.length() - 1); + } + return baseURL + Constants.ZIP_PATH + "?r=" + repository + (path == null ? "" : ("&p=" + path)) + (objectId == null ? "" : ("&h=" + objectId)); } + /** + * Performs the authorization and zip streaming of the specified elements. + * + * @param request + * @param response + * @throws javax.servlet.ServletException + * @throws java.io.IOException + */ private void processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { @@ -89,7 +122,6 @@ Date date = JGitUtils.getCommitDate(commit); String contentType = "application/octet-stream"; response.setContentType(contentType + "; charset=" + response.getCharacterEncoding()); - // response.setContentLength(attachment.getFileSize()); response.setHeader("Content-Disposition", "attachment; filename=\"" + name + ".zip" + "\""); response.setDateHeader("Last-Modified", date.getTime()); -- Gitblit v1.9.1