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