feat: adding in new closed group message handling logic

This commit is contained in:
0x330a 2023-11-23 11:42:15 +11:00
parent 5ed8f70fa6
commit 2bb3dda103
No known key found for this signature in database
GPG Key ID: 267811D6E6A2698C
1 changed files with 29 additions and 3 deletions

View File

@ -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