summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-03-22 10:38:06 -0400
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:09 -0400
commitbcc8a015ae552726742b4f437b2cb9e809270f96 (patch)
tree0ed21e1ca312121df8a4db01cb2c6bf0d125815f /src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
parent5bed299423d4ba418c64732c51e567817a7f7e45 (diff)
downloadgitblit-bcc8a015ae552726742b4f437b2cb9e809270f96.tar.gz
gitblit-bcc8a015ae552726742b4f437b2cb9e809270f96.zip
Handle ssh keys as objects, not strings, and improve the ls and rm key commands
"gitblit keys ls" now defaults to showing an indexed list of fingerprints which almost matches the output of "sshadd -l". The indexes are useful specifying key(s) to remove using "gitblit keys rm <index>". This is an important improvement for key management.
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh/FileKeyManager.java')
-rw-r--r--src/main/java/com/gitblit/transport/ssh/FileKeyManager.java28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
index defb4a3e..8a3d2ff5 100644
--- a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
+++ b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java
@@ -17,17 +17,12 @@ package com.gitblit.transport.ssh;
import java.io.File;
import java.io.IOException;
-import java.security.PublicKey;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.sshd.common.util.Buffer;
-import org.eclipse.jgit.lib.Constants;
-
import com.gitblit.Keys;
import com.gitblit.manager.IRuntimeManager;
import com.google.common.base.Charsets;
@@ -92,7 +87,7 @@ public class FileKeyManager extends IPublicKeyManager {
}
@Override
- protected List<PublicKey> getKeysImpl(String username) {
+ protected List<SshKey> getKeysImpl(String username) {
try {
log.info("loading keystore for {}", username);
File keystore = getKeystore(username);
@@ -100,7 +95,7 @@ public class FileKeyManager extends IPublicKeyManager {
return null;
}
if (keystore.exists()) {
- List<PublicKey> list = new ArrayList<PublicKey>();
+ List<SshKey> list = new ArrayList<SshKey>();
for (String entry : Files.readLines(keystore, Charsets.ISO_8859_1)) {
if (entry.trim().length() == 0) {
// skip blanks
@@ -110,9 +105,8 @@ public class FileKeyManager extends IPublicKeyManager {
// skip comments
continue;
}
- final String[] parts = entry.split(" ");
- final byte[] bin = Base64.decodeBase64(Constants.encodeASCII(parts[1]));
- list.add(new Buffer(bin).getRawPublicKey());
+ SshKey key = new SshKey(entry);
+ list.add(key);
}
if (list.isEmpty()) {
@@ -133,9 +127,9 @@ public class FileKeyManager extends IPublicKeyManager {
* by disregarding the comment/description field during key comparisons.
*/
@Override
- public boolean addKey(String username, String data) {
+ public boolean addKey(String username, SshKey key) {
try {
- String newKey = stripCommentFromKey(data);
+ String newKey = stripCommentFromKey(key.getRawData());
List<String> lines = new ArrayList<String>();
File keystore = getKeystore(username);
@@ -162,7 +156,7 @@ public class FileKeyManager extends IPublicKeyManager {
}
// add new key
- lines.add(data);
+ lines.add(key.getRawData());
// write keystore
String content = Joiner.on("\n").join(lines).trim().concat("\n");
@@ -177,12 +171,12 @@ public class FileKeyManager extends IPublicKeyManager {
}
/**
- * Removes a key from the keystore.
+ * Removes the specified key from the keystore.
*/
@Override
- public boolean removeKey(String username, String data) {
+ public boolean removeKey(String username, SshKey key) {
try {
- String rmKey = stripCommentFromKey(data);
+ String rmKey = stripCommentFromKey(key.getRawData());
File keystore = getKeystore(username);
if (keystore.exists()) {
@@ -244,7 +238,7 @@ public class FileKeyManager extends IPublicKeyManager {
/* Strips the comment from the key data and eliminates whitespace diffs */
protected String stripCommentFromKey(String data) {
- String [] cols = data.split(" ");
+ String [] cols = data.split(" ", 3);
String key = Joiner.on(" ").join(cols[0], cols[1]);
return key;
}