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

pull/1709/head
SessionHero01 12 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) { override fun handleGroupInfoChange(message: GroupUpdated, groupId: AccountId) {
if (message.inner.hasInfoChangeMessage() && message.inner.infoChangeMessage.hasUpdatedExpiration()) { if (message.inner.hasInfoChangeMessage() && message.inner.infoChangeMessage.hasUpdatedExpiration()) {
// If we receive a disappearing message update, we need to remove the existing timer control message // 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) storage.insertGroupInfoChange(message, groupId)

@ -1,15 +1,11 @@
package org.session.libsession.messaging.jobs package org.session.libsession.messaging.jobs
import com.google.protobuf.ByteString import com.google.protobuf.ByteString
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.runBlocking
import network.loki.messenger.libsession_util.ConfigBase 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.MessagingModuleConfiguration
import org.session.libsession.messaging.messages.Destination import org.session.libsession.messaging.messages.Destination
import org.session.libsession.messaging.messages.Message import org.session.libsession.messaging.messages.Message
@ -233,7 +229,7 @@ class BatchMessageReceiveJob(
proto = proto, proto = proto,
threadId = threadId, threadId = threadId,
openGroupID = openGroupID, openGroupID = openGroupID,
closedGroup = parameters.closedGroup?.publicKey?.let(::AccountId) groupv2Id = parameters.closedGroup?.publicKey?.let(::AccountId)
) )
} }
} catch (e: Exception) { } 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.crypto.ecc.ECKeyPair
import org.session.libsignal.messages.SignalServiceGroup import org.session.libsignal.messages.SignalServiceGroup
import org.session.libsignal.protos.SignalServiceProtos 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.protos.SignalServiceProtos.SharedConfigMessage
import org.session.libsignal.utilities.AccountId import org.session.libsignal.utilities.AccountId
import org.session.libsignal.utilities.Base64 import org.session.libsignal.utilities.Base64
@ -77,7 +76,7 @@ internal fun MessageReceiver.isBlocked(publicKey: String): Boolean {
return recipient.isBlocked 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 // Do nothing if the message was outdated
if (MessageReceiver.messageIsOutdated(message, threadId, openGroupID)) { return } if (MessageReceiver.messageIsOutdated(message, threadId, openGroupID)) { return }
@ -85,8 +84,16 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content,
is ReadReceipt -> handleReadReceipt(message) is ReadReceipt -> handleReadReceipt(message)
is TypingIndicator -> handleTypingIndicator(message) is TypingIndicator -> handleTypingIndicator(message)
is ClosedGroupControlMessage -> handleClosedGroupControlMessage(message) is ClosedGroupControlMessage -> handleClosedGroupControlMessage(message)
is GroupUpdated -> handleGroupUpdated(message, closedGroup) is GroupUpdated -> handleGroupUpdated(message, groupv2Id)
is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message) 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 DataExtractionNotification -> handleDataExtractionNotification(message)
is ConfigurationMessage -> handleConfigurationMessage(message) is ConfigurationMessage -> handleConfigurationMessage(message)
is UnsendRequest -> handleUnsendRequest(message) is UnsendRequest -> handleUnsendRequest(message)

Loading…
Cancel
Save