diff options
author | James Moger <james.moger@gitblit.com> | 2014-02-22 16:19:03 -0500 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 18:58:07 -0400 |
commit | 924c9b28edfda6582a5480a7c1a2dd5b3ce89d92 (patch) | |
tree | c7320fcbe678a622aeca0047135f5faca58ea093 /src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java | |
parent | af816d3fdd18d6d7d1b2c854b70eb30be789d466 (diff) | |
download | gitblit-924c9b28edfda6582a5480a7c1a2dd5b3ce89d92.tar.gz gitblit-924c9b28edfda6582a5480a7c1a2dd5b3ce89d92.zip |
Eliminate use of Dagger and do not create inner classes
This change outlines somethings I'd like to see in your latest code.
1. Elimination of Dagger
2. Less noise from inner class instantiation
3. Formalizing filesystem location for keys instead of Unix-y /tmp/
4. Password authentication as alternative to Key authentication
Change-Id: I7a76e1811ad7cd545444fd8b59bbe8c4f45ccfec
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java')
-rw-r--r-- | src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java b/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java new file mode 100644 index 00000000..ef513404 --- /dev/null +++ b/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java @@ -0,0 +1,69 @@ +/* + * Copyright 2014 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit.transport.ssh; + +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.server.session.SessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.gitblit.utils.IdGenerator; + + +/** + * + * @author James Moger + * + */ +public class SshSessionFactory extends SessionFactory { + + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final IdGenerator idGenerator; + + public SshSessionFactory(IdGenerator idGenerator) { + this.idGenerator = idGenerator; + } + + @Override + protected ServerSession 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); + } + + final ServerSession s = (ServerSession) 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>() { + @Override + public void operationComplete(IoFuture future) { + log.info("connection closed on " + io); + } + }); + return s; + } +} |