James Moger
2012-10-13 c658df9e87d65b08d5482cf04489cb0532ff83dd
src/com/gitblit/RpcFilter.java
@@ -60,11 +60,11 @@
      String fullUrl = getFullUrl(httpRequest);
      RpcRequest requestType = RpcRequest.fromName(httpRequest.getParameter("req"));
      if (requestType == null) {
         httpResponse.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
         httpResponse.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
         return;
      }
      boolean adminRequest = requestType.exceeds(RpcRequest.LIST_REPOSITORIES);
      boolean adminRequest = requestType.exceeds(RpcRequest.LIST_SETTINGS);
      // conditionally reject all rpc requests
      if (!GitBlit.getBoolean(Keys.web.enableRpcServlet, true)) {
@@ -75,22 +75,23 @@
      boolean authenticateView = GitBlit.getBoolean(Keys.web.authenticateViewPages, false);
      boolean authenticateAdmin = GitBlit.getBoolean(Keys.web.authenticateAdminPages, true);
      // Wrap the HttpServletRequest with the RpcServletnRequest which
      // Wrap the HttpServletRequest with the RpcServletRequest which
      // overrides the servlet container user principal methods.
      AuthenticatedRequest authenticatedRequest = new AuthenticatedRequest(httpRequest);
      UserModel user = getUser(httpRequest);
      if (user != null) {
         authenticatedRequest.setUser(user);
      }
      // conditionally reject rpc administration requests
      if (adminRequest && !GitBlit.getBoolean(Keys.web.enableRpcAdministration, false)) {
         logger.warn(Keys.web.enableRpcAdministration + " must be set TRUE for administrative rpc requests.");
      // conditionally reject rpc management/administration requests
      if (adminRequest && !GitBlit.getBoolean(Keys.web.enableRpcManagement, false)) {
         logger.warn(MessageFormat.format("{0} must be set TRUE for {1} rpc requests.",
               Keys.web.enableRpcManagement, requestType.toString()));
         httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
         return;
      }
      // BASIC authentication challenge and response processing
      if ((adminRequest && authenticateAdmin) || (!adminRequest && authenticateView)) {
         if (user == null) {
@@ -104,7 +105,7 @@
            return;
         } else {
            // check user access for request
            if (user.canAdmin || canAccess(user, requestType)) {
            if (user.canAdmin() || canAccess(user, requestType)) {
               // authenticated request permitted.
               // pass processing to the restricted servlet.
               newSession(authenticatedRequest, httpResponse);
@@ -134,10 +135,12 @@
   private boolean canAccess(UserModel user, RpcRequest requestType) {
      switch (requestType) {
      case GET_PROTOCOL:
         return true;
      case LIST_REPOSITORIES:
         return true;
      default:
         return user.canAdmin;
         return user.canAdmin();
      }
   }
}