package org.apereo.cas.adaptors.u2f.storage;
import com.google.common.cache.LoadingCache;
import com.yubico.u2f.data.DeviceRegistration;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* This is {@link U2FInMemoryDeviceRepository}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class U2FInMemoryDeviceRepository extends BaseU2FDeviceRepository {
private final LoadingCache<String, Map<String, String>> userStorage;
public U2FInMemoryDeviceRepository(final LoadingCache<String, Map<String, String>> userStorage,
final LoadingCache<String, String> requestStorage) {
super(requestStorage);
this.userStorage = userStorage;
}
@Override
public List<DeviceRegistration> getRegisteredDevices(final String username) {
final List<DeviceRegistration> registrations = userStorage.getUnchecked(username).values()
.stream().map(DeviceRegistration::fromJson).collect(Collectors.toList());
return registrations;
}
@Override
public void registerDevice(final String username, final DeviceRegistration registration) {
userStorage.getUnchecked(username).put(registration.getKeyHandle(), registration.toJson());
}
@Override
public void authenticateDevice(final String username, final DeviceRegistration registration) {
userStorage.getUnchecked(username).put(registration.getKeyHandle(), registration.toJson());
}
@Override
public boolean isDeviceRegisteredFor(final String username) {
return !userStorage.getUnchecked(username).values().isEmpty();
}
}