diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index 51ce60576..257fbcf78 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -719,6 +719,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
index 33963d7b3..f2d718b8a 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java
@@ -56,6 +56,8 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = Constants.IMPORT_KEY_FROM_KEYSERVER;
public static final String ACTION_IMPORT_KEY_FROM_FACEBOOK
= Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_FACEBOOK";
+ public static final String ACTION_IMPORT_KEY_FROM_WEB_KEY_DIRECTORY
+ = Constants.INTENT_PREFIX + "ACTION_IMPORT_KEY_FROM_WEB_KEY_DIRECTORY";
public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_RESULT =
Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN_RESULT";
public static final String ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN = Constants.INTENT_PREFIX
@@ -121,6 +123,8 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
if (Intent.ACTION_VIEW.equals(action)) {
if (FacebookKeyserverClient.isFacebookHost(dataUri)) {
action = ACTION_IMPORT_KEY_FROM_FACEBOOK;
+ } else if ("https".equalsIgnoreCase(scheme) || dataUri.getPath().startsWith("/.well-known/openpgpkey/hu/")) {
+ action = ACTION_IMPORT_KEY_FROM_WEB_KEY_DIRECTORY;
} else if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) {
action = ACTION_SEARCH_KEYSERVER_FROM_URL;
} else if ("openpgp4fpr".equalsIgnoreCase(scheme)) {
@@ -208,6 +212,13 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
startListFragment(null, null, fbUsername, cloudSearchPrefs);
break;
}
+ case ACTION_IMPORT_KEY_FROM_WEB_KEY_DIRECTORY: {
+ Preferences.CloudSearchPrefs cloudSearchPrefs =
+ new Preferences.CloudSearchPrefs(false, false, false, true, null);
+ // search immediately
+ startListFragment(null, null, dataUri.toString(), cloudSearchPrefs);
+ break;
+ }
case ACTION_SEARCH_KEYSERVER_FROM_URL: {
// get keyserver from URL
HkpKeyserverAddress keyserver = HkpKeyserverAddress.createFromUri(
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtil.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtil.java
index 716aee4a0..0531986ad 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtil.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtil.java
@@ -24,6 +24,18 @@ public class WebKeyDirectoryUtil {
*/
@Nullable
public static URL toWebKeyDirectoryURL(String name) {
+ if (name == null) {
+ return null;
+ }
+
+ if (name.startsWith("https://") && name.contains("/.well-known/openpgpkey/hu/")) {
+ try {
+ return new URL(name);
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
+
Matcher matcher = EMAIL_PATTERN.matcher(name);
if (!matcher.matches()) {
diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtilTest.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtilTest.java
index fd0d40b7d..f468774ff 100644
--- a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtilTest.java
+++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/util/WebKeyDirectoryUtilTest.java
@@ -27,4 +27,13 @@ public class WebKeyDirectoryUtilTest {
assertEquals("/.well-known/openpgpkey/hu/4hg7tescnttreaouu4z1izeuuyibwww1", url.getPath());
}
+ @Test
+ public void testWkdDirectUrl() {
+ URL url = WebKeyDirectoryUtil.toWebKeyDirectoryURL("https://openkeychain.org/.well-known/openpgpkey/hu/4hg7tescnttreaouu4z1izeuuyibwww1");
+ assertNotNull(url);
+ assertEquals("openkeychain.org", url.getHost());
+ assertEquals("https", url.getProtocol());
+ assertEquals("/.well-known/openpgpkey/hu/4hg7tescnttreaouu4z1izeuuyibwww1", url.getPath());
+ }
+
}