From 2bb3dda103256da64917dd57af6d7d11e15f5aad Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Thu, 23 Nov 2023 11:42:15 +1100 Subject: [PATCH] feat: adding in new closed group message handling logic --- .../ReceivedMessageHandler.kt | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 4e7970848..38b79ff85 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -528,15 +528,41 @@ private fun ClosedGroupControlMessage.getPublicKey(): String = kind!!.let { when }} private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated, closedGroup: SessionId?) { - if (closedGroup == null && !message.inner.hasInviteMessage()) { // TODO: add all the cases for this + val inner = message.inner + if (closedGroup == null && + (!inner.hasInviteMessage()) || !inner.hasPromoteMessage()) { // TODO: add all the cases for this throw NullPointerException("Message wasn't polled from a closed group!") } when { - message.inner.hasInviteMessage() -> handleNewLibSessionClosedGroupMessage(message) - message.inner.hasInviteResponse() -> handleInviteResponse(message, closedGroup!!) + inner.hasInviteMessage() -> handleNewLibSessionClosedGroupMessage(message) + inner.hasInviteResponse() -> handleInviteResponse(message, closedGroup!!) + inner.hasPromoteMessage() -> handlePromotionMessage(message) + inner.hasInfoChangeMessage() -> handleGroupInfoChange(message, closedGroup!!) } } +private fun handleGroupInfoChange(message: GroupUpdated, closedGroup: SessionId) { + val sender = message.sender!! + val storage = MessagingModuleConfiguration.shared.storage + val inner = message.inner + val infoChanged = inner.infoChangeMessage ?: return + if (!infoChanged.hasAdminSignature()) return Log.e("GroupUpdated", "Info changed message doesn't contain admin signature") + val adminSignature = infoChanged.adminSignature + val type = infoChanged.type.name + verifyAdminSignature(closedGroup, adminSignature.toByteArray(), "INFO_CHANGE"+type+message.sentTimestamp!!) + val newName = if (infoChanged.hasUpdatedName()) infoChanged.updatedName else null + val newExpiration = if (infoChanged.hasUpdatedExpiration()) infoChanged.updatedExpiration else null + // insert control messages +} + +private fun handlePromotionMessage(message: GroupUpdated) { + val sender = message.sender!! + val storage = MessagingModuleConfiguration.shared.storage + val inner = message.inner + // insert control messages + +} + private fun MessageReceiver.handleInviteResponse(message: GroupUpdated, closedGroup: SessionId) { val sender = message.sender!! // val profile = message // maybe we do need data to be the inner so we can access profile