Paul Martin
2016-04-30 a502d96a860456ec5e8c96761db70f7cabb74751
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);
   }
}