- import org.eclipse.jetty.server.ConnectionFactory;
- import org.eclipse.jetty.server.Connector;
- import org.eclipse.jetty.server.Handler;
- import org.eclipse.jetty.server.HttpConnectionFactory;
- import org.eclipse.jetty.server.Server;
- import org.eclipse.jetty.server.handler.StatisticsHandler;
- import org.eclipse.jetty.webapp.WebAppContext;
-
- import java.io.File;
- import java.net.URL;
- import java.net.InetSocketAddress;
- import java.security.ProtectionDomain;
-
- public class JettyLauncher {
- public static void main(String[] args) throws Exception {
- System.setProperty("java.awt.headless", "true");
-
- String host = null;
- int port = 8080;
- InetSocketAddress address = null;
- String contextPath = "/";
- String tmpDirPath="";
- boolean forceHttps = false;
-
- for(String arg: args) {
- if(arg.startsWith("--") && arg.contains("=")) {
- String[] dim = arg.split("=");
- if(dim.length >= 2) {
- switch (dim[0]) {
- case "--host":
- host = dim[1];
- break;
- case "--port":
- port = Integer.parseInt(dim[1]);
- break;
- case "--prefix":
- contextPath = dim[1];
- if (!contextPath.startsWith("/")) {
- contextPath = "/" + contextPath;
- }
- break;
- case "--max_file_size":
- System.setProperty("gitbucket.maxFileSize", dim[1]);
- break;
- case "--gitbucket.home":
- System.setProperty("gitbucket.home", dim[1]);
- break;
- case "--temp_dir":
- tmpDirPath = dim[1];
- break;
- }
- }
- }
- }
-
- if(host != null) {
- address = new InetSocketAddress(host, port);
- } else {
- address = new InetSocketAddress(port);
- }
-
- Server server = new Server(address);
-
- // SelectChannelConnector connector = new SelectChannelConnector();
- // if(host != null) {
- // connector.setHost(host);
- // }
- // connector.setMaxIdleTime(1000 * 60 * 60);
- // connector.setSoLingerTime(-1);
- // connector.setPort(port);
- // server.addConnector(connector);
-
- // Disabling Server header
- for (Connector connector : server.getConnectors()) {
- for (ConnectionFactory factory : connector.getConnectionFactories()) {
- if (factory instanceof HttpConnectionFactory) {
- ((HttpConnectionFactory) factory).getHttpConfiguration().setSendServerVersion(false);
- }
- }
- }
-
- WebAppContext context = new WebAppContext();
-
- File tmpDir;
- if(tmpDirPath.equals("")){
- tmpDir = new File(getGitBucketHome(), "tmp");
- if(!tmpDir.exists()){
- tmpDir.mkdirs();
- }
- } else {
- tmpDir = new File(tmpDirPath);
- if(!tmpDir.exists()){
- throw new java.io.FileNotFoundException(
- String.format("temp_dir \"%s\" not found", tmpDirPath));
- } else if(!tmpDir.isDirectory()) {
- throw new IllegalArgumentException(
- String.format("temp_dir \"%s\" is not a directory", tmpDirPath));
- }
- }
- context.setTempDirectory(tmpDir);
-
- // Disabling the directory listing feature.
- context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
-
- ProtectionDomain domain = JettyLauncher.class.getProtectionDomain();
- URL location = domain.getCodeSource().getLocation();
-
- context.setContextPath(contextPath);
- context.setDescriptor(location.toExternalForm() + "/WEB-INF/web.xml");
- context.setServer(server);
- context.setWar(location.toExternalForm());
- if (forceHttps) {
- context.setInitParameter("org.scalatra.ForceHttps", "true");
- }
-
- Handler handler = addStatisticsHandler(context);
-
- server.setHandler(handler);
- server.setStopAtShutdown(true);
- server.setStopTimeout(7_000);
- server.start();
- server.join();
- }
-
- private static File getGitBucketHome(){
- String home = System.getProperty("gitbucket.home");
- if(home != null && home.length() > 0){
- return new File(home);
- }
- home = System.getenv("GITBUCKET_HOME");
- if(home != null && home.length() > 0){
- return new File(home);
- }
- return new File(System.getProperty("user.home"), ".gitbucket");
- }
-
- private static Handler addStatisticsHandler(Handler handler) {
- // The graceful shutdown is implemented via the statistics handler.
- // See the following: https://bugs.eclipse.org/bugs/show_bug.cgi?id=420142
- final StatisticsHandler statisticsHandler = new StatisticsHandler();
- statisticsHandler.setHandler(handler);
- return statisticsHandler;
- }
- }