diff options
author | James Moger <james.moger@gitblit.com> | 2014-03-22 10:38:06 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 18:58:09 -0400 |
commit | bcc8a015ae552726742b4f437b2cb9e809270f96 (patch) | |
tree | 0ed21e1ca312121df8a4db01cb2c6bf0d125815f /src/main/java/com/gitblit/transport/ssh/FileKeyManager.java | |
parent | 5bed299423d4ba418c64732c51e567817a7f7e45 (diff) | |
download | gitblit-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.java | 28 |
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; } |