Show import key dialog when clicking on WKD URL
This change extends WKD support for direct Web Key Directory URLs similarily to Facebook key URLs and HKP URLs. When a link with scheme `https` and path starting with `/.well-known/openpgpkey/hu/` is clicked Android will suggest importing the key with OpenKeychain. Fixes #2270.
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user