aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-12-29 00:17:13 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-12-29 00:35:37 +0100
commit24ef87535f922354e4f468496c1577d0329b23f8 (patch)
tree5e84e2a7083a4934418f36b0386a354d04dc094d /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider
parent6f74ba2f2d135f60fa926b6e4a8749d01373dc09 (diff)
downloadopen-keychain-24ef87535f922354e4f468496c1577d0329b23f8.tar.gz
open-keychain-24ef87535f922354e4f468496c1577d0329b23f8.tar.bz2
open-keychain-24ef87535f922354e4f468496c1577d0329b23f8.zip
keylist: filter results by all user ids for search (fixes #1645)
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java6
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java21
2 files changed, 22 insertions, 5 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
index ee28b5f36..177f07344 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
@@ -109,6 +109,7 @@ public class KeychainContract {
public static final String PATH_FIND = "find";
public static final String PATH_BY_EMAIL = "email";
public static final String PATH_BY_SUBKEY = "subkey";
+ public static final String PATH_BY_USER_ID = "user_id";
public static final String PATH_PUBLIC = "public";
public static final String PATH_SECRET = "secret";
@@ -174,6 +175,11 @@ public class KeychainContract {
.appendPath(PATH_BY_EMAIL).appendPath(email).build();
}
+ public static Uri buildUnifiedKeyRingsFindByUserIdUri(String query) {
+ return CONTENT_URI.buildUpon().appendPath(PATH_FIND)
+ .appendPath(PATH_BY_USER_ID).appendPath(query).build();
+ }
+
public static Uri buildUnifiedKeyRingsFindBySubkeyUri(long subkey) {
return CONTENT_URI.buildUpon().appendPath(PATH_FIND)
.appendPath(PATH_BY_SUBKEY).appendPath(Long.toString(subkey)).build();
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
index 104343074..87b8a3b65 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
@@ -28,6 +28,7 @@ import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
+import android.support.annotation.NonNull;
import android.text.TextUtils;
import org.sufficientlysecure.keychain.Constants;
@@ -75,6 +76,7 @@ public class KeychainProvider extends ContentProvider {
private static final int KEY_RINGS_FIND_BY_EMAIL = 400;
private static final int KEY_RINGS_FIND_BY_SUBKEY = 401;
+ private static final int KEY_RINGS_FIND_BY_USER_ID = 402;
private static final int UPDATED_KEYS = 500;
private static final int UPDATED_KEYS_SPECIFIC = 501;
@@ -126,6 +128,9 @@ public class KeychainProvider extends ContentProvider {
matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS + "/"
+ KeychainContract.PATH_FIND + "/" + KeychainContract.PATH_BY_SUBKEY + "/*",
KEY_RINGS_FIND_BY_SUBKEY);
+ matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS + "/"
+ + KeychainContract.PATH_FIND + "/" + KeychainContract.PATH_BY_USER_ID + "/*",
+ KEY_RINGS_FIND_BY_USER_ID);
/**
* list key_ring specifics
@@ -226,7 +231,7 @@ public class KeychainProvider extends ContentProvider {
* {@inheritDoc}
*/
@Override
- public String getType(Uri uri) {
+ public String getType(@NonNull Uri uri) {
final int match = mUriMatcher.match(uri);
switch (match) {
case KEY_RING_PUBLIC:
@@ -270,7 +275,7 @@ public class KeychainProvider extends ContentProvider {
* {@inheritDoc}
*/
@Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
Log.v(Constants.TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")");
@@ -285,7 +290,8 @@ public class KeychainProvider extends ContentProvider {
case KEY_RING_UNIFIED:
case KEY_RINGS_UNIFIED:
case KEY_RINGS_FIND_BY_EMAIL:
- case KEY_RINGS_FIND_BY_SUBKEY: {
+ case KEY_RINGS_FIND_BY_SUBKEY:
+ case KEY_RINGS_FIND_BY_USER_ID: {
HashMap<String, String> projectionMap = new HashMap<>();
projectionMap.put(KeyRings._ID, Tables.KEYS + ".oid AS _id");
projectionMap.put(KeyRings.MASTER_KEY_ID, Tables.KEYS + "." + Keys.MASTER_KEY_ID);
@@ -432,7 +438,8 @@ public class KeychainProvider extends ContentProvider {
}
break;
}
- case KEY_RINGS_FIND_BY_EMAIL: {
+ case KEY_RINGS_FIND_BY_EMAIL:
+ case KEY_RINGS_FIND_BY_USER_ID: {
String chunks[] = uri.getLastPathSegment().split(" *, *");
boolean gotCondition = false;
String emailWhere = "";
@@ -446,7 +453,11 @@ public class KeychainProvider extends ContentProvider {
}
emailWhere += "tmp." + UserPackets.USER_ID + " LIKE ";
// match '*<email>', so it has to be at the *end* of the user id
- emailWhere += DatabaseUtils.sqlEscapeString("%<" + chunks[i] + ">");
+ if (match == KEY_RINGS_FIND_BY_EMAIL) {
+ emailWhere += DatabaseUtils.sqlEscapeString("%<" + chunks[i] + ">");
+ } else {
+ emailWhere += DatabaseUtils.sqlEscapeString("%" + chunks[i] + "%");
+ }
gotCondition = true;
}
if(gotCondition) {