communicate override state via api
This commit is contained in:
parent
11f10cf85f
commit
3910c248cc
|
@ -21,6 +21,20 @@ public class DecryptVerifySecurityProblem implements Serializable {
|
|||
signatureSecurityProblem = builder.signatureSecurityProblem;
|
||||
}
|
||||
|
||||
public SecurityProblem getPrioritySecurityProblem() {
|
||||
if (encryptionKeySecurityProblem != null) {
|
||||
return encryptionKeySecurityProblem;
|
||||
} else if (signingKeySecurityProblem != null) {
|
||||
return signingKeySecurityProblem;
|
||||
} else if (symmetricSecurityProblem != null) {
|
||||
return symmetricSecurityProblem;
|
||||
} else if (signatureSecurityProblem != null) {
|
||||
return signatureSecurityProblem;
|
||||
} else {
|
||||
throw new IllegalStateException("No security problem?");
|
||||
}
|
||||
}
|
||||
|
||||
static class DecryptVerifySecurityProblemBuilder {
|
||||
private KeySecurityProblem encryptionKeySecurityProblem;
|
||||
private KeySecurityProblem signingKeySecurityProblem;
|
||||
|
|
|
@ -143,10 +143,12 @@ public class ApiPendingIntentFactory {
|
|||
return createInternal(data, intent);
|
||||
}
|
||||
|
||||
PendingIntent createSecurityProblemIntent(String packageName, DecryptVerifySecurityProblem securityProblem) {
|
||||
PendingIntent createSecurityProblemIntent(String packageName, DecryptVerifySecurityProblem securityProblem,
|
||||
boolean supportOverride) {
|
||||
Intent intent = new Intent(mContext, RemoteSecurityProblemDialogActivity.class);
|
||||
intent.putExtra(RemoteSecurityProblemDialogActivity.EXTRA_PACKAGE_NAME, packageName);
|
||||
intent.putExtra(RemoteSecurityProblemDialogActivity.EXTRA_SECURITY_PROBLEM, securityProblem);
|
||||
intent.putExtra(RemoteSecurityProblemDialogActivity.EXTRA_SUPPORT_OVERRIDE, supportOverride);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
//noinspection ResourceType, looks like lint is missing FLAG_IMMUTABLE
|
||||
|
|
|
@ -61,11 +61,13 @@ import org.sufficientlysecure.keychain.pgp.PgpSignEncryptData;
|
|||
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptInputParcel;
|
||||
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation;
|
||||
import org.sufficientlysecure.keychain.pgp.Progressable;
|
||||
import org.sufficientlysecure.keychain.pgp.SecurityProblem;
|
||||
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
|
||||
import org.sufficientlysecure.keychain.provider.KeyRepository;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||
import org.sufficientlysecure.keychain.provider.OverriddenWarningsRepository;
|
||||
import org.sufficientlysecure.keychain.remote.OpenPgpServiceKeyIdExtractor.KeyIdResult;
|
||||
import org.sufficientlysecure.keychain.remote.OpenPgpServiceKeyIdExtractor.KeyIdResultStatus;
|
||||
import org.sufficientlysecure.keychain.service.BackupKeyringParcel;
|
||||
|
@ -401,7 +403,7 @@ public class OpenPgpService extends Service {
|
|||
processDecryptionResultForResultIntent(targetApiVersion, result, pgpResult.getDecryptionResult());
|
||||
processMetadataForResultIntent(result, pgpResult.getDecryptionMetadata());
|
||||
processSignatureResultForResultIntent(targetApiVersion, data, result, pgpResult);
|
||||
processSecurityProblemsPendingIntent(result, pgpResult);
|
||||
processSecurityProblemsPendingIntent(data, result, pgpResult);
|
||||
|
||||
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
|
||||
return result;
|
||||
|
@ -429,15 +431,27 @@ public class OpenPgpService extends Service {
|
|||
}
|
||||
}
|
||||
|
||||
private void processSecurityProblemsPendingIntent(Intent result, DecryptVerifyResult decryptVerifyResult) {
|
||||
private void processSecurityProblemsPendingIntent(Intent data, Intent result,
|
||||
DecryptVerifyResult decryptVerifyResult) {
|
||||
DecryptVerifySecurityProblem securityProblem = decryptVerifyResult.getSecurityProblem();
|
||||
if (securityProblem == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean supportOverride = data.getBooleanExtra(OpenPgpApi.EXTRA_SUPPORT_OVERRIDE_CRYPTO_WARNING, false);
|
||||
if (supportOverride) {
|
||||
SecurityProblem prioritySecurityProblem = securityProblem.getPrioritySecurityProblem();
|
||||
if (prioritySecurityProblem.isIdentifiable()) {
|
||||
String identifier = prioritySecurityProblem.getIdentifier();
|
||||
boolean isOverridden = OverriddenWarningsRepository.createOverriddenWarningsRepository(this)
|
||||
.isWarningOverridden(identifier);
|
||||
result.putExtra(OpenPgpApi.RESULT_OVERRIDE_CRYPTO_WARNING, isOverridden);
|
||||
}
|
||||
}
|
||||
|
||||
String packageName = mApiPermissionHelper.getCurrentCallingPackage();
|
||||
result.putExtra(OpenPgpApi.RESULT_INSECURE_DETAIL_INTENT,
|
||||
mApiPendingIntentFactory.createSecurityProblemIntent(packageName, securityProblem));
|
||||
mApiPendingIntentFactory.createSecurityProblemIntent(packageName, securityProblem, supportOverride));
|
||||
}
|
||||
|
||||
private void processDecryptionResultForResultIntent(int targetApiVersion, Intent result,
|
||||
|
|
|
@ -52,6 +52,7 @@ import org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator;
|
|||
public class RemoteSecurityProblemDialogActivity extends FragmentActivity {
|
||||
public static final String EXTRA_PACKAGE_NAME = "package_name";
|
||||
public static final String EXTRA_SECURITY_PROBLEM = "security_problem";
|
||||
public static final String EXTRA_SUPPORT_OVERRIDE = "support_override";
|
||||
|
||||
|
||||
private SecurityProblemPresenter presenter;
|
||||
|
@ -76,8 +77,9 @@ public class RemoteSecurityProblemDialogActivity extends FragmentActivity {
|
|||
Intent intent = getIntent();
|
||||
String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
|
||||
Serializable keySecurityProblem = intent.getSerializableExtra(EXTRA_SECURITY_PROBLEM);
|
||||
boolean supportOverride = intent.getBooleanExtra(EXTRA_SUPPORT_OVERRIDE, false);
|
||||
|
||||
presenter.setupFromIntentData(packageName, keySecurityProblem);
|
||||
presenter.setupFromIntentData(packageName, keySecurityProblem, supportOverride);
|
||||
}
|
||||
|
||||
public static class RemoteRegisterDialogFragment extends DialogFragment {
|
||||
|
|
|
@ -40,6 +40,7 @@ class SecurityProblemPresenter {
|
|||
|
||||
private String packageName;
|
||||
private Serializable securityProblem;
|
||||
private boolean supportOverride;
|
||||
|
||||
|
||||
SecurityProblemPresenter(Context context) {
|
||||
|
@ -52,9 +53,10 @@ class SecurityProblemPresenter {
|
|||
this.view = view;
|
||||
}
|
||||
|
||||
void setupFromIntentData(String packageName, Serializable securityProblem) {
|
||||
void setupFromIntentData(String packageName, Serializable securityProblem, boolean supportOverride) {
|
||||
this.packageName = packageName;
|
||||
this.securityProblem = securityProblem;
|
||||
this.supportOverride = supportOverride;
|
||||
|
||||
refreshSecurityProblemDisplay();
|
||||
refreshPackageInfo();
|
||||
|
@ -141,10 +143,12 @@ class SecurityProblemPresenter {
|
|||
}
|
||||
|
||||
private void refreshOverrideStatusView() {
|
||||
if (overriddenWarningsRepository.isWarningOverridden(securityProblemIdentifier)) {
|
||||
view.showOverrideUndoButton();
|
||||
} else {
|
||||
view.showOverrideButton();
|
||||
if (supportOverride) {
|
||||
if (overriddenWarningsRepository.isWarningOverridden(securityProblemIdentifier)) {
|
||||
view.showOverrideUndoButton();
|
||||
} else {
|
||||
view.showOverrideButton();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
2
extern/openpgp-api-lib
vendored
2
extern/openpgp-api-lib
vendored
|
@ -1 +1 @@
|
|||
Subproject commit d19cfacdeed6b4e9a9aed5ecae978b6c9268dd05
|
||||
Subproject commit 395fe837a23fc33c7a4abbb0625cb584c5dbb176
|
Loading…
Reference in a new issue