@@ -60,6 +60,9 @@ public class KeychainContract {
|
||||
String MASTER_KEY_ID = "master_key_id"; // foreign key to key_rings._ID
|
||||
String TYPE = "type"; // 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 RANK = "rank"; // ONLY used for sorting! no key, no nothing!
|
||||
String IS_PRIMARY = "is_primary";
|
||||
@@ -359,6 +362,9 @@ public class KeychainContract {
|
||||
|
||||
public static class Certs implements CertsColumns, BaseColumns {
|
||||
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 int UNVERIFIED = 0;
|
||||
|
||||
@@ -115,6 +115,9 @@ public class KeychainDatabase extends SQLiteOpenHelper {
|
||||
+ UserPacketsColumns.MASTER_KEY_ID + " INTEGER, "
|
||||
+ UserPacketsColumns.TYPE + " INT, "
|
||||
+ UserPacketsColumns.USER_ID + " TEXT, "
|
||||
+ UserPacketsColumns.NAME + " TEXT, "
|
||||
+ UserPacketsColumns.EMAIL + " TEXT, "
|
||||
+ UserPacketsColumns.COMMENT + " TEXT, "
|
||||
+ UserPacketsColumns.ATTRIBUTE_DATA + " BLOB, "
|
||||
|
||||
+ UserPacketsColumns.IS_PRIMARY + " INTEGER, "
|
||||
|
||||
@@ -308,6 +308,9 @@ public class KeychainProvider extends ContentProvider {
|
||||
projectionMap.put(KeyRings.ALGORITHM, Tables.KEYS + "." + Keys.ALGORITHM);
|
||||
projectionMap.put(KeyRings.FINGERPRINT, Tables.KEYS + "." + Keys.FINGERPRINT);
|
||||
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,
|
||||
"(EXISTS (SELECT * FROM " + Tables.USER_PACKETS + " AS dups"
|
||||
+ " WHERE dups." + UserPackets.MASTER_KEY_ID
|
||||
|
||||
@@ -19,17 +19,6 @@
|
||||
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.ContentResolver;
|
||||
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.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
|
||||
* name, it is not only a helper but actually the main interface for all
|
||||
@@ -452,11 +452,13 @@ public class ProviderHelper {
|
||||
mIndent += 1;
|
||||
for (byte[] rawUserId : masterKey.getUnorderedRawUserIds()) {
|
||||
String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId);
|
||||
|
||||
UserPacketItem item = new UserPacketItem();
|
||||
uids.add(item);
|
||||
KeyRing.UserId splitUserId = KeyRing.splitUserId(userId);
|
||||
item.userId = userId;
|
||||
|
||||
item.name = splitUserId.name;
|
||||
item.email = splitUserId.email;
|
||||
item.comment = splitUserId.comment;
|
||||
int unknownCerts = 0;
|
||||
|
||||
log(LogType.MSG_IP_UID_PROCESSING, userId);
|
||||
@@ -746,6 +748,9 @@ public class ProviderHelper {
|
||||
private static class UserPacketItem implements Comparable<UserPacketItem> {
|
||||
Integer type;
|
||||
String userId;
|
||||
String name;
|
||||
String email;
|
||||
String comment;
|
||||
byte[] attributeData;
|
||||
boolean isPrimary = false;
|
||||
WrappedSignature selfCert;
|
||||
@@ -1437,6 +1442,9 @@ public class ProviderHelper {
|
||||
values.put(UserPackets.MASTER_KEY_ID, masterKeyId);
|
||||
values.put(UserPackets.TYPE, item.type);
|
||||
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.IS_PRIMARY, item.isPrimary);
|
||||
values.put(UserPackets.IS_REVOKED, item.selfRevocation != null);
|
||||
|
||||
Reference in New Issue
Block a user