Store your own PNI.

This commit is contained in:
Greyson Parrelli
2021-12-06 12:18:42 -05:00
committed by GitHub
parent 0a84f7f505
commit c93457402c
17 changed files with 208 additions and 79 deletions

View File

@@ -77,6 +77,7 @@ import org.whispersystems.libsignal.util.Pair
import org.whispersystems.libsignal.util.guava.Optional
import org.whispersystems.signalservice.api.profiles.SignalServiceProfile
import org.whispersystems.signalservice.api.push.ACI
import org.whispersystems.signalservice.api.push.PNI
import org.whispersystems.signalservice.api.push.SignalServiceAddress
import org.whispersystems.signalservice.api.storage.SignalAccountRecord
import org.whispersystems.signalservice.api.storage.SignalContactRecord
@@ -108,6 +109,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
const val ID = "_id"
private const val ACI_COLUMN = "uuid"
private const val PNI_COLUMN = "pni"
private const val USERNAME = "username"
const val PHONE = "phone"
const val EMAIL = "email"
@@ -216,17 +218,20 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
$GROUPS_IN_COMMON INTEGER DEFAULT 0,
$CHAT_COLORS BLOB DEFAULT NULL,
$CUSTOM_CHAT_COLORS_ID INTEGER DEFAULT 0,
$BADGES BLOB DEFAULT NULL
$BADGES BLOB DEFAULT NULL,
$PNI_COLUMN TEXT DEFAULT NULL
)
""".trimIndent()
val CREATE_INDEXS = arrayOf(
"CREATE INDEX IF NOT EXISTS recipient_group_type_index ON $TABLE_NAME ($GROUP_TYPE);"
"CREATE INDEX IF NOT EXISTS recipient_group_type_index ON $TABLE_NAME ($GROUP_TYPE);",
"CREATE UNIQUE INDEX IF NOT EXISTS recipient_pni_index ON $TABLE_NAME ($PNI_COLUMN)"
)
private val RECIPIENT_PROJECTION: Array<String> = arrayOf(
ID,
ACI_COLUMN,
PNI_COLUMN,
USERNAME,
PHONE,
EMAIL,
@@ -1807,6 +1812,13 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
return results
}
fun setPni(id: RecipientId, pni: PNI) {
val values = ContentValues().apply {
put(PNI_COLUMN, pni.toString())
}
writableDatabase.update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(id))
}
/**
* @return True if setting the UUID resulted in changed recipientId, otherwise false.
*/
@@ -2777,6 +2789,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) :
return RecipientRecord(
id = recipientId,
aci = ACI.parseOrNull(cursor.requireString(ACI_COLUMN)),
pni = PNI.parseOrNull(cursor.requireString(PNI_COLUMN)),
username = cursor.requireString(USERNAME),
e164 = cursor.requireString(PHONE),
email = cursor.requireString(EMAIL),

View File

@@ -178,8 +178,9 @@ object SignalDatabaseMigrations {
private const val SENDER_KEY_UUID = 119
private const val SENDER_KEY_SHARED_TIMESTAMP = 120
private const val REACTION_REFACTOR = 121
private const val PNI = 122
const val DATABASE_VERSION = 121
const val DATABASE_VERSION = 122
@JvmStatic
fun migrate(context: Context, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@@ -2170,6 +2171,11 @@ object SignalDatabaseMigrations {
db.execSQL("UPDATE sms SET reactions = NULL WHERE reactions NOT NULL")
db.execSQL("UPDATE mms SET reactions = NULL WHERE reactions NOT NULL")
}
if (oldVersion < PNI) {
db.execSQL("ALTER TABLE recipient ADD COLUMN pni TEXT DEFAULT NULL")
db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS recipient_pni_index ON recipient (pni)")
}
}
@JvmStatic

View File

@@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
import org.whispersystems.libsignal.util.guava.Optional
import org.whispersystems.signalservice.api.push.ACI
import org.whispersystems.signalservice.api.push.PNI
/**
* Database model for [RecipientDatabase].
@@ -28,6 +29,7 @@ import org.whispersystems.signalservice.api.push.ACI
data class RecipientRecord(
val id: RecipientId,
val aci: ACI?,
val pni: PNI?,
val username: String?,
val e164: String?,
val email: String?,