Mercury-IM/app/src/main/java/org/mercury_im/messenger/android/ui/account/login/AndroidIkeySetupViewModel.java

86 lines
2.9 KiB
Java

package org.mercury_im.messenger.android.ui.account.login;
import android.app.Application;
import android.graphics.Path;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import org.bouncycastle.openpgp.PGPException;
import org.jivesoftware.smackx.ox.OpenPgpSecretKeyBackupPassphrase;
import org.jivesoftware.smackx.ox.element.SecretkeyElement;
import org.jivesoftware.smackx.ox.exception.InvalidBackupCodeException;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.android.ui.MercuryAndroidViewModel;
import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.core.viewmodel.ikey.IkeySetupViewModel;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.util.UUID;
import javax.inject.Inject;
import io.reactivex.Single;
public class AndroidIkeySetupViewModel extends AndroidViewModel implements MercuryAndroidViewModel<IkeySetupViewModel> {
@Inject
IkeySetupViewModel commonViewModel;
private MutableLiveData<Optional<String>> passphraseError = new MutableLiveData<>();
public AndroidIkeySetupViewModel(@NonNull Application application) {
super(application);
MercuryImApplication.getApplication().getAppComponent().inject(this);
}
public void init(UUID accountId) {
getCommonViewModel().init(accountId);
}
public Single<Optional<SecretkeyElement>> fetchBackupElement() {
return getCommonViewModel().fetchBackupElement();
}
@Override
public IkeySetupViewModel getCommonViewModel() {
return commonViewModel;
}
public void generateIdentityKey() throws PGPException, NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
getCommonViewModel().generateIdentityKey();
}
public boolean restoreBackup(String backupCode) {
OpenPgpSecretKeyBackupPassphrase passphrase;
try {
passphrase = new OpenPgpSecretKeyBackupPassphrase(backupCode);
} catch (IllegalArgumentException e) {
passphraseError.setValue(new Optional<>("Malformed Passphrase"));
return false;
}
try {
getCommonViewModel().restoreBackup(passphrase);
passphraseError.setValue(new Optional<>());
return true;
} catch (InvalidBackupCodeException e) {
passphraseError.setValue(new Optional<>("Wrong Passphrase"));
} catch (IOException | PGPException e) {
passphraseError.setValue(new Optional<>("Error: " + e.getMessage()));
}
return false;
}
public LiveData<Optional<String>> getPassphraseError() {
return passphraseError;
}
}