token-import: reset yubikey

This commit is contained in:
Vincent Breitmoser
2017-09-05 03:18:37 +02:00
parent bc3031c9eb
commit e9efc07b74
3 changed files with 52 additions and 2 deletions

View File

@@ -19,12 +19,14 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog.Builder;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -41,11 +43,14 @@ import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
import org.sufficientlysecure.keychain.service.PromoteKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.CreateSecurityTokenImportPresenter.CreateSecurityTokenImportMvpView;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper.AbstractCallback;
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.ui.widget.StatusIndicator;
import org.sufficientlysecure.keychain.ui.widget.StatusIndicator.Status;
import org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator;
@@ -59,6 +64,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
private static final String ARG_USER_ID = "user_ids";
private static final String ARG_URL = "key_uri";
public static final int REQUEST_CODE_OPEN_FILE = 0;
public static final int REQUEST_CODE_RESET = 1;
CreateSecurityTokenImportPresenter presenter;
private ViewGroup statusLayoutGroup;
@@ -232,11 +238,35 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
cryptoPromoteOperationHelper.cryptoOperation();
}
@Override
public void operationResetSecurityToken() {
Intent intent = new Intent(getActivity(), SecurityTokenOperationActivity.class);
RequiredInputParcel resetP = RequiredInputParcel.createSecurityTokenReset();
intent.putExtra(SecurityTokenOperationActivity.EXTRA_REQUIRED_INPUT, resetP);
intent.putExtra(SecurityTokenOperationActivity.EXTRA_CRYPTO_INPUT, CryptoInputParcel.createCryptoInputParcel());
startActivityForResult(intent, REQUEST_CODE_RESET);
}
@Override
public void showFileSelectDialog() {
FileHelper.openDocument(this, null, "*/*", false, REQUEST_CODE_OPEN_FILE);
}
@Override
public void showConfirmResetDialog() {
new Builder(ThemeChanger.getDialogThemeWrapper(getContext()))
.setTitle(R.string.token_reset_confirm_title)
.setMessage(R.string.token_reset_confirm_message)
.setNegativeButton(R.string.button_cancel, null)
.setPositiveButton(R.string.token_reset_confirm_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
presenter.onClickConfirmReset();
}
}).show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
@@ -247,6 +277,12 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
}
break;
}
case REQUEST_CODE_RESET: {
if (resultCode == Activity.RESULT_OK) {
presenter.onSecurityTokenResetSuccess();
}
break;
}
default: {
super.onActivityResult(requestCode, resultCode, data);
}
@@ -270,6 +306,7 @@ public class CreateSecurityTokenImportFragment extends Fragment implements Creat
}
case R.id.button_load_file: {
presenter.onClickLoadFile();
break;
}
case R.id.button_reset_token_1:
case R.id.button_reset_token_2:

View File

@@ -58,7 +58,7 @@ class CreateSecurityTokenImportPresenter {
private Long masterKeyId;
public CreateSecurityTokenImportPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid,
CreateSecurityTokenImportPresenter(Context context, byte[] tokenFingerprints, byte[] tokenAid,
String tokenUserId, String tokenUrl, LoaderManager loaderManager) {
this.context = context.getApplicationContext();
@@ -227,7 +227,15 @@ class CreateSecurityTokenImportPresenter {
view.finishAndShowKey(masterKeyId);
}
public void onClickResetToken() {
void onClickResetToken() {
view.showConfirmResetDialog();
}
void onClickConfirmReset() {
view.operationResetSecurityToken();
}
void onSecurityTokenResetSuccess() {
// TODO
}
@@ -257,9 +265,11 @@ class CreateSecurityTokenImportPresenter {
void operationImportKey(byte[] importKeyData);
void operationPromote(long masterKeyId, byte[] cardAid);
void operationResetSecurityToken();
void finishAndShowKey(long masterKeyId);
void showFileSelectDialog();
void showConfirmResetDialog();
}
}

View File

@@ -1925,5 +1925,8 @@
<string name="status_token_promote">Setting up key…</string>
<string name="status_token_check">Checking key setup…</string>
<string name="status_content_uri">Reading file…</string>
<string name="token_reset_confirm_title">Reset Security Token?</string>
<string name="token_reset_confirm_message">This will irrecoverably delete the key stored on this Security Token. You will no longer be able to use this key for decryption! Are you sure?</string>
<string name="token_reset_confirm_ok">Reset</string>
</resources>