diff --git a/project/build.scala b/project/build.scala index 22bf343..bd1bb03 100644 --- a/project/build.scala +++ b/project/build.scala @@ -1,14 +1,14 @@ -import sbt._ -import Keys._ -import play.twirl.sbt.SbtTwirl import com.earldouglas.xwp.JettyPlugin -import sbtassembly._ +import play.twirl.sbt.SbtTwirl +import sbt.Keys._ +import sbt._ import sbtassembly.AssemblyKeys._ +import sbtassembly._ object MyBuild extends Build { val Organization = "gitbucket" val Name = "gitbucket" - val Version = "3.9.0" + val Version = "3.9.1" val ScalaVersion = "2.11.6" val ScalatraVersion = "2.3.1" @@ -53,7 +53,7 @@ "org.apache.commons" % "commons-compress" % "1.9", "org.apache.commons" % "commons-email" % "1.3.3", "org.apache.httpcomponents" % "httpclient" % "4.3.6", - "org.apache.sshd" % "apache-sshd" % "0.11.0", + "org.apache.sshd" % "apache-sshd" % "1.0.0", "org.apache.tika" % "tika-core" % "1.10", "com.typesafe.slick" %% "slick" % "2.1.0", "com.novell.ldap" % "jldap" % "2009-10-07", diff --git a/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala b/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala index daf5c30..7d9eb23 100644 --- a/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala +++ b/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala @@ -1,10 +1,11 @@ package gitbucket.core.ssh +import java.security.PublicKey + import gitbucket.core.service.SshKeyService import gitbucket.core.servlet.Database -import org.apache.sshd.server.PublickeyAuthenticator +import org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator import org.apache.sshd.server.session.ServerSession -import java.security.PublicKey class PublicKeyAuthenticator extends PublickeyAuthenticator with SshKeyService { diff --git a/src/main/scala/gitbucket/core/ssh/SshServerListener.scala b/src/main/scala/gitbucket/core/ssh/SshServerListener.scala index 27f46ac..f79ae93 100644 --- a/src/main/scala/gitbucket/core/ssh/SshServerListener.scala +++ b/src/main/scala/gitbucket/core/ssh/SshServerListener.scala @@ -1,20 +1,25 @@ package gitbucket.core.ssh +import java.io.File +import java.util.concurrent.atomic.AtomicBoolean import javax.servlet.{ServletContextEvent, ServletContextListener} + import gitbucket.core.service.SystemSettingsService import gitbucket.core.util.Directory import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider import org.slf4j.LoggerFactory -import java.util.concurrent.atomic.AtomicBoolean object SshServer { private val logger = LoggerFactory.getLogger(SshServer.getClass) - private val server = org.apache.sshd.SshServer.setUpDefaultServer() + private val server = org.apache.sshd.server.SshServer.setUpDefaultServer() private val active = new AtomicBoolean(false) private def configure(port: Int, baseUrl: String) = { server.setPort(port) - server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser", "RSA")) + val provider = new SimpleGeneratorHostKeyProvider(new File(s"${Directory.GitBucketHome}/gitbucket.ser")) + provider.setAlgorithm("RSA") + provider.setOverwriteAllowed(false) + server.setKeyPairProvider(provider) server.setPublickeyAuthenticator(new PublicKeyAuthenticator) server.setCommandFactory(new GitCommandFactory(baseUrl)) server.setShellFactory(new NoShell) diff --git a/src/main/scala/gitbucket/core/ssh/SshUtil.scala b/src/main/scala/gitbucket/core/ssh/SshUtil.scala index 512332c..0663ca8 100644 --- a/src/main/scala/gitbucket/core/ssh/SshUtil.scala +++ b/src/main/scala/gitbucket/core/ssh/SshUtil.scala @@ -1,10 +1,13 @@ package gitbucket.core.ssh import java.security.PublicKey -import org.slf4j.LoggerFactory + import org.apache.commons.codec.binary.Base64 +import org.apache.sshd.common.config.keys.KeyUtils +import org.apache.sshd.common.util.buffer.ByteArrayBuffer import org.eclipse.jgit.lib.Constants -import org.apache.sshd.common.util.{KeyUtils, Buffer} +import org.slf4j.LoggerFactory + object SshUtil { @@ -20,7 +23,7 @@ try { val encodedKey = parts(1) val decode = Base64.decodeBase64(Constants.encodeASCII(encodedKey)) - Some(new Buffer(decode).getRawPublicKey) + Some(new ByteArrayBuffer(decode).getRawPublicKey) } catch { case e: Throwable => logger.debug(e.getMessage, e)