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/commands/DispatchCommand.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java index b6944ea..31b718e 100644 --- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java +++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java @@ -27,7 +27,13 @@ import org.apache.sshd.server.Environment; import org.kohsuke.args4j.Argument; +import com.gitblit.git.GitblitReceivePackFactory; +import com.gitblit.git.GitblitUploadPackFactory; +import com.gitblit.git.RepositoryResolver; +import com.gitblit.transport.ssh.AbstractGitCommand; import com.gitblit.transport.ssh.CommandMetaData; +import com.gitblit.transport.ssh.SshKeyAuthenticator; +import com.gitblit.transport.ssh.SshSession; import com.gitblit.utils.cli.SubcommandHandler; import com.google.common.base.Charsets; import com.google.common.base.Strings; @@ -95,11 +101,11 @@ bc.setName(getName() + " " + commandName); } bc.setArguments(args.toArray(new String[args.size()])); - } else if (!args.isEmpty()) { - throw new UnloggedFailure(1, commandName + " does not take arguments"); } - provideStateTo(cmd); + provideBaseStateTo(cmd); + provideGitState(cmd); + reset(); //atomicCmd.set(cmd); cmd.start(env); @@ -136,7 +142,7 @@ } @Override -protected String usage() { + protected String usage() { final StringBuilder usage = new StringBuilder(); usage.append("Available commands"); if (!getName().isEmpty()) { @@ -173,4 +179,48 @@ usage.append("\n"); return usage.toString(); } + + // This is needed because we are not using provider or + // clazz.newInstance() for DispatchCommand + private void reset() { + args = new ArrayList<String>(); + } + + private void provideGitState(Command cmd) { + if (cmd instanceof AbstractGitCommand) { + AbstractGitCommand a = (AbstractGitCommand) cmd; + a.setRepositoryResolver(repositoryResolver); + a.setUploadPackFactory(gitblitUploadPackFactory); + a.setReceivePackFactory(gitblitReceivePackFactory); + } else if (cmd instanceof DispatchCommand) { + DispatchCommand d = (DispatchCommand)cmd; + d.setRepositoryResolver(repositoryResolver); + d.setUploadPackFactory(gitblitUploadPackFactory); + d.setReceivePackFactory(gitblitReceivePackFactory); + d.setAuthenticator(authenticator); + } else if (cmd instanceof SetAccountCommand) { + SetAccountCommand setAccountCommand = (SetAccountCommand)cmd; + setAccountCommand.setAuthenticator(authenticator); + } + } + + private RepositoryResolver<SshSession> repositoryResolver; + public void setRepositoryResolver(RepositoryResolver<SshSession> repositoryResolver) { + this.repositoryResolver = repositoryResolver; + } + + private GitblitUploadPackFactory<SshSession> gitblitUploadPackFactory; + public void setUploadPackFactory(GitblitUploadPackFactory<SshSession> gitblitUploadPackFactory) { + this.gitblitUploadPackFactory = gitblitUploadPackFactory; + } + + private GitblitReceivePackFactory<SshSession> gitblitReceivePackFactory; + public void setReceivePackFactory(GitblitReceivePackFactory<SshSession> gitblitReceivePackFactory) { + this.gitblitReceivePackFactory = gitblitReceivePackFactory; + } + + private SshKeyAuthenticator authenticator; + public void setAuthenticator(SshKeyAuthenticator authenticator) { + this.authenticator = authenticator; + } } -- Gitblit v1.9.1