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()); + } + }