From af816d3fdd18d6d7d1b2c854b70eb30be789d466 Mon Sep 17 00:00:00 2001
From: David Ostrovsky <david@ostrovsky.org>
Date: Thu, 10 Apr 2014 18:58:07 -0400
Subject: [PATCH] Convert SshDaemon to unix format

---
 src/main/java/com/gitblit/manager/ServicesManager.java |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/ServicesManager.java b/src/main/java/com/gitblit/manager/ServicesManager.java
index 8107a7d..219e4ea 100644
--- a/src/main/java/com/gitblit/manager/ServicesManager.java
+++ b/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;
+      }
+    }
 }

--
Gitblit v1.9.1