From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 19 Oct 2012 22:47:33 -0400 Subject: [PATCH] Exclude submodules from zip downloads (issue 151) --- src/com/gitblit/AccessRestrictionFilter.java | 24 +++++++++++++++++++++--- 1 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/com/gitblit/AccessRestrictionFilter.java b/src/com/gitblit/AccessRestrictionFilter.java index a8d50b8..3a10481 100644 --- a/src/com/gitblit/AccessRestrictionFilter.java +++ b/src/com/gitblit/AccessRestrictionFilter.java @@ -62,12 +62,22 @@ protected abstract String getUrlRequestAction(String url); /** + * Determine if the action may be executed on the repository. + * + * @param repository + * @param action + * @return true if the action may be performed + */ + protected abstract boolean isActionAllowed(RepositoryModel repository, String action); + + /** * Determine if the repository requires authentication. * * @param repository + * @param action * @return true if authentication required */ - protected abstract boolean requiresAuthentication(RepositoryModel repository); + protected abstract boolean requiresAuthentication(RepositoryModel repository, String action); /** * Determine if the user can access the repository and perform the specified @@ -110,6 +120,14 @@ httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } + + // Confirm that the action may be executed on the repository + if (!isActionAllowed(model, urlRequestType)) { + logger.info(MessageFormat.format("ARF: action {0} on {1} forbidden ({2})", + urlRequestType, model, HttpServletResponse.SC_FORBIDDEN)); + httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN); + return; + } // Wrap the HttpServletRequest with the AccessRestrictionRequest which // overrides the servlet container user principal methods. @@ -127,7 +145,7 @@ } // BASIC authentication challenge and response processing - if (!StringUtils.isEmpty(urlRequestType) && requiresAuthentication(model)) { + if (!StringUtils.isEmpty(urlRequestType) && requiresAuthentication(model, urlRequestType)) { if (user == null) { // challenge client to provide credentials. send 401. if (GitBlit.isDebugMode()) { @@ -138,7 +156,7 @@ return; } else { // check user access for request - if (user.canAdmin || canAccess(model, user, urlRequestType)) { + if (user.canAdmin() || canAccess(model, user, urlRequestType)) { // authenticated request permitted. // pass processing to the restricted servlet. newSession(authenticatedRequest, httpResponse); -- Gitblit v1.9.1