From 8c9a2037b5c0fed881a3ad6dd9cff364eed603d9 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 14 Jun 2011 16:55:13 -0400 Subject: [PATCH] Added AccessRestrictionFilter and simplified authentication. --- src/com/gitblit/GitBlitServer.java | 96 ++++++++++++++++------------------------------- 1 files changed, 33 insertions(+), 63 deletions(-) diff --git a/src/com/gitblit/GitBlitServer.java b/src/com/gitblit/GitBlitServer.java index 2495aee..4b6df70 100644 --- a/src/com/gitblit/GitBlitServer.java +++ b/src/com/gitblit/GitBlitServer.java @@ -34,13 +34,7 @@ import org.apache.log4j.PatternLayout; import org.apache.wicket.protocol.http.ContextParamWebApplicationFactory; import org.apache.wicket.protocol.http.WicketFilter; -import org.eclipse.jetty.http.security.Constraint; -import org.eclipse.jetty.security.ConstraintMapping; -import org.eclipse.jetty.security.ConstraintSecurityHandler; -import org.eclipse.jetty.security.LoginService; -import org.eclipse.jetty.security.authentication.BasicAuthenticator; import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.bio.SocketConnector; import org.eclipse.jetty.server.nio.SelectChannelConnector; @@ -53,6 +47,7 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jgit.http.server.GitServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -234,77 +229,52 @@ wicketFilter.setInitParameter(ContextParamWebApplicationFactory.APP_CLASS_PARAM, GitBlitWebApp.class.getName()); wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, wicketPathSpec); - wicketFilter.setInitParameter(WicketFilter.IGNORE_PATHS_PARAM, "git/"); + wicketFilter.setInitParameter(WicketFilter.IGNORE_PATHS_PARAM, "git/,feed/,zip/"); rootContext.addFilter(wicketFilter, wicketPathSpec, FilterMapping.DEFAULT); + + // JGit Filter and Servlet + if (settings.getBoolean(Keys.git.enableGitServlet, true)) { + String jgitPathSpec = Constants.GIT_SERVLET_PATH + "*"; + rootContext.addFilter(GitFilter.class, jgitPathSpec, FilterMapping.DEFAULT); + ServletHolder jGitServlet = rootContext.addServlet(GitServlet.class, jgitPathSpec); + jGitServlet.setInitParameter("base-path", params.repositoriesFolder); + jGitServlet.setInitParameter("export-all", + settings.getBoolean(Keys.git.exportAll, true) ? "1" : "0"); + } + + // Syndication Filter and Servlet + String feedPathSpec = Constants.SYNDICATION_SERVLET_PATH + "*"; + rootContext.addFilter(SyndicationFilter.class, feedPathSpec, FilterMapping.DEFAULT); + rootContext.addServlet(SyndicationServlet.class, feedPathSpec); // Zip Servlet rootContext.addServlet(DownloadZipServlet.class, Constants.ZIP_SERVLET_PATH + "*"); - // Syndication Servlet - rootContext.addServlet(SyndicationServlet.class, Constants.SYNDICATION_SERVLET_PATH + "*"); - - // Git Servlet - ServletHolder gitServlet = null; - String gitServletPathSpec = Constants.GIT_SERVLET_PATH + "*"; - if (settings.getBoolean(Keys.git.enableGitServlet, true)) { - gitServlet = rootContext.addServlet(GitBlitServlet.class, gitServletPathSpec); - gitServlet.setInitParameter("base-path", params.repositoriesFolder); - gitServlet.setInitParameter("export-all", - settings.getBoolean(Keys.git.exportAll, true) ? "1" : "0"); - } - // Login Service - LoginService loginService = null; String realmUsers = params.realmFile; - if (!StringUtils.isEmpty(realmUsers)) { - File realmFile = new File(realmUsers); - if (realmFile.exists()) { - logger.info("Setting up login service from " + realmUsers); - JettyLoginService jettyLoginService = new JettyLoginService(realmFile); - GitBlit.self().setLoginService(jettyLoginService); - loginService = jettyLoginService; + if (StringUtils.isEmpty(realmUsers)) { + logger.error(MessageFormat.format("PLEASE SPECIFY {0}!!", Keys.realm.realmFile)); + return; + } + File realmFile = new File(realmUsers); + if (!realmFile.exists()) { + try { + realmFile.createNewFile(); + } catch (IOException x) { + logger.error(MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmUsers), + x); + return; } } - - // Determine what handler to use - Handler handler; - if (gitServlet != null) { - if (loginService != null) { - // Authenticate Clone/Push - logger.info("Setting up authenticated git servlet clone/push access"); - - Constraint constraint = new Constraint(); - constraint.setAuthenticate(true); - constraint.setRoles(new String[] { "*" }); - - ConstraintMapping mapping = new ConstraintMapping(); - mapping.setPathSpec(gitServletPathSpec); - mapping.setConstraint(constraint); - - ConstraintSecurityHandler security = new ConstraintSecurityHandler(); - security.addConstraintMapping(mapping); - security.setAuthenticator(new BasicAuthenticator()); - security.setLoginService(loginService); - security.setStrict(false); - - security.setHandler(rootContext); - - handler = security; - } else { - // Anonymous Pull/Push - logger.info("Setting up anonymous git servlet pull/push access"); - handler = rootContext; - } - } else { - logger.info("Git servlet clone/push disabled"); - handler = rootContext; - } + logger.info("Setting up login service from " + realmUsers); + FileLoginService loginService = new FileLoginService(realmFile); + GitBlit.self().setLoginService(loginService); logger.info("Git repositories folder " + new File(params.repositoriesFolder).getAbsolutePath()); // Set the server's contexts - server.setHandler(handler); + server.setHandler(rootContext); // Setup the GitBlit context GitBlit gitblit = GitBlit.self(); -- Gitblit v1.9.1