From a70b43cde76b4baab82b4ce0d9ff82883f80b8df Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 26 Oct 2011 17:54:07 -0400 Subject: [PATCH] Added status icon --- src/com/gitblit/DownloadZipServlet.java | 100 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 68 insertions(+), 32 deletions(-) diff --git a/src/com/gitblit/DownloadZipServlet.java b/src/com/gitblit/DownloadZipServlet.java index 87fda90..ed3aa55 100644 --- a/src/com/gitblit/DownloadZipServlet.java +++ b/src/com/gitblit/DownloadZipServlet.java @@ -1,3 +1,18 @@ +/* + * Copyright 2011 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.gitblit; import java.util.Date; @@ -10,42 +25,61 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; -import com.gitblit.wicket.models.RepositoryModel; +/** + * Streams out a zip file from the specified repository for any tree path at any + * revision. + * + * @author James Moger + * + */ public class DownloadZipServlet extends HttpServlet { - - public static String asLink(String baseURL, String repository, String objectId, String path) { - return baseURL + (baseURL.endsWith("/") ? "" : "/") + "zip?r=" + repository + (path == null ? "" : ("&p=" + path)) + (objectId == null ? "" : ("&h=" + objectId)); - } private static final long serialVersionUID = 1L; - private final static Logger logger = LoggerFactory.getLogger(DownloadZipServlet.class); + private transient Logger logger = LoggerFactory.getLogger(DownloadZipServlet.class); public DownloadZipServlet() { super(); } - @Override - protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { - processRequest(request, response); + /** + * 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) { + 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)); } - @Override - protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { - processRequest(request, response); - } - - private void processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { - if (!GitBlit.self().settings().getBoolean(Keys.web.allowZipDownloads, true)) { + /** + * Creates a zip stream from the repository of the requested data. + * + * @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 { + if (!GitBlit.getBoolean(Keys.web.allowZipDownloads, true)) { 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"); @@ -56,18 +90,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('/', '_'); } @@ -80,8 +102,8 @@ 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.setHeader("Content-Disposition", "attachment; filename=\"" + name + ".zip" + + "\""); response.setDateHeader("Last-Modified", date.getTime()); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); @@ -97,4 +119,18 @@ logger.error("Failed to write attachment to client", t); } } + + @Override + protected void doPost(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, + java.io.IOException { + processRequest(request, response); + } + + @Override + protected void doGet(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, + java.io.IOException { + processRequest(request, response); + } } -- Gitblit v1.9.1