Skip to content

Commit 7caccd3

Browse files
committed
Add more admin delete checks.
1 parent ef6c69a commit 7caccd3

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,24 +1448,37 @@ object DataMessageProcessor {
14481448
val targetAuthor = Recipient.externalPush(targetAuthorServiceId)
14491449

14501450
val targetMessage: MessageRecord? = SignalDatabase.messages.getMessageFor(targetSentTimestamp, targetAuthor.id)
1451+
if (targetMessage == null) {
1452+
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Could not find matching message! timestamp: $targetSentTimestamp")
1453+
if (earlyMessageCacheEntry != null) {
1454+
AppDependencies.earlyMessageCache.store(targetAuthor.id, targetSentTimestamp, earlyMessageCacheEntry)
1455+
PushProcessEarlyMessagesJob.enqueue()
1456+
}
1457+
return null
1458+
}
14511459

1452-
val groupRecord = SignalDatabase.groups.getGroup(threadRecipient.id).orNull()
1460+
val targetThread = SignalDatabase.threads.getThreadRecord(targetMessage.threadId)
1461+
if (targetThread == null) {
1462+
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Could not find a thread for the message! timestamp: $targetSentTimestamp author: ${targetAuthor.id}")
1463+
return null
1464+
}
1465+
1466+
val targetThreadRecipientId = targetThread.recipient.id
1467+
if (targetThreadRecipientId != threadRecipient.id) {
1468+
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Target message is in a different thread than the admin delete! timestamp: $targetSentTimestamp")
1469+
return null
1470+
}
1471+
1472+
val groupRecord = SignalDatabase.groups.getGroup(targetThreadRecipientId).orNull()
14531473
if (groupRecord == null || !groupRecord.isV2Group) {
14541474
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Invalid group.")
14551475
return null
14561476
}
14571477

1458-
return if (targetMessage != null && MessageConstraintsUtil.isValidAdminDeleteReceive(targetMessage, senderRecipient, envelope.serverTimestamp!!, groupRecord)) {
1478+
return if (MessageConstraintsUtil.isValidAdminDeleteReceive(targetMessage, senderRecipient, envelope.serverTimestamp!!, groupRecord)) {
14591479
SignalDatabase.messages.markAsRemoteDelete(targetMessage, senderRecipient.id)
14601480
AppDependencies.messageNotifier.updateNotification(context, ConversationId.fromMessageRecord(targetMessage))
14611481
MessageId(targetMessage.id)
1462-
} else if (targetMessage == null) {
1463-
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Could not find matching message! timestamp: $targetSentTimestamp")
1464-
if (earlyMessageCacheEntry != null) {
1465-
AppDependencies.earlyMessageCache.store(targetAuthor.id, targetSentTimestamp, earlyMessageCacheEntry)
1466-
PushProcessEarlyMessagesJob.enqueue()
1467-
}
1468-
null
14691482
} else {
14701483
warn(envelope.timestamp!!, "[handleAdminRemoteDelete] Invalid admin delete! deleteTime: ${envelope.serverTimestamp!!}, targetTime: ${targetMessage.serverTimestamp}, deleteAuthor: ${senderRecipient.id}, targetAuthor: ${targetMessage.fromRecipient.id}, isAdmin: ${groupRecord.isAdmin(senderRecipient)}")
14711484
null

app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1293,7 +1293,7 @@ object RemoteConfig {
12931293
@JvmStatic
12941294
@get:JvmName("receiveAdminDelete")
12951295
val receiveAdminDelete: Boolean by remoteBoolean(
1296-
key = "android.receiveAdminDelete.2",
1296+
key = "android.receiveAdminDelete.3",
12971297
defaultValue = false,
12981298
hotSwappable = true
12991299
)

0 commit comments

Comments
 (0)