Mercury-IM/domain/src/main/java/org/mercury_im/messenger/core/crypto/ikey/IkeyStoreAdapter.java

72 lines
2.5 KiB
Java
Raw Normal View History

2020-10-11 11:44:47 +02:00
package org.mercury_im.messenger.core.crypto.ikey;
import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.jivesoftware.smackx.ikey.element.IkeyElement;
import org.jivesoftware.smackx.ikey.record.IkeyStore;
import org.jivesoftware.smackx.ox.OpenPgpSecretKeyBackupPassphrase;
import org.jxmpp.jid.EntityBareJid;
import org.mercury_im.messenger.core.SchedulersFacade;
2020-10-24 19:25:28 +02:00
import org.mercury_im.messenger.core.util.Optional;
2020-10-11 11:44:47 +02:00
import java.io.IOException;
import java.util.UUID;
/**
2020-10-24 19:25:28 +02:00
* Adapter that serves as a {@link IkeyStore} implementation wrapping a {@link IkeyRepository}.
2020-10-11 11:44:47 +02:00
*/
2020-10-24 19:25:28 +02:00
public class IkeyStoreAdapter implements IkeyStore {
2020-10-11 11:44:47 +02:00
private final UUID accountId;
private final IkeyRepository repository;
private final SchedulersFacade schedulers;
public IkeyStoreAdapter(UUID accountId, IkeyRepository repository, SchedulersFacade schedulers) {
this.accountId = accountId;
this.repository = repository;
this.schedulers = schedulers;
}
@Override
public IkeyElement loadIkeyRecord(EntityBareJid jid) throws IOException {
return repository.loadRecord(accountId, jid)
2020-10-24 19:25:28 +02:00
.compose(schedulers.executeUiSafeObservable())
.firstElement()
2020-10-11 11:44:47 +02:00
.blockingGet();
}
@Override
public void storeIkeyRecord(EntityBareJid jid, IkeyElement record) throws IOException {
repository.storeRecord(accountId, jid, record)
.compose(schedulers.executeUiSafeCompletable())
.subscribe();
}
@Override
public PGPSecretKeyRing loadSecretKey() {
return repository.loadSecretKey(accountId)
2020-10-24 19:25:28 +02:00
.compose(schedulers.executeUiSafeObservable())
.firstElement()
.blockingGet()
.getItem();
2020-10-11 11:44:47 +02:00
}
@Override
public void storeSecretKey(PGPSecretKeyRing secretKey) {
2020-11-19 23:36:49 +01:00
repository.storeSecretKey(accountId, secretKey).blockingAwait();
2020-10-11 11:44:47 +02:00
}
@Override
public OpenPgpSecretKeyBackupPassphrase loadBackupPassphrase() {
2020-10-24 19:25:28 +02:00
Optional<OpenPgpSecretKeyBackupPassphrase> passphrase = repository.loadBackupPassphrase(accountId)
2020-10-11 11:44:47 +02:00
.compose(schedulers.executeUiSafeSingle())
.blockingGet();
2020-10-24 19:25:28 +02:00
return passphrase.isPresent() ? passphrase.getItem() : null;
2020-10-11 11:44:47 +02:00
}
@Override
public void storeBackupPassphrase(OpenPgpSecretKeyBackupPassphrase passphrase) {
repository.storeBackupPassphrase(accountId, passphrase)
2020-11-19 23:36:49 +01:00
.blockingAwait();
2020-10-11 11:44:47 +02:00
}
}