From c5dfd60d174a9841e64e4097cecab5aea5c422d0 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 12 Apr 2014 12:26:17 -0400 Subject: [PATCH] Documentation --- src/main/java/com/gitblit/transport/ssh/SshKey.java | 100 +++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 78 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/SshKey.java b/src/main/java/com/gitblit/transport/ssh/SshKey.java index cac6c41..6a20d7d 100644 --- a/src/main/java/com/gitblit/transport/ssh/SshKey.java +++ b/src/main/java/com/gitblit/transport/ssh/SshKey.java @@ -2,12 +2,15 @@ import java.io.Serializable; import java.security.PublicKey; +import java.util.Arrays; +import java.util.List; import org.apache.commons.codec.binary.Base64; import org.apache.sshd.common.SshException; import org.apache.sshd.common.util.Buffer; import org.eclipse.jgit.lib.Constants; +import com.gitblit.Constants.AccessPermission; import com.gitblit.utils.StringUtils; /** @@ -28,13 +31,19 @@ private String fingerprint; + private String toString; + + private AccessPermission permission; + public SshKey(String data) { this.rawData = data; + this.permission = AccessPermission.PUSH; } public SshKey(PublicKey key) { this.publicKey = key; this.comment = ""; + this.permission = AccessPermission.PUSH; } public PublicKey getPublicKey() { @@ -71,6 +80,49 @@ public void setComment(String comment) { this.comment = comment; + if (rawData != null) { + rawData = null; + } + } + + /** + * Returns true if this key may be used to clone or fetch. + * + * @return true if this key can be used to clone or fetch + */ + public boolean canClone() { + return permission.atLeast(AccessPermission.CLONE); + } + + /** + * Returns true if this key may be used to push changes. + * + * @return true if this key can be used to push changes + */ + public boolean canPush() { + return permission.atLeast(AccessPermission.PUSH); + } + + /** + * Returns the access permission for the key. + * + * @return the access permission for the key + */ + public AccessPermission getPermission() { + return permission; + } + + /** + * Control the access permission assigned to this key. + * + * @param value + */ + public void setPermission(AccessPermission value) throws IllegalArgumentException { + List<AccessPermission> permitted = Arrays.asList(AccessPermission.SSHPERMISSIONS); + if (!permitted.contains(value)) { + throw new IllegalArgumentException("Illegal SSH public key permission specified: " + value); + } + this.permission = value; } public String getRawData() { @@ -96,12 +148,6 @@ public String getFingerprint() { if (fingerprint == null) { StringBuilder sb = new StringBuilder(); - // TODO append the keysize - int keySize = 0; - if (keySize > 0) { - sb.append(keySize).append(' '); - } - // append the key hash as colon-separated pairs String hash; if (rawData != null) { @@ -109,26 +155,13 @@ final byte [] bin = Base64.decodeBase64(Constants.encodeASCII(parts[1])); hash = StringUtils.getMD5(bin); } else { - // TODO get hash from publickey - hash = "todo"; + // TODO calculate the correct hash from a PublicKey instance + hash = StringUtils.getMD5(getPublicKey().getEncoded()); } for (int i = 0; i < hash.length(); i += 2) { sb.append(hash.charAt(i)).append(hash.charAt(i + 1)).append(':'); } sb.setLength(sb.length() - 1); - - // append the comment - String c = getComment(); - if (!StringUtils.isEmpty(c)) { - sb.append(' '); - sb.append(c); - } - - // append the algorithm - String alg = getAlgorithm(); - if (!StringUtils.isEmpty(alg)) { - sb.append(" (").append(alg).append(")"); - } fingerprint = sb.toString(); } return fingerprint; @@ -151,6 +184,29 @@ @Override public String toString() { - return getFingerprint(); + if (toString == null) { + StringBuilder sb = new StringBuilder(); + // TODO append the keysize + int keySize = 0; + if (keySize > 0) { + sb.append(keySize).append(' '); + } + // append fingerprint + sb.append(' '); + sb.append(getFingerprint()); + // append the comment + String c = getComment(); + if (!StringUtils.isEmpty(c)) { + sb.append(' '); + sb.append(c); + } + // append algorithm + String alg = getAlgorithm(); + if (!StringUtils.isEmpty(alg)) { + sb.append(" (").append(alg).append(")"); + } + toString = sb.toString(); + } + return toString; } } -- Gitblit v1.9.1