Migrate local account data into SignalStore.

This commit is contained in:
Greyson Parrelli
2021-11-17 15:08:28 -05:00
committed by Cody Henthorne
parent 87f175a96b
commit 8aea20f147
87 changed files with 1063 additions and 756 deletions

View File

@@ -7,7 +7,6 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.concurrent.SignalExecutors;
@@ -15,8 +14,8 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.crypto.DatabaseSecret;
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider;
import org.thoughtcrime.securesms.keyvalue.KeyValueDataSet;
import org.thoughtcrime.securesms.keyvalue.KeyValuePersistentStorage;
import org.thoughtcrime.securesms.util.CursorUtil;
import org.thoughtcrime.securesms.util.SqlUtil;
import java.util.Collection;
import java.util.Map;
@@ -27,7 +26,7 @@ import java.util.Map;
* This is it's own separate physical database, so it cannot do joins or queries with any other
* tables.
*/
public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase {
public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase, KeyValuePersistentStorage {
private static final String TAG = Log.tag(KeyValueDatabase.class);
@@ -99,6 +98,7 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
});
}
@Override
public @NonNull KeyValueDataSet getDataSet() {
KeyValueDataSet dataSet = new KeyValueDataSet();
@@ -133,6 +133,7 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
return dataSet;
}
@Override
public void writeDataSet(@NonNull KeyValueDataSet dataSet, @NonNull Collection<String> removes) {
SQLiteDatabase db = getWritableDatabase();

View File

@@ -33,6 +33,7 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil;
import org.thoughtcrime.securesms.crypto.storage.TextSecureIdentityKeyStore;
import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.whispersystems.signalservice.api.push.ACI;
import org.thoughtcrime.securesms.database.model.IdentityRecord;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
@@ -500,7 +501,7 @@ public class RecipientDatabase extends Database {
} else if (!byE164.isPresent() && byAci.isPresent()) {
if (e164 != null) {
if (highTrust) {
if (Objects.equals(aci, TextSecurePreferences.getLocalAci(context)) && !changeSelf) {
if (Objects.equals(aci, SignalStore.account().getAci()) && !changeSelf) {
Log.w(TAG, String.format(Locale.US, "Found out about an E164 (%s) for our own ACI user (%s). High-trust but not change self, doing nothing.", e164, byAci.get()), true);
finalId = byAci.get();
} else {

View File

@@ -791,7 +791,7 @@ public class ClassicOpenHelper extends SQLiteOpenHelper {
db.execSQL("UPDATE part SET pending_push = '2' WHERE pending_push = '1'");
}
if (oldVersion < NO_MORE_CANONICAL_ADDRESS_DATABASE && isValidNumber(TextSecurePreferences.getLocalNumber(context))) {
if (oldVersion < NO_MORE_CANONICAL_ADDRESS_DATABASE && isValidNumber(TextSecurePreferences.getStringPreference(context, "pref_local_number", null))) {
SQLiteOpenHelper canonicalAddressDatabaseHelper = new SQLiteOpenHelper(context, "canonical_address.db", null, 1) {
@Override
public void onCreate(SQLiteDatabase db) {
@@ -803,7 +803,7 @@ public class ClassicOpenHelper extends SQLiteOpenHelper {
};
SQLiteDatabase canonicalAddressDatabase = canonicalAddressDatabaseHelper.getReadableDatabase();
NumberMigrator numberMigrator = new NumberMigrator(TextSecurePreferences.getLocalNumber(context));
NumberMigrator numberMigrator = new NumberMigrator(TextSecurePreferences.getStringPreference(context, "pref_local_number", null));
// Migrate Thread Database
Cursor cursor = db.query("thread", new String[] {"_id", "recipient_ids"}, null, null, null, null, null);
@@ -1131,7 +1131,7 @@ public class ClassicOpenHelper extends SQLiteOpenHelper {
members.add(DelimiterUtil.escape(DelimiterUtil.unescape(address, ' '), ','));
}
members.add(DelimiterUtil.escape(TextSecurePreferences.getLocalNumber(context), ','));
members.add(DelimiterUtil.escape(TextSecurePreferences.getStringPreference(context, "pref_local_number", null), ','));
Collections.sort(members);
@@ -1188,14 +1188,14 @@ public class ClassicOpenHelper extends SQLiteOpenHelper {
if (oldVersion < INTERNAL_DIRECTORY) {
db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN registered INTEGER DEFAULT 0");
if (isValidNumber(TextSecurePreferences.getLocalNumber(context))) {
if (isValidNumber(TextSecurePreferences.getStringPreference(context, "pref_local_number", null))) {
OldDirectoryDatabaseHelper directoryDatabaseHelper = new OldDirectoryDatabaseHelper(context);
SQLiteDatabase directoryDatabase = directoryDatabaseHelper.getWritableDatabase();
Cursor cursor = directoryDatabase.query("directory", new String[] {"number", "registered"}, null, null, null, null, null);
while (cursor != null && cursor.moveToNext()) {
String address = new NumberMigrator(TextSecurePreferences.getLocalNumber(context)).migrate(cursor.getString(0));
String address = new NumberMigrator(TextSecurePreferences.getStringPreference(context, "pref_local_number", null)).migrate(cursor.getString(0));
ContentValues contentValues = new ContentValues(1);
contentValues.put("registered", cursor.getInt(1) == 1 ? 1 : 2);

View File

@@ -559,7 +559,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
}
if (oldVersion < SELF_ATTACHMENT_CLEANUP) {
String localNumber = TextSecurePreferences.getLocalNumber(context);
String localNumber = SignalStore.account().getE164();
if (!TextUtils.isEmpty(localNumber)) {
try (Cursor threadCursor = db.rawQuery("SELECT _id FROM thread WHERE recipient_ids = ?", new String[]{ localNumber })) {
@@ -651,7 +651,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
if (oldVersion < RECIPIENT_SEARCH) {
db.execSQL("ALTER TABLE recipient ADD COLUMN system_phone_type INTEGER DEFAULT -1");
String localNumber = TextSecurePreferences.getLocalNumber(context);
String localNumber = SignalStore.account().getE164();
if (!TextUtils.isEmpty(localNumber)) {
try (Cursor cursor = db.query("recipient", null, "phone = ?", new String[] { localNumber }, null, null, null)) {
if (cursor == null || !cursor.moveToFirst()) {
@@ -834,7 +834,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
}
if (oldVersion < PROFILE_KEY_TO_DB) {
String localNumber = TextSecurePreferences.getLocalNumber(context);
String localNumber = SignalStore.account().getE164();
if (!TextUtils.isEmpty(localNumber)) {
String encodedProfileKey = PreferenceManager.getDefaultSharedPreferences(context).getString("pref_profile_key", null);
byte[] profileKey = encodedProfileKey != null ? Base64.decodeOrThrow(encodedProfileKey) : Util.getSecretBytes(32);
@@ -903,7 +903,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
}
if (oldVersion < PROFILE_DATA_MIGRATION) {
String localNumber = TextSecurePreferences.getLocalNumber(context);
String localNumber = SignalStore.account().getE164();
if (localNumber != null) {
String encodedProfileName = PreferenceManager.getDefaultSharedPreferences(context).getString("pref_profile_name", null);
ProfileName profileName = ProfileName.fromSerialized(encodedProfileName);

View File

@@ -36,7 +36,7 @@ public class GroupCallUpdateMessageFactory implements UpdateDescription.StringFa
this.joinedMembers = new ArrayList<>(joinedMembers);
this.withTime = withTime;
this.groupCallUpdateDetails = groupCallUpdateDetails;
this.selfAci = TextSecurePreferences.getLocalAci(context);
this.selfAci = Recipient.self().requireAci();
boolean removed = this.joinedMembers.remove(selfAci);
if (removed) {