David Ostrovsky
2014-02-22 af816d3fdd18d6d7d1b2c854b70eb30be789d466
src/main/java/com/gitblit/manager/ServicesManager.java
@@ -24,8 +24,13 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.servlet.http.HttpServletRequest;
import org.apache.sshd.server.Command;
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,12 +43,25 @@
import com.gitblit.fanout.FanoutService;
import com.gitblit.fanout.FanoutSocketService;
import com.gitblit.git.GitDaemon;
import com.gitblit.git.GitblitReceivePackFactory;
import com.gitblit.git.GitblitUploadPackFactory;
import com.gitblit.git.RepositoryResolver;
import com.gitblit.models.FederationModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.service.FederationPullService;
import com.gitblit.transport.ssh.SshCommandFactory;
import com.gitblit.transport.ssh.SshDaemon;
import com.gitblit.transport.ssh.SshSession;
import com.gitblit.transport.ssh.commands.CreateRepository;
import com.gitblit.transport.ssh.commands.VersionCommand;
import com.gitblit.utils.IdGenerator;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
import dagger.Module;
import dagger.ObjectGraph;
import dagger.Provides;
/**
 * Services manager manages long-running services/processes that either have no
@@ -67,6 +85,8 @@
   private GitDaemon gitDaemon;
   private SshDaemon sshDaemon;
   public ServicesManager(IGitblit gitblit) {
      this.settings = gitblit.getSettings();
      this.gitblit = gitblit;
@@ -77,6 +97,7 @@
      configureFederation();
      configureFanout();
      configureGitDaemon();
      configureSshDaemon();
      return this;
   }
@@ -135,6 +156,20 @@
         }
      } else {
         logger.info("Git Daemon is disabled.");
      }
   }
   protected void configureSshDaemon() {
      int port = settings.getInteger(Keys.git.sshPort, 0);
      String bindInterface = settings.getString(Keys.git.sshBindInterface, "localhost");
      if (port > 0) {
         try {
            sshDaemon = ObjectGraph.create(new SshModule()).get(SshDaemon.class);
            sshDaemon.start();
         } catch (IOException e) {
            sshDaemon = null;
            logger.error(MessageFormat.format("Failed to start SSH daemon on {0}:{1,number,0}", bindInterface, port), e);
         }
      }
   }
@@ -227,4 +262,40 @@
      }
   }
    @Module(library = true,
        injects = {
        IGitblit.class,
        SshCommandFactory.class,
        SshDaemon.class,
        })
    public class SshModule {
      @Provides @Named("create-repository") Command provideCreateRepository() {
        return new CreateRepository();
      }
      @Provides @Named("version") Command provideVersion() {
        return new VersionCommand();
      }
      @Provides @Singleton IdGenerator provideIdGenerator() {
         return new IdGenerator();
      }
      @Provides @Singleton RepositoryResolver<SshSession> provideRepositoryResolver() {
        return new RepositoryResolver<SshSession>(provideGitblit());
      }
      @Provides @Singleton UploadPackFactory<SshSession> provideUploadPackFactory() {
        return new GitblitUploadPackFactory<SshSession>(provideGitblit());
      }
      @Provides @Singleton ReceivePackFactory<SshSession> provideReceivePackFactory() {
        return new GitblitReceivePackFactory<SshSession>(provideGitblit());
      }
      @Provides @Singleton IGitblit provideGitblit() {
          return ServicesManager.this.gitblit;
      }
    }
}