From f11592770694e9d0a391a31fa23f455bc05756c1 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 31 Oct 2014 09:22:01 -0400
Subject: [PATCH] Merged #212 "Gracefully handle missing integration branch in ticket page"

---
 src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java |   51 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java b/src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java
index 26bd021..bf78378 100644
--- a/src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java
+++ b/src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java
@@ -15,11 +15,12 @@
  */
 package com.gitblit.transport.ssh;
 
-import java.security.PublicKey;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
+import com.google.inject.Inject;
 
 /**
  * Memory public key manager.
@@ -29,10 +30,11 @@
  */
 public class MemoryKeyManager extends IPublicKeyManager {
 
-	Map<String, List<PublicKey>> keys;
+	final Map<String, List<SshKey>> keys;
 
+	@Inject
 	public MemoryKeyManager() {
-		keys = new HashMap<String, List<PublicKey>>();
+		keys = new HashMap<String, List<SshKey>>();
 	}
 
 	@Override
@@ -58,11 +60,12 @@
 
 	@Override
 	protected boolean isStale(String username) {
-		return false;
+		// always return true so we gets keys from our hashmap
+		return true;
 	}
 
 	@Override
-	protected List<PublicKey> getKeysImpl(String username) {
+	protected List<SshKey> getKeysImpl(String username) {
 		String id = username.toLowerCase();
 		if (keys.containsKey(id)) {
 			return keys.get(id);
@@ -71,28 +74,40 @@
 	}
 
 	@Override
-	public boolean addKey(String username, String data) {
-		return false;
+	public boolean addKey(String username, SshKey key) {
+		String id = username.toLowerCase();
+		if (!keys.containsKey(id)) {
+			keys.put(id, new ArrayList<SshKey>());
+		}
+		log.info("added {} key {}", username, key.getFingerprint());
+		return keys.get(id).add(key);
 	}
 
 	@Override
-	public boolean removeKey(String username, String data) {
-		return false;
+	public boolean removeKey(String username, SshKey key) {
+		String id = username.toLowerCase();
+		if (!keys.containsKey(id)) {
+			log.info("can't remove keys for {}", username);
+			return false;
+		}
+		List<SshKey> list = keys.get(id);
+		boolean success = list.remove(key);
+		if (success) {
+			log.info("removed {} key {}", username, key.getFingerprint());
+		}
+
+		if (list.isEmpty()) {
+			keys.remove(id);
+			log.info("no {} keys left, removed {}", username, username);
+		}
+		return success;
 	}
 
 	@Override
 	public boolean removeAllKeys(String username) {
 		String id = username.toLowerCase();
 		keys.remove(id.toLowerCase());
+		log.info("removed all keys for {}", username);
 		return true;
-	}
-
-	/* Test method for populating the memory key manager */
-	public void addKey(String username, PublicKey key) {
-		String id = username.toLowerCase();
-		if (!keys.containsKey(id)) {
-			keys.put(id, new ArrayList<PublicKey>());
-		}
-		keys.get(id).add(key);
 	}
 }

--
Gitblit v1.9.1