Special features: clear KeyStore from the settings
This commit is contained in:
parent
a1a6619835
commit
d32f0ab4c0
5 changed files with 67 additions and 1 deletions
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
package org.shadowice.flocke.andotp.Activities;
|
package org.shadowice.flocke.andotp.Activities;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -117,6 +119,13 @@ public class SettingsActivity extends BaseActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void generateNewEncryptionKey() {
|
||||||
|
if (settings.getEncryption() == EncryptionType.KEYSTORE) {
|
||||||
|
encryptionKey = KeyStoreHelper.loadEncryptionKeyFromKeyStore(this, false);
|
||||||
|
encryptionChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void tryEncryptionChangeWithAuth(EncryptionType newEnc) {
|
private void tryEncryptionChangeWithAuth(EncryptionType newEnc) {
|
||||||
Intent authIntent = new Intent(this, AuthenticateActivity.class);
|
Intent authIntent = new Intent(this, AuthenticateActivity.class);
|
||||||
authIntent.putExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION, newEnc.name());
|
authIntent.putExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION, newEnc.name());
|
||||||
|
@ -271,6 +280,40 @@ public class SettingsActivity extends BaseActivity
|
||||||
if (sharedPref.contains(getString(R.string.settings_key_special_features)) &&
|
if (sharedPref.contains(getString(R.string.settings_key_special_features)) &&
|
||||||
sharedPref.getBoolean(getString(R.string.settings_key_special_features), false)) {
|
sharedPref.getBoolean(getString(R.string.settings_key_special_features), false)) {
|
||||||
addPreferencesFromResource(R.xml.preferences_special);
|
addPreferencesFromResource(R.xml.preferences_special);
|
||||||
|
|
||||||
|
Preference clearKeyStore = findPreference(getString(R.string.settings_key_clear_keystore));
|
||||||
|
clearKeyStore.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
|
||||||
|
builder.setTitle(R.string.settings_dialog_title_clear_keystore);
|
||||||
|
if (settings.getEncryption() == EncryptionType.PASSWORD)
|
||||||
|
builder.setMessage(R.string.settings_dialog_msg_clear_keystore_password);
|
||||||
|
else if (settings.getEncryption() == EncryptionType.KEYSTORE)
|
||||||
|
builder.setMessage(R.string.settings_dialog_msg_clear_keystore_keystore);
|
||||||
|
|
||||||
|
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
|
KeyStoreHelper.wipeKeys(getActivity());
|
||||||
|
if (settings.getEncryption() == EncryptionType.KEYSTORE) {
|
||||||
|
DatabaseHelper.wipeDatabase(getActivity());
|
||||||
|
((SettingsActivity) getActivity()).generateNewEncryptionKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialogInterface, int i) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.create().show();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,9 @@ public class DatabaseHelper {
|
||||||
|
|
||||||
public static void wipeDatabase(Context context) {
|
public static void wipeDatabase(Context context) {
|
||||||
File db = new File(context.getFilesDir() + "/" + Constants.FILENAME_DATABASE);
|
File db = new File(context.getFilesDir() + "/" + Constants.FILENAME_DATABASE);
|
||||||
|
File dbBackup = new File(context.getFilesDir() + "/" + Constants.FILENAME_DATABASE_BACKUP);
|
||||||
db.delete();
|
db.delete();
|
||||||
|
dbBackup.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void copyFile(File src, File dst)
|
private static void copyFile(File src, File dst)
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
<string name="settings_key_tags_toggles" translatable="false">pref_tags_toggles</string>
|
<string name="settings_key_tags_toggles" translatable="false">pref_tags_toggles</string>
|
||||||
|
|
||||||
<string name="settings_key_enable_screenshot" translatable="false">pref_enable_screenshot</string>
|
<string name="settings_key_enable_screenshot" translatable="false">pref_enable_screenshot</string>
|
||||||
|
<string name="settings_key_clear_keystore" translatable="false">pref_clear_keystore</string>
|
||||||
|
|
||||||
<string name="settings_key_last_used_dialog_shown" translatable="false">pref_last_used_dialog_shown</string>
|
<string name="settings_key_last_used_dialog_shown" translatable="false">pref_last_used_dialog_shown</string>
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
<string name="settings_title_special_features">Enable special features</string>
|
<string name="settings_title_special_features">Enable special features</string>
|
||||||
<string name="settings_title_enable_screenshot">Enable screenshots</string>
|
<string name="settings_title_enable_screenshot">Enable screenshots</string>
|
||||||
|
<string name="settings_title_clear_keystore">Clear KeyStore</string>
|
||||||
|
|
||||||
<!-- Descriptions -->
|
<!-- Descriptions -->
|
||||||
<string name="settings_desc_tap_to_reveal">Hide the OTP tokens by default, requiring them to be
|
<string name="settings_desc_tap_to_reveal">Hide the OTP tokens by default, requiring them to be
|
||||||
|
@ -55,9 +56,10 @@
|
||||||
<string name="settings_desc_openpgp_verify">Encrypted backups are only imported if they are
|
<string name="settings_desc_openpgp_verify">Encrypted backups are only imported if they are
|
||||||
signed with a valid key</string>
|
signed with a valid key</string>
|
||||||
|
|
||||||
|
<string name="settings_desc_special_features">Uncheck to disable the special features again</string>
|
||||||
<string name="settings_desc_enable_screenshot">Allow to take screenshots of the main screen
|
<string name="settings_desc_enable_screenshot">Allow to take screenshots of the main screen
|
||||||
(disabled by default for security reasons)</string>
|
(disabled by default for security reasons)</string>
|
||||||
<string name="settings_desc_special_features">Uncheck to disable the special features again</string>
|
<string name="settings_desc_clear_keystore">Delete the encryption key from the KeyStore</string>
|
||||||
|
|
||||||
<!-- Toasts -->
|
<!-- Toasts -->
|
||||||
<string name="settings_toast_auth_device_pre_lollipop">This feature requires at least Android 5.0
|
<string name="settings_toast_auth_device_pre_lollipop">This feature requires at least Android 5.0
|
||||||
|
@ -89,6 +91,19 @@
|
||||||
<string name="settings_toast_auth_upgrade_failed">Failed to silently upgrade your password / PIN
|
<string name="settings_toast_auth_upgrade_failed">Failed to silently upgrade your password / PIN
|
||||||
to the new encryption, please manually reset it in the settings!</string>
|
to the new encryption, please manually reset it in the settings!</string>
|
||||||
|
|
||||||
|
<string name="settings_dialog_title_clear_keystore">Clear the KeyStore?</string>
|
||||||
|
|
||||||
|
<string name="settings_dialog_msg_clear_keystore_password">In some cases clearing the KeyStore
|
||||||
|
can help resolve problems. You should only proceed if you know what you are doing!\n\nSince
|
||||||
|
the <b>Database encryption</b> is set to <b>Password / PIN</b> you shouldn\'t lose any data
|
||||||
|
doing this (but it never hurts to have a backup anyways).\n\n<b>Are you really sure you want
|
||||||
|
to clear the KeyStore?</b></string>
|
||||||
|
<string name="settings_dialog_msg_clear_keystore_keystore">In some cases clearing the KeyStore
|
||||||
|
can help resolve problems. You should only proceed if you know what you are doing!\n\n<b>Warning</b>:
|
||||||
|
Since the <b>Database encryption</b> is set to <b>Android KeyStore</b> you will lose all
|
||||||
|
your accounts. Make sure you have a backup!\n\n<b>Are you really sure you want to clear the
|
||||||
|
KeyStore?</b></string>
|
||||||
|
|
||||||
<!-- List entries -->
|
<!-- List entries -->
|
||||||
<string-array name="settings_entries_auth">
|
<string-array name="settings_entries_auth">
|
||||||
<item>None</item>
|
<item>None</item>
|
||||||
|
|
|
@ -17,6 +17,11 @@
|
||||||
android:summary="@string/settings_desc_enable_screenshot"
|
android:summary="@string/settings_desc_enable_screenshot"
|
||||||
android:defaultValue="false" />
|
android:defaultValue="false" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="@string/settings_key_clear_keystore"
|
||||||
|
android:title="@string/settings_title_clear_keystore"
|
||||||
|
android:summary="@string/settings_desc_clear_keystore" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
Loading…
Reference in a new issue