James Moger
2014-04-11 436bd3f0ecdee282c503a9eb0f7a240b7a68ff49
src/main/java/com/gitblit/transport/ssh/MemoryKeyManager.java
New file
@@ -0,0 +1,110 @@
/*
 * 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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Memory public key manager.
 *
 * @author James Moger
 *
 */
public class MemoryKeyManager extends IPublicKeyManager {
   final Map<String, List<SshKey>> keys;
   public MemoryKeyManager() {
      keys = new HashMap<String, List<SshKey>>();
   }
   @Override
   public String toString() {
      return getClass().getSimpleName();
   }
   @Override
   public MemoryKeyManager start() {
      log.info(toString());
      return this;
   }
   @Override
   public boolean isReady() {
      return true;
   }
   @Override
   public MemoryKeyManager stop() {
      return this;
   }
   @Override
   protected boolean isStale(String username) {
      // always return true so we gets keys from our hashmap
      return true;
   }
   @Override
   protected List<SshKey> getKeysImpl(String username) {
      String id = username.toLowerCase();
      if (keys.containsKey(id)) {
         return keys.get(id);
      }
      return null;
   }
   @Override
   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, 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;
   }
}