From aaecd8f2a36d2c0d780b42425aa57725fe708551 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] Move cache to IKeyManager and implement isStale() in FileKeyManager --- src/main/java/com/gitblit/transport/ssh/SshDaemon.java | 36 ++++++++++++++++++++---------------- 1 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java index 4a2239b..c8c20f5 100644 --- a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java +++ b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java @@ -24,11 +24,8 @@ import javax.inject.Singleton; import org.apache.sshd.SshServer; -import org.apache.sshd.common.io.IoServiceFactory; import org.apache.sshd.common.io.IoServiceFactoryFactory; -import org.apache.sshd.common.io.mina.MinaServiceFactory; import org.apache.sshd.common.io.mina.MinaServiceFactoryFactory; -import org.apache.sshd.common.io.nio2.Nio2ServiceFactory; import org.apache.sshd.common.io.nio2.Nio2ServiceFactoryFactory; import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider; import org.eclipse.jgit.internal.JGitText; @@ -41,9 +38,11 @@ import com.gitblit.git.GitblitUploadPackFactory; import com.gitblit.git.RepositoryResolver; import com.gitblit.manager.IGitblit; +import com.gitblit.transport.ssh.commands.AddKeyCommand; import com.gitblit.transport.ssh.commands.CreateRepository; import com.gitblit.transport.ssh.commands.DispatchCommand; import com.gitblit.transport.ssh.commands.Receive; +import com.gitblit.transport.ssh.commands.RemoveKeyCommand; import com.gitblit.transport.ssh.commands.ReviewCommand; import com.gitblit.transport.ssh.commands.SetAccountCommand; import com.gitblit.transport.ssh.commands.Upload; @@ -70,7 +69,7 @@ public static enum SshSessionBackend { MINA, NIO2 } - + /** * 22: IANA assigned port number for ssh. Note that this is a distinct * concept from gitblit's default conf for ssh port -- this "default" is @@ -95,7 +94,7 @@ public SshDaemon(IGitblit gitblit, IdGenerator idGenerator) { this.gitblit = gitblit; this.injector = ObjectGraph.create(new SshModule()); - + IStoredSettings settings = gitblit.getSettings(); int port = settings.getInteger(Keys.git.sshPort, 0); String bindInterface = settings.getString(Keys.git.sshBindInterface, @@ -110,7 +109,7 @@ backend == SshSessionBackend.MINA ? MinaServiceFactoryFactory.class.getName() : Nio2ServiceFactoryFactory.class.getName()); - + InetSocketAddress addr; if (StringUtils.isEmpty(bindInterface)) { addr = new InetSocketAddress(port); @@ -127,13 +126,15 @@ gitblit.getBaseFolder(), HOST_KEY_STORE).getPath())); sshd.setPublickeyAuthenticator(publickeyAuthenticator); sshd.setPasswordAuthenticator(new SshPasswordAuthenticator(gitblit)); - sshd.setSessionFactory(new SshSessionFactory(idGenerator)); + sshd.setSessionFactory(new SshSessionFactory()); sshd.setFileSystemFactory(new DisabledFilesystemFactory()); sshd.setTcpipForwardingFilter(new NonForwardingFilter()); DispatchCommand gitblitCmd = new DispatchCommand(); gitblitCmd.registerCommand(CreateRepository.class); gitblitCmd.registerCommand(VersionCommand.class); + gitblitCmd.registerCommand(AddKeyCommand.class); + gitblitCmd.registerCommand(RemoveKeyCommand.class); gitblitCmd.registerCommand(SetAccountCommand.class); gitblitCmd.registerCommand(ReviewCommand.class); @@ -145,9 +146,9 @@ root.registerDispatcher("gitblit", gitblitCmd); root.registerDispatcher("git", gitCmd); - root.setRepositoryResolver(new RepositoryResolver<SshSession>(gitblit)); - root.setUploadPackFactory(new GitblitUploadPackFactory<SshSession>(gitblit)); - root.setReceivePackFactory(new GitblitReceivePackFactory<SshSession>(gitblit)); + root.setRepositoryResolver(new RepositoryResolver<SshDaemonClient>(gitblit)); + root.setUploadPackFactory(new GitblitUploadPackFactory<SshDaemonClient>(gitblit)); + root.setReceivePackFactory(new GitblitReceivePackFactory<SshDaemonClient>(gitblit)); root.setAuthenticator(publickeyAuthenticator); SshCommandFactory commandFactory = new SshCommandFactory( @@ -187,9 +188,12 @@ sshd.start(); run.set(true); + String sshBackendStr = gitblit.getSettings().getString(Keys.git.sshBackend, + SshSessionBackend.NIO2.name()); + log.info(MessageFormat.format( - "SSH Daemon is listening on {0}:{1,number,0}", - sshd.getHost(), sshd.getPort())); + "SSH Daemon ({0}) is listening on {1}:{2,number,0}", + sshBackendStr, sshd.getHost(), sshd.getPort())); } /** @return true if this daemon is receiving connections. */ @@ -210,14 +214,14 @@ } } } - + protected IKeyManager getKeyManager() { IKeyManager keyManager = null; IStoredSettings settings = gitblit.getSettings(); String clazz = settings.getString(Keys.git.sshKeysManager, FileKeyManager.class.getName()); if (StringUtils.isEmpty(clazz)) { clazz = FileKeyManager.class.getName(); - } + } try { Class<? extends IKeyManager> managerClass = (Class<? extends IKeyManager>) Class.forName(clazz); keyManager = injector.get(managerClass).start(); @@ -232,7 +236,7 @@ } return keyManager; } - + /** * A nested Dagger graph is used for constructor dependency injection of * complex classes. @@ -252,7 +256,7 @@ @Provides @Singleton NullKeyManager provideNullKeyManager() { return new NullKeyManager(); } - + @Provides @Singleton FileKeyManager provideFileKeyManager() { return new FileKeyManager(SshDaemon.this.gitblit); } -- Gitblit v1.9.1