From ddcebbd982d81dabf8cb1c89f60f9b876a23b58c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 04 Sep 2014 13:32:44 -0400 Subject: [PATCH] Merged #149 "Repo creation with initial commit fails if user does not have an email address" --- src/main/java/com/gitblit/transport/ssh/SshKey.java | 68 ++++++++++++++++++++++++++++++++- 1 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/SshKey.java b/src/main/java/com/gitblit/transport/ssh/SshKey.java index cb5ee09..ab44854 100644 --- a/src/main/java/com/gitblit/transport/ssh/SshKey.java +++ b/src/main/java/com/gitblit/transport/ssh/SshKey.java @@ -1,13 +1,31 @@ +/* + * Copyright 2014 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ package com.gitblit.transport.ssh; 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; /** @@ -30,13 +48,17 @@ 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() { @@ -50,7 +72,7 @@ try { publicKey = new Buffer(bin).getRawPublicKey(); } catch (SshException e) { - e.printStackTrace(); + throw new RuntimeException(e); } } return publicKey; @@ -76,6 +98,46 @@ 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() { @@ -108,8 +170,8 @@ 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(':'); -- Gitblit v1.9.1