UI for onion keyserver, fix preference upgrade
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user