package com.hubspot.baragon.data;
import java.util.Map;
import org.apache.curator.framework.CuratorFramework;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Optional;
import com.google.common.collect.Maps;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.baragon.config.ZooKeeperConfiguration;
import com.hubspot.baragon.models.BaragonAuthKey;
@Singleton
public class BaragonAuthDatastore extends AbstractDataStore {
public static final String AUTH_KEYS_PATH = "/auth";
public static final String AUTH_KEY_PATH = AUTH_KEYS_PATH + "/%s";
@Inject
public BaragonAuthDatastore(CuratorFramework curatorFramework, ObjectMapper objectMapper, ZooKeeperConfiguration zooKeeperConfiguration) {
super(curatorFramework, objectMapper, zooKeeperConfiguration);
}
public void addAuthKey(BaragonAuthKey authKey) {
writeToZk(String.format(AUTH_KEY_PATH, authKey.getValue()), authKey);
}
public Optional<BaragonAuthKey> expireAuthKey(String key) {
final String path = String.format(AUTH_KEY_PATH, key);
final Optional<BaragonAuthKey> maybeAuthKey = readFromZk(path, BaragonAuthKey.class);
if (!maybeAuthKey.isPresent()) {
return maybeAuthKey;
}
final BaragonAuthKey expiredAuthKey = BaragonAuthKey.expire(maybeAuthKey.get());
writeToZk(path, expiredAuthKey);
return Optional.of(expiredAuthKey);
}
public Map<String, BaragonAuthKey> getAuthKeyMap() {
Map<String, BaragonAuthKey> keyMap = Maps.newHashMap();
for (String node : getChildren(AUTH_KEYS_PATH)) {
final Optional<BaragonAuthKey> maybeAuthKey = readFromZk(String.format(AUTH_KEY_PATH, node), BaragonAuthKey.class);
if (maybeAuthKey.isPresent()) {
keyMap.put(maybeAuthKey.get().getValue(), maybeAuthKey.get());
}
}
return keyMap;
}
public Optional<BaragonAuthKey> getAuthKeyInfo(String key) {
return readFromZk(String.format(AUTH_KEY_PATH, key), BaragonAuthKey.class);
}
}