John Crygier
2012-04-10 f3b625d298bab922c64192c25914e352bd87e59e
src/com/gitblit/GitBlitServer.java
@@ -29,6 +29,7 @@
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import org.eclipse.jetty.ajp.Ajp13SocketConnector;
import org.eclipse.jetty.server.Connector;
@@ -50,6 +51,10 @@
import com.beust.jcommander.ParameterException;
import com.beust.jcommander.Parameters;
import com.gitblit.utils.StringUtils;
import com.unboundid.ldap.listener.InMemoryDirectoryServer;
import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;
import com.unboundid.ldap.listener.InMemoryListenerConfig;
import com.unboundid.ldif.LDIFReader;
/**
 * GitBlitServer is the embedded Jetty server for Gitblit GO. This class starts
@@ -266,6 +271,33 @@
      // Override settings from the command-line
      settings.overrideSetting(Keys.realm.userService, params.userService);
      settings.overrideSetting(Keys.git.repositoriesFolder, params.repositoriesFolder);
      // Start up an in-memory LDAP server, if configured
      try {
         if (StringUtils.isEmpty(params.ldapLdifFile) == false) {
            File ldifFile = new File(params.ldapLdifFile);
            if (ldifFile != null && ldifFile.exists()) {
               String firstLine = new Scanner(ldifFile).nextLine();
               String rootDN = firstLine.substring(4);
               String bindUserName = settings.getString(Keys.realm.ldap_username, "");
               String bindPassword = settings.getString(Keys.realm.ldap_password, "");
               InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(rootDN);
               config.addAdditionalBindCredentials(bindUserName, bindPassword);
               config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", 389));
               config.setSchema(null);
               InMemoryDirectoryServer ds = new InMemoryDirectoryServer(config);
               ds.importFromLDIF(true, new LDIFReader(ldifFile));
               ds.startListening();
               logger.info("LDAP Server started at ldap://localhost:389");
            }
         }
      } catch (Exception e) {
         // Completely optional, just show a warning
         logger.warn("Unable to start LDAP server", e);
      }
      // Set the server's contexts
      server.setHandler(rootContext);
@@ -504,6 +536,9 @@
       */
      @Parameter(names = { "--settings" }, description = "Path to alternative settings")
      public String settingsfile;
      @Parameter(names = { "--ldapLdifFile" }, description = "Path to LDIF file.  This will cause an in-memory LDAP server to be started according to gitblit settings")
      public String ldapLdifFile;
   }
}