aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
diff options
context:
space:
mode:
authormar-v-in <github@rvin.mooo.com>2014-05-27 21:16:52 +0200
committermar-v-in <github@rvin.mooo.com>2014-05-27 21:16:52 +0200
commitcb92c9ccc811a72b4e216f819be32b19748113c7 (patch)
tree7ebad4fea562c7ccb59cfdd0e4a61986964ece75 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
parent8e5767f967646412a03563c966c3bb5b7c26e0fa (diff)
downloadopen-keychain-cb92c9ccc811a72b4e216f819be32b19748113c7.tar.gz
open-keychain-cb92c9ccc811a72b4e216f819be32b19748113c7.tar.bz2
open-keychain-cb92c9ccc811a72b4e216f819be32b19748113c7.zip
Add hkps support
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java46
1 files changed, 37 insertions, 9 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
index fbe38c30a..71c251ddc 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java
@@ -81,6 +81,7 @@ public class HkpKeyserver extends Keyserver {
private String mHost;
private short mPort;
+ private boolean mSecure;
/**
* pub:%keyid%:%algo%:%keylen%:%creationdate%:%expirationdate%:%flags%
@@ -147,6 +148,7 @@ public class HkpKeyserver extends Keyserver {
Pattern.CASE_INSENSITIVE);
private static final short PORT_DEFAULT = 11371;
+ private static final short PORT_DEFAULT_HKPS = 443;
/**
* @param hostAndPort may be just
@@ -157,19 +159,45 @@ public class HkpKeyserver extends Keyserver {
public HkpKeyserver(String hostAndPort) {
String host = hostAndPort;
short port = PORT_DEFAULT;
- final int colonPosition = hostAndPort.lastIndexOf(':');
- if (colonPosition > 0) {
- host = hostAndPort.substring(0, colonPosition);
- final String portStr = hostAndPort.substring(colonPosition + 1);
- port = Short.decode(portStr);
+ boolean secure = false;
+ String[] parts = hostAndPort.split(":");
+ if (parts.length > 1) {
+ if (!parts[0].contains(".")) { // This is not a domain or ip, so it must be a protocol name
+ if (parts[0].equalsIgnoreCase("hkps") || parts[0].equalsIgnoreCase("https")) {
+ secure = true;
+ port = PORT_DEFAULT_HKPS;
+ } else if (!parts[0].equalsIgnoreCase("hkp") && !parts[0].equalsIgnoreCase("http")) {
+ throw new IllegalArgumentException("Protocol " + parts[0] + " is unknown");
+ }
+ host = parts[1];
+ if (host.startsWith("//")) { // People tend to type https:// and hkps://, so we'll support that as well
+ host = host.substring(2);
+ }
+ if (parts.length > 2) {
+ port = Short.decode(parts[2]);
+ }
+ } else {
+ host = parts[0];
+ port = Short.decode(parts[1]);
+ }
}
mHost = host;
mPort = port;
+ mSecure = secure;
}
public HkpKeyserver(String host, short port) {
+ this(host, port, false);
+ }
+
+ public HkpKeyserver(String host, short port, boolean secure) {
mHost = host;
mPort = port;
+ mSecure = secure;
+ }
+
+ private String getUrlPrefix() {
+ return mSecure ? "https://" : "http://";
}
private String query(String request) throws QueryFailedException, HttpError {
@@ -181,7 +209,7 @@ public class HkpKeyserver extends Keyserver {
}
for (int i = 0; i < ips.length; ++i) {
try {
- String url = "http://" + ips[i].getHostAddress() + ":" + mPort + request;
+ String url = getUrlPrefix() + ips[i].getHostAddress() + ":" + mPort + request;
Log.d(Constants.TAG, "hkp keyserver query: " + url);
URL realUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
@@ -244,7 +272,7 @@ public class HkpKeyserver extends Keyserver {
while (matcher.find()) {
final ImportKeysListEntry entry = new ImportKeysListEntry();
entry.setQuery(query);
- entry.setOrigin("hkp:"+mHost+":"+mPort);
+ entry.setOrigin("hkp:" + mHost + ":" + mPort);
entry.setBitStrength(Integer.parseInt(matcher.group(3)));
@@ -297,7 +325,7 @@ public class HkpKeyserver extends Keyserver {
public String get(String keyIdHex) throws QueryFailedException {
HttpClient client = new DefaultHttpClient();
try {
- String query = "http://" + mHost + ":" + mPort +
+ String query = getUrlPrefix() + mHost + ":" + mPort +
"/pks/lookup?op=get&options=mr&search=" + keyIdHex;
Log.d(Constants.TAG, "hkp keyserver get: " + query);
HttpGet get = new HttpGet(query);
@@ -326,7 +354,7 @@ public class HkpKeyserver extends Keyserver {
public void add(String armoredKey) throws AddKeyException {
HttpClient client = new DefaultHttpClient();
try {
- String query = "http://" + mHost + ":" + mPort + "/pks/add";
+ String query = getUrlPrefix() + mHost + ":" + mPort + "/pks/add";
HttpPost post = new HttpPost(query);
Log.d(Constants.TAG, "hkp keyserver add: " + query);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);