Merge pull request #1763 from fjodorver/master
WIP: Save split user ids in database #1745
This commit is contained in:
@@ -60,6 +60,9 @@ public class KeychainContract {
|
|||||||
String MASTER_KEY_ID = "master_key_id"; // foreign key to key_rings._ID
|
String MASTER_KEY_ID = "master_key_id"; // foreign key to key_rings._ID
|
||||||
String TYPE = "type"; // not a database id
|
String TYPE = "type"; // not a database id
|
||||||
String USER_ID = "user_id"; // not a database id
|
String USER_ID = "user_id"; // not a database id
|
||||||
|
String NAME = "name";
|
||||||
|
String EMAIL = "email";
|
||||||
|
String COMMENT = "comment";
|
||||||
String ATTRIBUTE_DATA = "attribute_data"; // not a database id
|
String ATTRIBUTE_DATA = "attribute_data"; // not a database id
|
||||||
String RANK = "rank"; // ONLY used for sorting! no key, no nothing!
|
String RANK = "rank"; // ONLY used for sorting! no key, no nothing!
|
||||||
String IS_PRIMARY = "is_primary";
|
String IS_PRIMARY = "is_primary";
|
||||||
@@ -359,6 +362,9 @@ public class KeychainContract {
|
|||||||
|
|
||||||
public static class Certs implements CertsColumns, BaseColumns {
|
public static class Certs implements CertsColumns, BaseColumns {
|
||||||
public static final String USER_ID = UserPacketsColumns.USER_ID;
|
public static final String USER_ID = UserPacketsColumns.USER_ID;
|
||||||
|
public static final String NAME = UserPacketsColumns.NAME;
|
||||||
|
public static final String EMAIL = UserPacketsColumns.EMAIL;
|
||||||
|
public static final String COMMENT = UserPacketsColumns.COMMENT;
|
||||||
public static final String SIGNER_UID = "signer_user_id";
|
public static final String SIGNER_UID = "signer_user_id";
|
||||||
|
|
||||||
public static final int UNVERIFIED = 0;
|
public static final int UNVERIFIED = 0;
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public class KeychainDatabase extends SQLiteOpenHelper {
|
public class KeychainDatabase extends SQLiteOpenHelper {
|
||||||
private static final String DATABASE_NAME = "openkeychain.db";
|
private static final String DATABASE_NAME = "openkeychain.db";
|
||||||
private static final int DATABASE_VERSION = 14;
|
private static final int DATABASE_VERSION = 15;
|
||||||
static Boolean apgHack = false;
|
static Boolean apgHack = false;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@@ -115,6 +115,9 @@ public class KeychainDatabase extends SQLiteOpenHelper {
|
|||||||
+ UserPacketsColumns.MASTER_KEY_ID + " INTEGER, "
|
+ UserPacketsColumns.MASTER_KEY_ID + " INTEGER, "
|
||||||
+ UserPacketsColumns.TYPE + " INT, "
|
+ UserPacketsColumns.TYPE + " INT, "
|
||||||
+ UserPacketsColumns.USER_ID + " TEXT, "
|
+ UserPacketsColumns.USER_ID + " TEXT, "
|
||||||
|
+ UserPacketsColumns.NAME + " TEXT, "
|
||||||
|
+ UserPacketsColumns.EMAIL + " TEXT, "
|
||||||
|
+ UserPacketsColumns.COMMENT + " TEXT, "
|
||||||
+ UserPacketsColumns.ATTRIBUTE_DATA + " BLOB, "
|
+ UserPacketsColumns.ATTRIBUTE_DATA + " BLOB, "
|
||||||
|
|
||||||
+ UserPacketsColumns.IS_PRIMARY + " INTEGER, "
|
+ UserPacketsColumns.IS_PRIMARY + " INTEGER, "
|
||||||
@@ -306,7 +309,10 @@ public class KeychainDatabase extends SQLiteOpenHelper {
|
|||||||
+ UserPacketsColumns.USER_ID + ", " + UserPacketsColumns.MASTER_KEY_ID + ");");
|
+ UserPacketsColumns.USER_ID + ", " + UserPacketsColumns.MASTER_KEY_ID + ");");
|
||||||
db.execSQL("CREATE INDEX verified_certs ON certs ("
|
db.execSQL("CREATE INDEX verified_certs ON certs ("
|
||||||
+ CertsColumns.VERIFIED + ", " + CertsColumns.MASTER_KEY_ID + ");");
|
+ CertsColumns.VERIFIED + ", " + CertsColumns.MASTER_KEY_ID + ");");
|
||||||
|
case 15:
|
||||||
|
db.execSQL("ALTER TABLE user_packets ADD COLUMN name TEXT");
|
||||||
|
db.execSQL("ALTER TABLE user_packets ADD COLUMN email TEXT");
|
||||||
|
db.execSQL("ALTER TABLE user_packets ADD COLUMN comment TEXT");
|
||||||
}
|
}
|
||||||
|
|
||||||
// always do consolidate after upgrade
|
// always do consolidate after upgrade
|
||||||
|
|||||||
@@ -308,6 +308,9 @@ public class KeychainProvider extends ContentProvider {
|
|||||||
projectionMap.put(KeyRings.ALGORITHM, Tables.KEYS + "." + Keys.ALGORITHM);
|
projectionMap.put(KeyRings.ALGORITHM, Tables.KEYS + "." + Keys.ALGORITHM);
|
||||||
projectionMap.put(KeyRings.FINGERPRINT, Tables.KEYS + "." + Keys.FINGERPRINT);
|
projectionMap.put(KeyRings.FINGERPRINT, Tables.KEYS + "." + Keys.FINGERPRINT);
|
||||||
projectionMap.put(KeyRings.USER_ID, Tables.USER_PACKETS + "." + UserPackets.USER_ID);
|
projectionMap.put(KeyRings.USER_ID, Tables.USER_PACKETS + "." + UserPackets.USER_ID);
|
||||||
|
projectionMap.put(KeyRings.NAME, Tables.USER_PACKETS + "." + UserPackets.NAME);
|
||||||
|
projectionMap.put(KeyRings.EMAIL, Tables.USER_PACKETS + "." + UserPackets.EMAIL);
|
||||||
|
projectionMap.put(KeyRings.COMMENT, Tables.USER_PACKETS + "." + UserPackets.COMMENT);
|
||||||
projectionMap.put(KeyRings.HAS_DUPLICATE_USER_ID,
|
projectionMap.put(KeyRings.HAS_DUPLICATE_USER_ID,
|
||||||
"(EXISTS (SELECT * FROM " + Tables.USER_PACKETS + " AS dups"
|
"(EXISTS (SELECT * FROM " + Tables.USER_PACKETS + " AS dups"
|
||||||
+ " WHERE dups." + UserPackets.MASTER_KEY_ID
|
+ " WHERE dups." + UserPackets.MASTER_KEY_ID
|
||||||
|
|||||||
@@ -19,17 +19,6 @@
|
|||||||
package org.sufficientlysecure.keychain.provider;
|
package org.sufficientlysecure.keychain.provider;
|
||||||
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import android.content.ContentProviderOperation;
|
import android.content.ContentProviderOperation;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
@@ -79,6 +68,17 @@ import org.sufficientlysecure.keychain.util.ProgressFixedScaler;
|
|||||||
import org.sufficientlysecure.keychain.util.ProgressScaler;
|
import org.sufficientlysecure.keychain.util.ProgressScaler;
|
||||||
import org.sufficientlysecure.keychain.util.Utf8Util;
|
import org.sufficientlysecure.keychain.util.Utf8Util;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class contains high level methods for database access. Despite its
|
* This class contains high level methods for database access. Despite its
|
||||||
* name, it is not only a helper but actually the main interface for all
|
* name, it is not only a helper but actually the main interface for all
|
||||||
@@ -452,11 +452,13 @@ public class ProviderHelper {
|
|||||||
mIndent += 1;
|
mIndent += 1;
|
||||||
for (byte[] rawUserId : masterKey.getUnorderedRawUserIds()) {
|
for (byte[] rawUserId : masterKey.getUnorderedRawUserIds()) {
|
||||||
String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId);
|
String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId);
|
||||||
|
|
||||||
UserPacketItem item = new UserPacketItem();
|
UserPacketItem item = new UserPacketItem();
|
||||||
uids.add(item);
|
uids.add(item);
|
||||||
|
KeyRing.UserId splitUserId = KeyRing.splitUserId(userId);
|
||||||
item.userId = userId;
|
item.userId = userId;
|
||||||
|
item.name = splitUserId.name;
|
||||||
|
item.email = splitUserId.email;
|
||||||
|
item.comment = splitUserId.comment;
|
||||||
int unknownCerts = 0;
|
int unknownCerts = 0;
|
||||||
|
|
||||||
log(LogType.MSG_IP_UID_PROCESSING, userId);
|
log(LogType.MSG_IP_UID_PROCESSING, userId);
|
||||||
@@ -746,6 +748,9 @@ public class ProviderHelper {
|
|||||||
private static class UserPacketItem implements Comparable<UserPacketItem> {
|
private static class UserPacketItem implements Comparable<UserPacketItem> {
|
||||||
Integer type;
|
Integer type;
|
||||||
String userId;
|
String userId;
|
||||||
|
String name;
|
||||||
|
String email;
|
||||||
|
String comment;
|
||||||
byte[] attributeData;
|
byte[] attributeData;
|
||||||
boolean isPrimary = false;
|
boolean isPrimary = false;
|
||||||
WrappedSignature selfCert;
|
WrappedSignature selfCert;
|
||||||
@@ -1437,6 +1442,9 @@ public class ProviderHelper {
|
|||||||
values.put(UserPackets.MASTER_KEY_ID, masterKeyId);
|
values.put(UserPackets.MASTER_KEY_ID, masterKeyId);
|
||||||
values.put(UserPackets.TYPE, item.type);
|
values.put(UserPackets.TYPE, item.type);
|
||||||
values.put(UserPackets.USER_ID, item.userId);
|
values.put(UserPackets.USER_ID, item.userId);
|
||||||
|
values.put(UserPackets.NAME, item.name);
|
||||||
|
values.put(UserPackets.EMAIL, item.email);
|
||||||
|
values.put(UserPackets.COMMENT, item.comment);
|
||||||
values.put(UserPackets.ATTRIBUTE_DATA, item.attributeData);
|
values.put(UserPackets.ATTRIBUTE_DATA, item.attributeData);
|
||||||
values.put(UserPackets.IS_PRIMARY, item.isPrimary);
|
values.put(UserPackets.IS_PRIMARY, item.isPrimary);
|
||||||
values.put(UserPackets.IS_REVOKED, item.selfRevocation != null);
|
values.put(UserPackets.IS_REVOKED, item.selfRevocation != null);
|
||||||
|
|||||||
Reference in New Issue
Block a user