summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-02-22 16:19:03 -0500
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:07 -0400
commit924c9b28edfda6582a5480a7c1a2dd5b3ce89d92 (patch)
treec7320fcbe678a622aeca0047135f5faca58ea093 /src/main/java/com/gitblit/transport/ssh/SshSessionFactory.java
parentaf816d3fdd18d6d7d1b2c854b70eb30be789d466 (diff)
downloadgitblit-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.java69
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;
+ }
+}