[SES-3183] - Do not accept 1-to-1 disappearing messages in a group (#895)

pull/1709/head
SessionHero01 2 months ago committed by GitHub
parent 1b411ec2c1
commit 139dd2b307
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1108,7 +1108,10 @@ class GroupManagerV2Impl @Inject constructor(
override fun handleGroupInfoChange(message: GroupUpdated, groupId: AccountId) {
if (message.inner.hasInfoChangeMessage() && message.inner.infoChangeMessage.hasUpdatedExpiration()) {
// If we receive a disappearing message update, we need to remove the existing timer control message
storage.deleteGroupInfoMessages(groupId, UpdateMessageData.Kind.GroupExpirationUpdated::class.java)
storage.deleteGroupInfoMessages(
groupId,
UpdateMessageData.Kind.GroupExpirationUpdated::class.java
)
}
storage.insertGroupInfoChange(message, groupId)

@ -1,15 +1,11 @@
package org.session.libsession.messaging.jobs
import com.google.protobuf.ByteString
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.runBlocking
import network.loki.messenger.libsession_util.ConfigBase
import nl.komponents.kovenant.Promise
import nl.komponents.kovenant.task
import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.messaging.messages.Destination
import org.session.libsession.messaging.messages.Message
@ -233,7 +229,7 @@ class BatchMessageReceiveJob(
proto = proto,
threadId = threadId,
openGroupID = openGroupID,
closedGroup = parameters.closedGroup?.publicKey?.let(::AccountId)
groupv2Id = parameters.closedGroup?.publicKey?.let(::AccountId)
)
}
} catch (e: Exception) {

@ -57,7 +57,6 @@ import org.session.libsignal.crypto.ecc.DjbECPublicKey
import org.session.libsignal.crypto.ecc.ECKeyPair
import org.session.libsignal.messages.SignalServiceGroup
import org.session.libsignal.protos.SignalServiceProtos
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.LokiProfile
import org.session.libsignal.protos.SignalServiceProtos.SharedConfigMessage
import org.session.libsignal.utilities.AccountId
import org.session.libsignal.utilities.Base64
@ -77,7 +76,7 @@ internal fun MessageReceiver.isBlocked(publicKey: String): Boolean {
return recipient.isBlocked
}
fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?, closedGroup: AccountId?) {
fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, threadId: Long, openGroupID: String?, groupv2Id: AccountId?) {
// Do nothing if the message was outdated
if (MessageReceiver.messageIsOutdated(message, threadId, openGroupID)) { return }
@ -85,8 +84,16 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content,
is ReadReceipt -> handleReadReceipt(message)
is TypingIndicator -> handleTypingIndicator(message)
is ClosedGroupControlMessage -> handleClosedGroupControlMessage(message)
is GroupUpdated -> handleGroupUpdated(message, closedGroup)
is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message)
is GroupUpdated -> handleGroupUpdated(message, groupv2Id)
is ExpirationTimerUpdate -> {
// For groupsv2, there are dedicated mechanisms for handling expiration timers, and
// we want to avoid the 1-to-1 message format which is unauthenticated in a group settings.
if (groupv2Id != null) {
Log.d("MessageReceiver", "Ignoring expiration timer update for closed group")
} else {
handleExpirationTimerUpdate(message)
}
}
is DataExtractionNotification -> handleDataExtractionNotification(message)
is ConfigurationMessage -> handleConfigurationMessage(message)
is UnsendRequest -> handleUnsendRequest(message)

Loading…
Cancel
Save