UI for onion keyserver, fix preference upgrade

This commit is contained in:
Dominik Schürmann
2016-10-27 17:01:22 +02:00
parent 911fa020c2
commit f242d80c16
6 changed files with 50 additions and 22 deletions

View File

@@ -98,7 +98,7 @@ public final class Constants {
public static final String PASSPHRASE_CACHE_SUBS = "passphraseCacheSubs"; public static final String PASSPHRASE_CACHE_SUBS = "passphraseCacheSubs";
public static final String LANGUAGE = "language"; public static final String LANGUAGE = "language";
public static final String KEY_SERVERS = "keyServers"; 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 FIRST_TIME = "firstTime";
public static final String CACHED_CONSOLIDATE = "cachedConsolidate"; public static final String CACHED_CONSOLIDATE = "cachedConsolidate";
public static final String SEARCH_KEYSERVER = "search_keyserver_pref"; 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 class Defaults {
public static final String KEY_SERVERS = "hkps://hkps.pool.sks-keyservers.net, hkps://pgp.mit.edu"; 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 { public static final class key {

View File

@@ -155,7 +155,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
return getURI(mOnion); return getURI(mOnion);
} }
public URI getProxiedURL(ParcelableProxy proxy) throws URISyntaxException { private URI getProxiedURL(ParcelableProxy proxy) throws URISyntaxException {
if (proxy.isTorEnabled()) { if (proxy.isTorEnabled()) {
return getOnionURI(); return getOnionURI();
} else { } else {
@@ -195,7 +195,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
private String query(String request, @NonNull ParcelableProxy proxy) throws Keyserver.QueryFailedException, HttpError { private String query(String request, @NonNull ParcelableProxy proxy) throws Keyserver.QueryFailedException, HttpError {
try { try {
URL url = new URL(getProxiedURL(proxy).toString() + request); 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()); OkHttpClient client = OkHttpClientFactory.getClientPinnedIfAvailable(url, proxy.getProxy());
Response response = client.newCall(new Request.Builder().url(url).build()).execute(); Response response = client.newCall(new Request.Builder().url(url).build()).execute();
@@ -347,7 +347,7 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
@Override @Override
public String get(String keyIdHex, ParcelableProxy proxy) throws Keyserver.QueryFailedException { public String get(String keyIdHex, ParcelableProxy proxy) throws Keyserver.QueryFailedException {
String request = "/pks/lookup?op=get&options=mr&search=" + keyIdHex; 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; String data;
try { try {
data = query(request, proxy); data = query(request, proxy);

View File

@@ -82,6 +82,8 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
private EditText mKeyserverEditText; private EditText mKeyserverEditText;
private TextInputLayout mKeyserverEditTextLayout; private TextInputLayout mKeyserverEditTextLayout;
private EditText mKeyserverEditOnionText;
private TextInputLayout mKeyserverEditOnionTextLayout;
private CheckBox mVerifyKeyserverCheckBox; private CheckBox mVerifyKeyserverCheckBox;
private CheckBox mOnlyTrustedKeyserverCheckBox; private CheckBox mOnlyTrustedKeyserverCheckBox;
@@ -130,6 +132,8 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
mKeyserverEditText = (EditText) view.findViewById(R.id.keyserver_url_edit_text); mKeyserverEditText = (EditText) view.findViewById(R.id.keyserver_url_edit_text);
mKeyserverEditTextLayout = (TextInputLayout) view.findViewById(R.id.keyserver_url_edit_text_layout); 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); mVerifyKeyserverCheckBox = (CheckBox) view.findViewById(R.id.verify_connection_checkbox);
mOnlyTrustedKeyserverCheckBox = (CheckBox) view.findViewById(R.id.only_trusted_keyserver_checkbox); mOnlyTrustedKeyserverCheckBox = (CheckBox) view.findViewById(R.id.only_trusted_keyserver_checkbox);
mVerifyKeyserverCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mVerifyKeyserverCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@@ -148,6 +152,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
alert.setTitle(R.string.edit_keyserver_dialog_title); alert.setTitle(R.string.edit_keyserver_dialog_title);
ParcelableHkpKeyserver keyserver = getArguments().getParcelable(ARG_KEYSERVER); ParcelableHkpKeyserver keyserver = getArguments().getParcelable(ARG_KEYSERVER);
mKeyserverEditText.setText(keyserver.getUrl()); mKeyserverEditText.setText(keyserver.getUrl());
mKeyserverEditOnionText.setText(keyserver.getOnion());
break; break;
} }
} }
@@ -225,11 +230,12 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
@Override @Override
public void onClick(View v) { public void onClick(View v) {
mKeyserverEditTextLayout.setErrorEnabled(false); mKeyserverEditTextLayout.setErrorEnabled(false);
mKeyserverEditOnionTextLayout.setErrorEnabled(false);
// behaviour same for edit and add // behaviour same for edit and add
String keyserverUrl = mKeyserverEditText.getText().toString(); String keyserverUrl = mKeyserverEditText.getText().toString();
// TODO! String keyserverOnion = mKeyserverEditOnionText.getText() == null ? null
String keyserverOnion = mKeyserverEditText.getText().toString(); : mKeyserverEditOnionText.getText().toString();
final ParcelableHkpKeyserver keyserver = new ParcelableHkpKeyserver(keyserverUrl, keyserverOnion); final ParcelableHkpKeyserver keyserver = new ParcelableHkpKeyserver(keyserverUrl, keyserverOnion);
if (mVerifyKeyserverCheckBox.isChecked()) { if (mVerifyKeyserverCheckBox.isChecked()) {
final ParcelableProxy proxy = Preferences.getPreferences(getActivity()) final ParcelableProxy proxy = Preferences.getPreferences(getActivity())
@@ -269,7 +275,7 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On
} else { } else {
dismiss(); dismiss();
// return unverified keyserver back to activity // return unverified keyserver back to activity
keyserverEdited(new ParcelableHkpKeyserver(keyserverUrl, null), false); keyserverEdited(keyserver, false);
} }
} }
}); });

View File

@@ -137,7 +137,6 @@ public class Preferences {
ArrayList<ParcelableHkpKeyserver> servers = new ArrayList<>(); ArrayList<ParcelableHkpKeyserver> servers = new ArrayList<>();
String[] entries = rawData.split(","); String[] entries = rawData.split(",");
for (String entry : entries) { for (String entry : entries) {
String[] addresses = entry.trim().split(";"); String[] addresses = entry.trim().split(";");
String url = addresses[0]; String url = addresses[0];
String onion = addresses.length == 1 ? null : addresses[1]; String onion = addresses.length == 1 ? null : addresses[1];
@@ -452,9 +451,12 @@ public class Preferences {
} }
public void upgradePreferences(Context context) { public void upgradePreferences(Context context) {
if (mSharedPreferences.getInt(Constants.Pref.PREF_DEFAULT_VERSION, 0) != Log.d(Constants.TAG, "Upgrading preferences…");
Constants.Defaults.PREF_VERSION) { int oldVersion = mSharedPreferences.getInt(Constants.Pref.PREF_VERSION, 0);
switch (mSharedPreferences.getInt(Constants.Pref.PREF_DEFAULT_VERSION, 0)) { boolean requiresUpgrade = oldVersion < Constants.Defaults.PREF_CURRENT_VERSION;
if (requiresUpgrade) {
switch (oldVersion) {
case 1: case 1:
// fall through // fall through
case 2: case 2:
@@ -469,18 +471,21 @@ public class Preferences {
continue; continue;
} }
switch (server.getUrl()) { switch (server.getUrl()) {
case "pool.sks-keyservers.net": case "pool.sks-keyservers.net": {
// use HKPS! // use HKPS!
it.set(new ParcelableHkpKeyserver("hkps://hkps.pool.sks-keyservers.net", null)); it.set(new ParcelableHkpKeyserver("hkps://hkps.pool.sks-keyservers.net", null));
break; break;
case "pgp.mit.edu": }
case "pgp.mit.edu": {
// use HKPS! // use HKPS!
it.set(new ParcelableHkpKeyserver("hkps://pgp.mit.edu", null)); it.set(new ParcelableHkpKeyserver("hkps://pgp.mit.edu", null));
break; break;
case "subkeys.pgp.net": }
case "subkeys.pgp.net": {
// remove, because often down and no HKPS! // remove, because often down and no HKPS!
it.remove(); it.remove();
break; break;
}
} }
} }
@@ -507,12 +512,10 @@ public class Preferences {
if (server == null) { if (server == null) {
continue; continue;
} }
switch (server.getUrl()) { if ("hkps://hkps.pool.sks-keyservers.net".equals(server.getUrl())) {
case "hkps://hkps.pool.sks-keyservers.net": it.set(new ParcelableHkpKeyserver(
it.set(new ParcelableHkpKeyserver( "hkps://hkps.pool.sks-keyservers.net",
"hkps://hkps.pool.sks-keyservers.net", "hkp://jirk5u4osbsr34t5.onion"));
"hkp://jirk5u4osbsr34t5.onion"));
break;
} }
} }
@@ -522,7 +525,7 @@ public class Preferences {
// write new preference version // write new preference version
mSharedPreferences.edit() mSharedPreferences.edit()
.putInt(Constants.Pref.PREF_DEFAULT_VERSION, Constants.Defaults.PREF_VERSION) .putInt(Constants.Pref.PREF_VERSION, Constants.Defaults.PREF_CURRENT_VERSION)
.commit(); .commit();
} }
} }

View File

@@ -27,6 +27,24 @@
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/keyserver_onion_edit_text_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp">
<EditText
android:id="@+id/keyserver_onion_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ems="10"
android:hint="@string/label_enter_keyserver_onion"
android:imeOptions="actionDone"
android:inputType="textUri" />
</android.support.design.widget.TextInputLayout>
<CheckBox <CheckBox
android:id="@+id/verify_connection_checkbox" android:id="@+id/verify_connection_checkbox"

View File

@@ -190,6 +190,7 @@
<string name="label_verify_keyserver_connection">"Test connection"</string> <string name="label_verify_keyserver_connection">"Test connection"</string>
<string name="label_only_trusted_keyserver">"Only trusted keyserver"</string> <string name="label_only_trusted_keyserver">"Only trusted keyserver"</string>
<string name="label_enter_keyserver_url">"URL"</string> <string name="label_enter_keyserver_url">"URL"</string>
<string name="label_enter_keyserver_onion">"Optional Tor .onion URL"</string>
<string name="label_keyserver_dialog_delete">"Delete keyserver"</string> <string name="label_keyserver_dialog_delete">"Delete keyserver"</string>
<string name="label_theme">"Theme"</string> <string name="label_theme">"Theme"</string>