From 22957a70fb7ba8a38564d6b6be15c661da0c3a20 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] Start SSH usage documentation

---
 src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java |   38 ++++++++++++++++++++++++++++++--------
 1 files changed, 30 insertions(+), 8 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 597b9ea..5c02273 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -32,7 +32,8 @@
 import com.gitblit.git.RepositoryResolver;
 import com.gitblit.transport.ssh.AbstractGitCommand;
 import com.gitblit.transport.ssh.CommandMetaData;
-import com.gitblit.transport.ssh.SshSession;
+import com.gitblit.transport.ssh.SshKeyAuthenticator;
+import com.gitblit.transport.ssh.SshDaemonClient;
 import com.gitblit.utils.cli.SubcommandHandler;
 import com.google.common.base.Charsets;
 import com.google.common.base.Strings;
@@ -92,6 +93,12 @@
       }
 
       Command cmd = getCommand();
+      if (cmd.getClass().isAnnotationPresent(CommandMetaData.class)) {
+    	  CommandMetaData meta = cmd.getClass().getAnnotation(CommandMetaData.class);
+    	  if (meta.admin() && !ctx.getClient().getUser().canAdmin()) {
+    		  throw new UnloggedFailure(1, MessageFormat.format("{0} requires admin permissions", commandName));
+    	  }
+      }
       if (cmd instanceof BaseCommand) {
         BaseCommand bc = (BaseCommand) cmd;
         if (getName().isEmpty()) {
@@ -159,9 +166,15 @@
     String format = "%-" + maxLength + "s   %s";
     for (String name : Sets.newTreeSet(m.keySet())) {
       final Class<? extends Command> c = m.get(name);
-      usage.append("   ");
       CommandMetaData meta = c.getAnnotation(CommandMetaData.class);
       if (meta != null) {
+        if (meta.admin() && !ctx.getClient().getUser().canAdmin()) {
+      	  continue;
+        }
+        if (meta.hidden()) {
+        	continue;
+        }
+        usage.append("   ");
         usage.append(String.format(format, name,
             Strings.nullToEmpty(meta.description())));
       }
@@ -196,21 +209,30 @@
 		d.setRepositoryResolver(repositoryResolver);
 		d.setUploadPackFactory(gitblitUploadPackFactory);
 		d.setReceivePackFactory(gitblitReceivePackFactory);
+		d.setAuthenticator(authenticator);
+	  } else if (cmd instanceof BaseKeyCommand) {
+		  BaseKeyCommand k = (BaseKeyCommand)cmd;
+		  k.setAuthenticator(authenticator);
 	  }
   }
 
-  private RepositoryResolver<SshSession> repositoryResolver;
-  public void setRepositoryResolver(RepositoryResolver<SshSession> repositoryResolver) {
+  private RepositoryResolver<SshDaemonClient> repositoryResolver;
+  public void setRepositoryResolver(RepositoryResolver<SshDaemonClient> repositoryResolver) {
 	  this.repositoryResolver = repositoryResolver;
   }
 
-  private GitblitUploadPackFactory<SshSession> gitblitUploadPackFactory;
-  public void setUploadPackFactory(GitblitUploadPackFactory<SshSession> gitblitUploadPackFactory) {
+  private GitblitUploadPackFactory<SshDaemonClient> gitblitUploadPackFactory;
+  public void setUploadPackFactory(GitblitUploadPackFactory<SshDaemonClient> gitblitUploadPackFactory) {
 	  this.gitblitUploadPackFactory = gitblitUploadPackFactory;
   }
 
-  private GitblitReceivePackFactory<SshSession> gitblitReceivePackFactory;
-  public void setReceivePackFactory(GitblitReceivePackFactory<SshSession> gitblitReceivePackFactory) {
+  private GitblitReceivePackFactory<SshDaemonClient> gitblitReceivePackFactory;
+  public void setReceivePackFactory(GitblitReceivePackFactory<SshDaemonClient> gitblitReceivePackFactory) {
 	  this.gitblitReceivePackFactory = gitblitReceivePackFactory;
   }
+
+  private SshKeyAuthenticator authenticator;
+  public void setAuthenticator(SshKeyAuthenticator authenticator) {
+	this.authenticator = authenticator;
+  }
 }

--
Gitblit v1.9.1