From 8d96b960e472433d2b4a5b71df7000bf1fbde648 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 18:58:10 -0400
Subject: [PATCH] Track the SSH public key used for a session and add a `keys which` command

---
 src/main/java/com/gitblit/transport/ssh/gitblit/KeysDispatcher.java |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/gitblit/KeysDispatcher.java b/src/main/java/com/gitblit/transport/ssh/gitblit/KeysDispatcher.java
index 61764c4..b42be17 100644
--- a/src/main/java/com/gitblit/transport/ssh/gitblit/KeysDispatcher.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/KeysDispatcher.java
@@ -48,6 +48,7 @@
 		register(user, AddKey.class);
 		register(user, RemoveKey.class);
 		register(user, ListKeys.class);
+		register(user, WhichKey.class);
 	}
 
 	@CommandMetaData(name = "add", description = "Add an SSH public key to your account")
@@ -177,4 +178,33 @@
 			stdout.println(FlipTable.of(headers, data, Borders.BODY_HCOLS));
 		}
 	}
+
+	@CommandMetaData(name = "which", description = "Display the SSH public key used for this session")
+	public static class WhichKey extends SshCommand {
+
+		@Option(name = "-L", usage = "list complete public key parameters")
+		private boolean showRaw;
+
+		@Override
+		public void run() throws UnloggedFailure {
+			SshKey key = getContext().getClient().getKey();
+			if (key == null) {
+				throw new UnloggedFailure(1,  "You have not authenticated with an SSH public key.");
+			}
+
+			if (showRaw) {
+				stdout.println(key.getRawData());
+			} else {
+				asTable(key);
+			}
+		}
+
+		protected void asTable(SshKey key) {
+			String[] headers = { "Fingerprint", "Comment", "Type" };
+			Object[][] data = new Object[1][];
+			data[0] = new Object[] { key.getFingerprint(), key.getComment(), key.getAlgorithm() };
+
+			stdout.println(FlipTable.of(headers, data, Borders.BODY_HCOLS));
+		}
+	}
 }

--
Gitblit v1.9.1