62 lines
2.6 KiB
Java
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();
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
}
|