diff --git a/src/main/scala/ssh/GitCommand.scala b/src/main/scala/ssh/GitCommand.scala index 06e450a..f855168 100644 --- a/src/main/scala/ssh/GitCommand.scala +++ b/src/main/scala/ssh/GitCommand.scala @@ -8,6 +8,9 @@ import util.Directory._ import org.eclipse.jgit.transport.{ReceivePack, UploadPack} import org.apache.sshd.server.command.UnknownCommand +import servlet.{Database, CommitLogHook} +import service.SystemSettingsService.SystemSettings +import service.SystemSettingsService class GitCommandFactory extends CommandFactory { @@ -85,16 +88,25 @@ } } -class GitReceivePack(command: String) extends GitCommand(command: String) { +class GitReceivePack(command: String) extends GitCommand(command: String) with SystemSettingsService { override def runnable = new Runnable { + + // TODO correct this info + val pusher: String = "user1" + val baseURL: String = loadSystemSettings().baseUrl.getOrElse("http://localhost:8080") + override def run(): Unit = { using(Git.open(getRepositoryDir(owner, repositoryName))) { git => val repository = git.getRepository // TODO hook commit val receive = new ReceivePack(repository) - receive.receive(in, out, err) - callback.onExit(0) + receive.setPostReceiveHook(new CommitLogHook(owner, repositoryName, pusher, baseURL)) + Database(SshServer.getServletContext) withTransaction { + receive.receive(in, out, err) + callback.onExit(0) + } } } } + } diff --git a/src/main/scala/ssh/SshServerListener.scala b/src/main/scala/ssh/SshServerListener.scala index 0d36339..dda7dcd 100644 --- a/src/main/scala/ssh/SshServerListener.scala +++ b/src/main/scala/ssh/SshServerListener.scala @@ -1,6 +1,6 @@ package ssh -import javax.servlet.{ServletContextEvent, ServletContextListener} +import javax.servlet.{ServletContext, ServletContextEvent, ServletContextListener} import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider import org.slf4j.LoggerFactory @@ -13,6 +13,9 @@ private val server = org.apache.sshd.SshServer.setUpDefaultServer() + // TODO think other way to create database session + private var context: ServletContext = null + private def configure() = { server.setPort(DEFAULT_PORT) @@ -23,8 +26,9 @@ server.setCommandFactory(new GitCommandFactory) } - def start() = { + def start(context: ServletContext) = { if (SSH_SERVICE_ENABLE) { + this.context = context configure() server.start() logger.info(s"Start SSH Server Listen on ${server.getPort}") @@ -34,6 +38,8 @@ def stop() = { server.stop(true) } + + def getServletContext = this.context; } /* @@ -46,7 +52,7 @@ class SshServerListener extends ServletContextListener { override def contextInitialized(sce: ServletContextEvent): Unit = { - SshServer.start() + SshServer.start(sce.getServletContext()) } override def contextDestroyed(sce: ServletContextEvent): Unit = {