From fe7c01a8bd76dff240e74bb770212911e227ba59 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 03 Feb 2012 17:24:51 -0500 Subject: [PATCH] Return to Users page after add/edit team --- src/com/gitblit/DownloadZipServlet.java | 49 +++++++++++++++++++++++++++---------------------- 1 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/com/gitblit/DownloadZipServlet.java b/src/com/gitblit/DownloadZipServlet.java index 5f2a2a4..209272f 100644 --- a/src/com/gitblit/DownloadZipServlet.java +++ b/src/com/gitblit/DownloadZipServlet.java @@ -15,8 +15,12 @@ */ package com.gitblit; +import java.io.IOException; +import java.text.MessageFormat; +import java.text.ParseException; import java.util.Date; +import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; @@ -25,20 +29,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.gitblit.Constants.AccessRestrictionType; -import com.gitblit.models.RepositoryModel; import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.MarkdownUtils; 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 * @@ -72,7 +69,7 @@ } /** - * Performs the authorization and zip streaming of the specified elements. + * Creates a zip stream from the repository of the requested data. * * @param request * @param response @@ -86,8 +83,8 @@ logger.warn("Zip downloads are disabled"); response.sendError(HttpServletResponse.SC_FORBIDDEN); return; - } + String repository = request.getParameter("r"); String basePath = request.getParameter("p"); String objectId = request.getParameter("h"); @@ -98,18 +95,6 @@ name = name.substring(name.lastIndexOf('/') + 1); } - // check roles first - boolean authorized = request.isUserInRole(Constants.ADMIN_ROLE); - authorized |= request.isUserInRole(repository); - - if (!authorized) { - RepositoryModel model = GitBlit.self().getRepositoryModel(repository); - if (model.accessRestriction.atLeast(AccessRestrictionType.VIEW)) { - logger.warn("Unauthorized access via zip servlet for " + model.name); - response.sendError(HttpServletResponse.SC_FORBIDDEN); - return; - } - } if (!StringUtils.isEmpty(basePath)) { name += "-" + basePath.replace('/', '_'); } @@ -118,8 +103,18 @@ } Repository r = GitBlit.self().getRepository(repository); + if (r == null) { + error(response, MessageFormat.format("# Error\nFailed to find repository {0}", repository)); + return; + } RevCommit commit = JGitUtils.getCommit(r, objectId); + if (commit == null) { + error(response, MessageFormat.format("# Error\nFailed to find commit {0}", objectId)); + r.close(); + return; + } Date date = JGitUtils.getCommitDate(commit); + String contentType = "application/octet-stream"; response.setContentType(contentType + "; charset=" + response.getCharacterEncoding()); response.setHeader("Content-Disposition", "attachment; filename=\"" + name + ".zip" @@ -135,11 +130,21 @@ } catch (Throwable t) { logger.error("Failed to write attachment to client", t); } + + // close the repository + r.close(); } catch (Throwable t) { logger.error("Failed to write attachment to client", t); } } + private void error(HttpServletResponse response, String mkd) throws ServletException, + IOException, ParseException { + String content = MarkdownUtils.transformMarkdown(mkd); + response.setContentType("text/html; charset=" + Constants.ENCODING); + response.getWriter().write(content); + } + @Override protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, -- Gitblit v1.9.1