Mercury-IM/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/ikey/IkeyInitializationViewModel...

62 lines
2.6 KiB
Java

package org.mercury_im.messenger.core.viewmodel.ikey;
import org.bouncycastle.openpgp.PGPException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.ikey.IkeyManager;
import org.jivesoftware.smackx.ox.element.SecretkeyElement;
import org.jivesoftware.smackx.pubsub.PubSubException;
import org.mercury_im.messenger.core.connection.MercuryConnection;
import org.mercury_im.messenger.core.connection.MercuryConnectionManager;
import org.mercury_im.messenger.core.crypto.ikey.IkeyInitializer;
import org.mercury_im.messenger.core.viewmodel.MercuryViewModel;
import org.mercury_im.messenger.entity.Account;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
public class IkeyInitializationViewModel implements MercuryViewModel {
private final MercuryConnectionManager connectionManager;
private final IkeyInitializer ikeyInitializer;
public IkeyInitializationViewModel(MercuryConnectionManager connectionManager,
IkeyInitializer ikeyInitializer) {
this.connectionManager = connectionManager;
this.ikeyInitializer = ikeyInitializer;
}
public void initialize(Account account) throws PGPException, NoSuchAlgorithmException,
NoSuchProviderException, InvalidAlgorithmParameterException, InterruptedException,
SmackException.NoResponseException, SmackException.NotConnectedException,
SmackException.FeatureNotSupportedException, XMPPException.XMPPErrorException,
PubSubException.NotALeafNodeException, IOException {
MercuryConnection connection = connectionManager.getConnection(account);
IkeyManager ikeyManager = ikeyInitializer.initFor(connection);
final SecretkeyElement backup = ikeyManager.fetchSecretIdentityKey();
if (!ikeyManager.hasLocalKey()) {
if (backup == null) {
ikeyManager.generateIdentityKey();
ikeyManager.depositIdentityKeyBackup();
} else {
//ikeyManager.restore(backup);
}
} else {
if (backup == null) {
ikeyManager.depositIdentityKeyBackup();
} else {
//if (!ikeyManager.keyBackupIsSameAsLocal()) {
// displayNewKeyNotification();
//} else {
// ikeyManager.depositIdentityKeyBackup();
// }
}
}
}
}