From f242d80c16e93ba0cb45ad4c88b44f0bf4e6aa16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 27 Oct 2016 17:01:22 +0200 Subject: [PATCH] UI for onion keyserver, fix preference upgrade --- .../keychain/Constants.java | 4 +-- .../keyimport/ParcelableHkpKeyserver.java | 6 ++-- .../AddEditKeyserverDialogFragment.java | 12 +++++-- .../keychain/util/Preferences.java | 31 ++++++++++--------- .../main/res/layout/add_keyserver_dialog.xml | 18 +++++++++++ OpenKeychain/src/main/res/values/strings.xml | 1 + 6 files changed, 50 insertions(+), 22 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index bafadec3c..a5ebb1933 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -98,7 +98,7 @@ public final class Constants { public static final String PASSPHRASE_CACHE_SUBS = "passphraseCacheSubs"; public static final String LANGUAGE = "language"; public static final String KEY_SERVERS = "keyServers"; - public static final String PREF_DEFAULT_VERSION = "keyServersDefaultVersion"; + public static final String PREF_VERSION = "keyServersDefaultVersion"; public static final String FIRST_TIME = "firstTime"; public static final String CACHED_CONSOLIDATE = "cachedConsolidate"; public static final String SEARCH_KEYSERVER = "search_keyserver_pref"; @@ -147,7 +147,7 @@ public final class Constants { public static final class Defaults { public static final String KEY_SERVERS = "hkps://hkps.pool.sks-keyservers.net, hkps://pgp.mit.edu"; - public static final int PREF_VERSION = 7; + public static final int PREF_CURRENT_VERSION = 8; } public static final class key { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableHkpKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableHkpKeyserver.java index 9e4f64de2..25e2d0699 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableHkpKeyserver.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableHkpKeyserver.java @@ -155,7 +155,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable { return getURI(mOnion); } - public URI getProxiedURL(ParcelableProxy proxy) throws URISyntaxException { + private URI getProxiedURL(ParcelableProxy proxy) throws URISyntaxException { if (proxy.isTorEnabled()) { return getOnionURI(); } else { @@ -195,7 +195,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable { private String query(String request, @NonNull ParcelableProxy proxy) throws Keyserver.QueryFailedException, HttpError { try { URL url = new URL(getProxiedURL(proxy).toString() + request); - Log.d(Constants.TAG, "hkp keyserver query: " + url + " Proxy: " + proxy); + Log.d(Constants.TAG, "hkp keyserver query: " + url + " Proxy: " + proxy.getProxy()); OkHttpClient client = OkHttpClientFactory.getClientPinnedIfAvailable(url, proxy.getProxy()); Response response = client.newCall(new Request.Builder().url(url).build()).execute(); @@ -347,7 +347,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable { @Override public String get(String keyIdHex, ParcelableProxy proxy) throws Keyserver.QueryFailedException { String request = "/pks/lookup?op=get&options=mr&search=" + keyIdHex; - Log.d(Constants.TAG, "hkp keyserver get: " + request + " using Proxy: " + proxy); + Log.d(Constants.TAG, "hkp keyserver get: " + request + " using Proxy: " + proxy.getProxy()); String data; try { data = query(request, proxy); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java index d01bedf00..8b04c2d78 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java @@ -82,6 +82,8 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On private EditText mKeyserverEditText; private TextInputLayout mKeyserverEditTextLayout; + private EditText mKeyserverEditOnionText; + private TextInputLayout mKeyserverEditOnionTextLayout; private CheckBox mVerifyKeyserverCheckBox; private CheckBox mOnlyTrustedKeyserverCheckBox; @@ -130,6 +132,8 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On mKeyserverEditText = (EditText) view.findViewById(R.id.keyserver_url_edit_text); mKeyserverEditTextLayout = (TextInputLayout) view.findViewById(R.id.keyserver_url_edit_text_layout); + mKeyserverEditOnionText = (EditText) view.findViewById(R.id.keyserver_onion_edit_text); + mKeyserverEditOnionTextLayout = (TextInputLayout) view.findViewById(R.id.keyserver_onion_edit_text_layout); mVerifyKeyserverCheckBox = (CheckBox) view.findViewById(R.id.verify_connection_checkbox); mOnlyTrustedKeyserverCheckBox = (CheckBox) view.findViewById(R.id.only_trusted_keyserver_checkbox); mVerifyKeyserverCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -148,6 +152,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On alert.setTitle(R.string.edit_keyserver_dialog_title); ParcelableHkpKeyserver keyserver = getArguments().getParcelable(ARG_KEYSERVER); mKeyserverEditText.setText(keyserver.getUrl()); + mKeyserverEditOnionText.setText(keyserver.getOnion()); break; } } @@ -225,11 +230,12 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On @Override public void onClick(View v) { mKeyserverEditTextLayout.setErrorEnabled(false); + mKeyserverEditOnionTextLayout.setErrorEnabled(false); // behaviour same for edit and add String keyserverUrl = mKeyserverEditText.getText().toString(); - // TODO! - String keyserverOnion = mKeyserverEditText.getText().toString(); + String keyserverOnion = mKeyserverEditOnionText.getText() == null ? null + : mKeyserverEditOnionText.getText().toString(); final ParcelableHkpKeyserver keyserver = new ParcelableHkpKeyserver(keyserverUrl, keyserverOnion); if (mVerifyKeyserverCheckBox.isChecked()) { final ParcelableProxy proxy = Preferences.getPreferences(getActivity()) @@ -269,7 +275,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On } else { dismiss(); // return unverified keyserver back to activity - keyserverEdited(new ParcelableHkpKeyserver(keyserverUrl, null), false); + keyserverEdited(keyserver, false); } } }); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index 98a571466..a649b17a6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -137,7 +137,6 @@ public class Preferences { ArrayList servers = new ArrayList<>(); String[] entries = rawData.split(","); for (String entry : entries) { - String[] addresses = entry.trim().split(";"); String url = addresses[0]; String onion = addresses.length == 1 ? null : addresses[1]; @@ -452,9 +451,12 @@ public class Preferences { } public void upgradePreferences(Context context) { - if (mSharedPreferences.getInt(Constants.Pref.PREF_DEFAULT_VERSION, 0) != - Constants.Defaults.PREF_VERSION) { - switch (mSharedPreferences.getInt(Constants.Pref.PREF_DEFAULT_VERSION, 0)) { + Log.d(Constants.TAG, "Upgrading preferences…"); + int oldVersion = mSharedPreferences.getInt(Constants.Pref.PREF_VERSION, 0); + boolean requiresUpgrade = oldVersion < Constants.Defaults.PREF_CURRENT_VERSION; + + if (requiresUpgrade) { + switch (oldVersion) { case 1: // fall through case 2: @@ -469,18 +471,21 @@ public class Preferences { continue; } switch (server.getUrl()) { - case "pool.sks-keyservers.net": + case "pool.sks-keyservers.net": { // use HKPS! it.set(new ParcelableHkpKeyserver("hkps://hkps.pool.sks-keyservers.net", null)); break; - case "pgp.mit.edu": + } + case "pgp.mit.edu": { // use HKPS! it.set(new ParcelableHkpKeyserver("hkps://pgp.mit.edu", null)); break; - case "subkeys.pgp.net": + } + case "subkeys.pgp.net": { // remove, because often down and no HKPS! it.remove(); break; + } } } @@ -507,12 +512,10 @@ public class Preferences { if (server == null) { continue; } - switch (server.getUrl()) { - case "hkps://hkps.pool.sks-keyservers.net": - it.set(new ParcelableHkpKeyserver( - "hkps://hkps.pool.sks-keyservers.net", - "hkp://jirk5u4osbsr34t5.onion")); - break; + if ("hkps://hkps.pool.sks-keyservers.net".equals(server.getUrl())) { + it.set(new ParcelableHkpKeyserver( + "hkps://hkps.pool.sks-keyservers.net", + "hkp://jirk5u4osbsr34t5.onion")); } } @@ -522,7 +525,7 @@ public class Preferences { // write new preference version mSharedPreferences.edit() - .putInt(Constants.Pref.PREF_DEFAULT_VERSION, Constants.Defaults.PREF_VERSION) + .putInt(Constants.Pref.PREF_VERSION, Constants.Defaults.PREF_CURRENT_VERSION) .commit(); } } diff --git a/OpenKeychain/src/main/res/layout/add_keyserver_dialog.xml b/OpenKeychain/src/main/res/layout/add_keyserver_dialog.xml index b83681537..feebad47f 100644 --- a/OpenKeychain/src/main/res/layout/add_keyserver_dialog.xml +++ b/OpenKeychain/src/main/res/layout/add_keyserver_dialog.xml @@ -27,6 +27,24 @@ + + + + + + "Test connection" "Only trusted keyserver" "URL" + "Optional Tor .onion URL" "Delete keyserver" "Theme"