From 790c3829edafcb41d6eeb14301a23db22c559e96 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 01 Jul 2011 17:45:23 -0400 Subject: [PATCH] Documentation. Added upgrade info to site. Moved todos to GoogleCode. --- src/com/gitblit/GitBlitServer.java | 143 ++++++++--------------------------------------- 1 files changed, 26 insertions(+), 117 deletions(-) diff --git a/src/com/gitblit/GitBlitServer.java b/src/com/gitblit/GitBlitServer.java index c873157..02cc54a 100644 --- a/src/com/gitblit/GitBlitServer.java +++ b/src/com/gitblit/GitBlitServer.java @@ -30,17 +30,7 @@ import java.util.ArrayList; import java.util.List; -import org.apache.log4j.ConsoleAppender; -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; @@ -48,9 +38,6 @@ import org.eclipse.jetty.server.ssl.SslConnector; import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; import org.eclipse.jetty.server.ssl.SslSocketConnector; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; -import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.WebAppContext; import org.slf4j.Logger; @@ -61,15 +48,10 @@ import com.beust.jcommander.ParameterException; import com.beust.jcommander.Parameters; import com.gitblit.utils.StringUtils; -import com.gitblit.wicket.GitBlitWebApp; public class GitBlitServer { - private static final String BORDER = "***********************************************************"; - private static Logger logger; - - private static final FileSettings FILESETTINGS = new FileSettings(); public static void main(String[] args) { Params params = new Params(); @@ -91,9 +73,9 @@ } private static void usage(JCommander jc, ParameterException t) { - System.out.println(BORDER); + System.out.println(Constants.BORDER); System.out.println(Constants.getGitBlitVersion()); - System.out.println(BORDER); + System.out.println(Constants.BORDER); System.out.println(); if (t != null) { System.out.println(t.getMessage()); @@ -129,31 +111,12 @@ * Start Server. */ private static void start(Params params) { - String pattern = FILESETTINGS.getString(Keys.server.log4jPattern, - "%-5p %d{MM-dd HH:mm:ss.SSS} %-20.20c{1} %m%n"); - - // allow os override of logging pattern - String os = System.getProperty("os.name").toLowerCase(); - if (os.indexOf("windows") > -1) { - String winPattern = FILESETTINGS.getString(Keys.server.log4jPattern_windows, pattern); - if (!StringUtils.isEmpty(winPattern)) { - pattern = winPattern; - } - } else if (os.indexOf("linux") > -1) { - String linuxPattern = FILESETTINGS.getString(Keys.server.log4jPattern_linux, pattern); - if (!StringUtils.isEmpty(linuxPattern)) { - pattern = linuxPattern; - } - } - - PatternLayout layout = new PatternLayout(pattern); - org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger(); - rootLogger.addAppender(new ConsoleAppender(layout)); + FileSettings settings = Params.FILESETTINGS; logger = LoggerFactory.getLogger(GitBlitServer.class); - logger.info(BORDER); + logger.info(Constants.BORDER); logger.info(Constants.getGitBlitVersion()); - logger.info(BORDER); + logger.info(Constants.BORDER); String osname = System.getProperty("os.name"); String osversion = System.getProperty("os.version"); @@ -163,7 +126,7 @@ List<Connector> connectors = new ArrayList<Connector>(); if (params.port > 0) { Connector httpConnector = createConnector(params.useNIO, params.port); - String bindInterface = FILESETTINGS.getString(Keys.server.httpBindInterface, null); + String bindInterface = settings.getString(Keys.server.httpBindInterface, null); if (!StringUtils.isEmpty(bindInterface)) { logger.warn(MessageFormat.format("Binding connector on port {0} to {1}", params.port, bindInterface)); @@ -182,7 +145,7 @@ if (keystore.exists()) { Connector secureConnector = createSSLConnector(keystore, params.storePassword, params.useNIO, params.securePort); - String bindInterface = FILESETTINGS.getString(Keys.server.httpsBindInterface, null); + String bindInterface = settings.getString(Keys.server.httpsBindInterface, null); if (!StringUtils.isEmpty(bindInterface)) { logger.warn(MessageFormat.format("Binding ssl connector on port {0} to {1}", params.securePort, bindInterface)); @@ -231,81 +194,23 @@ sessionManager.setSecureCookies(params.port <= 0 && params.securePort > 0); rootContext.getSessionHandler().setSessionManager(sessionManager); - // Wicket Filter - String wicketPathSpec = "/*"; - FilterHolder wicketFilter = new FilterHolder(WicketFilter.class); - wicketFilter.setInitParameter(ContextParamWebApplicationFactory.APP_CLASS_PARAM, - GitBlitWebApp.class.getName()); - wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, wicketPathSpec); - wicketFilter.setInitParameter(WicketFilter.IGNORE_PATHS_PARAM, "git/"); - rootContext.addFilter(wicketFilter, wicketPathSpec, FilterMapping.DEFAULT); - - // Zip Servlet - rootContext.addServlet(DownloadZipServlet.class, Constants.ZIP_SERVLET_PATH + "*"); - - // Git Servlet - ServletHolder gitServlet = null; - String gitServletPathSpec = Constants.GIT_SERVLET_PATH + "*"; - if (FILESETTINGS.getBoolean(Keys.git.enableGitServlet, true)) { - gitServlet = rootContext.addServlet(GitBlitServlet.class, gitServletPathSpec); - gitServlet.setInitParameter("base-path", params.repositoriesFolder); - gitServlet.setInitParameter("export-all", - FILESETTINGS.getBoolean(Keys.git.exportAll, true) ? "1" : "0"); + // Ensure there is a defined User Service + String realmUsers = params.userService; + if (StringUtils.isEmpty(realmUsers)) { + logger.error(MessageFormat.format("PLEASE SPECIFY {0}!!", Keys.realm.userService)); + return; } - // 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; - } - } - - // 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; - } + // Override settings + settings.overrideSetting(Keys.realm.userService, params.userService); + settings.overrideSetting(Keys.git.repositoriesFolder, params.repositoriesFolder); // Set the server's contexts - server.setHandler(handler); + server.setHandler(rootContext); // Setup the GitBlit context GitBlit gitblit = GitBlit.self(); - gitblit.configureContext(FILESETTINGS); + gitblit.configureContext(settings); rootContext.addEventListener(gitblit); // Start the Server @@ -386,6 +291,8 @@ private final Server server; + private final Logger logger = LoggerFactory.getLogger(ShutdownMonitorThread.class); + public ShutdownMonitorThread(Server server, Params params) { this.server = server; setDaemon(true); @@ -408,9 +315,9 @@ BufferedReader reader = new BufferedReader(new InputStreamReader( accept.getInputStream())); reader.readLine(); - logger.info(BORDER); + logger.info(Constants.BORDER); logger.info("Stopping " + Constants.NAME); - logger.info(BORDER); + logger.info(Constants.BORDER); server.stop(); server.setStopAtShutdown(false); accept.close(); @@ -424,6 +331,8 @@ @Parameters(separators = " ") private static class Params { + private static final FileSettings FILESETTINGS = new FileSettings(Constants.PROPERTIES_FILE); + /* * Server parameters */ @@ -433,7 +342,7 @@ @Parameter(names = { "--stop" }, description = "Stop Server") public Boolean stop = false; - @Parameter(names = { "--tempFolder" }, description = "Server temp folder") + @Parameter(names = { "--tempFolder" }, description = "Folder for server to extract built-in webapp") public String temp = FILESETTINGS.getString(Keys.server.tempFolder, "temp"); /* @@ -446,8 +355,8 @@ /* * Authentication Parameters */ - @Parameter(names = { "--realmFile" }, description = "Users Realm Hash File") - public String realmFile = FILESETTINGS.getString(Keys.realm.realmFile, "users.properties"); + @Parameter(names = { "--userService" }, description = "Authentication and Authorization Service (filename or fully qualified classname)") + public String userService = FILESETTINGS.getString(Keys.realm.userService, "users.properties"); /* * JETTY Parameters -- Gitblit v1.9.1