From 44e2ee1d05a9d455ae60dd64058b31f006d551b7 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 10 Apr 2014 18:58:08 -0400 Subject: [PATCH] Revise SSH public key integration with AuthenticationManager --- src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java | 42 +++++++++++++++++++++++++----------------- 1 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java b/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java index ef51340..ae6da3f 100644 --- a/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java +++ b/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java @@ -17,16 +17,15 @@ import java.net.SocketAddress; -import org.apache.mina.core.future.IoFuture; -import org.apache.mina.core.future.IoFutureListener; -import org.apache.mina.core.session.IoSession; import org.apache.mina.transport.socket.SocketSessionConfig; -import org.apache.sshd.server.session.ServerSession; +import org.apache.sshd.common.future.CloseFuture; +import org.apache.sshd.common.future.SshFutureListener; +import org.apache.sshd.common.io.IoSession; +import org.apache.sshd.common.io.mina.MinaSession; +import org.apache.sshd.common.session.AbstractSession; import org.apache.sshd.server.session.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import com.gitblit.utils.IdGenerator; /** @@ -38,32 +37,41 @@ private final Logger log = LoggerFactory.getLogger(getClass()); - private final IdGenerator idGenerator; - - public SshSessionFactory(IdGenerator idGenerator) { - this.idGenerator = idGenerator; + public SshSessionFactory() { } @Override - protected ServerSession createSession(final IoSession io) throws Exception { + protected AbstractSession createSession(final IoSession io) + throws Exception { log.info("connection accepted on " + io); - if (io.getConfig() instanceof SocketSessionConfig) { - final SocketSessionConfig c = (SocketSessionConfig) io.getConfig(); - c.setKeepAlive(true); + if (io instanceof MinaSession) { + if (((MinaSession) io).getSession().getConfig() instanceof SocketSessionConfig) { + ((SocketSessionConfig) ((MinaSession) io).getSession() + .getConfig()).setKeepAlive(true); + } } - final ServerSession s = (ServerSession) super.createSession(io); + final GitblitServerSession s = (GitblitServerSession) super + .createSession(io); SocketAddress peer = io.getRemoteAddress(); SshSession session = new SshSession(idGenerator.next(), peer); s.setAttribute(SshSession.KEY, session); - io.getCloseFuture().addListener(new IoFutureListener<IoFuture>() { + // TODO(davido): Log a session close without authentication as a + // failure. + s.addCloseSessionListener(new SshFutureListener<CloseFuture>() { @Override - public void operationComplete(IoFuture future) { + public void operationComplete(CloseFuture future) { log.info("connection closed on " + io); } }); return s; } + + @Override + protected AbstractSession doCreateSession(IoSession ioSession) + throws Exception { + return new GitblitServerSession(server, ioSession); + } } -- Gitblit v1.9.1