fix: boolean logic for denying closed group messages
This commit is contained in:
parent
06b879057f
commit
cb5d9c9627
|
@ -1127,7 +1127,7 @@ open class Storage(
|
|||
val group = SignalServiceGroup(type, GroupUtil.getDecodedGroupIDAsData(groupID), SignalServiceGroup.GroupType.SIGNAL, name, members.toList(), null, admins.toList())
|
||||
val m = IncomingTextMessage(fromSerialized(senderPublicKey), 1, sentTimestamp, "", Optional.of(group), 0, true, false)
|
||||
val updateData = UpdateMessageData.buildGroupUpdate(type, name, members)?.toJSON()
|
||||
val infoMessage = IncomingGroupMessage(m, groupID, updateData, true)
|
||||
val infoMessage = IncomingGroupMessage(m, updateData, true)
|
||||
val smsDB = DatabaseComponent.get(context).smsDatabase()
|
||||
smsDB.insertMessageInbox(infoMessage, true)
|
||||
}
|
||||
|
@ -1145,11 +1145,6 @@ open class Storage(
|
|||
mmsDB.markAsSent(infoMessageID, true)
|
||||
}
|
||||
|
||||
// override fun insertGroupUpdatedControlMessage(groupSessionId: SessionId,
|
||||
// controlMessage) {
|
||||
//
|
||||
// }
|
||||
|
||||
override fun isLegacyClosedGroup(publicKey: String): Boolean {
|
||||
return DatabaseComponent.get(context).lokiAPIDatabase().isClosedGroup(publicKey)
|
||||
}
|
||||
|
@ -1370,6 +1365,17 @@ open class Storage(
|
|||
|
||||
}
|
||||
|
||||
override fun insertGroupInfoChange(message: GroupUpdated, closedGroup: SessionId) {
|
||||
val sentTimestamp = message.sentTimestamp ?: return
|
||||
val senderPublicKey = message.sender ?: return
|
||||
val group = SignalServiceGroup(Hex.fromStringCondensed(closedGroup.hexString()), SignalServiceGroup.GroupType.SIGNAL)
|
||||
val m = IncomingTextMessage(fromSerialized(senderPublicKey), 1, sentTimestamp, "", Optional.of(group), 0, true, false)
|
||||
val updateData = UpdateMessageData.buildGroupUpdate(message)?.toJSON() ?: return
|
||||
val infoMessage = IncomingGroupMessage(m, updateData, true)
|
||||
val smsDB = DatabaseComponent.get(context).smsDatabase()
|
||||
smsDB.insertMessageInbox(infoMessage, true)
|
||||
}
|
||||
|
||||
override fun setServerCapabilities(server: String, capabilities: List<String>) {
|
||||
return DatabaseComponent.get(context).lokiAPIDatabase().setServerCapabilities(server, capabilities)
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.session.libsession.messaging.jobs.MessageSendJob
|
|||
import org.session.libsession.messaging.messages.Destination
|
||||
import org.session.libsession.messaging.messages.Message
|
||||
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
||||
import org.session.libsession.messaging.messages.control.GroupUpdated
|
||||
import org.session.libsession.messaging.messages.control.MessageRequestResponse
|
||||
import org.session.libsession.messaging.messages.visible.Attachment
|
||||
import org.session.libsession.messaging.messages.visible.Profile
|
||||
|
@ -166,6 +167,7 @@ interface StorageProtocol {
|
|||
fun getLibSessionClosedGroup(groupSessionId: String): GroupInfo.ClosedGroupInfo?
|
||||
fun getClosedGroupDisplayInfo(groupSessionId: String): GroupDisplayInfo?
|
||||
fun inviteClosedGroupMembers(groupSessionId: String, invitees: List<String>)
|
||||
fun insertGroupInfoChange(message: GroupUpdated, closedGroup: SessionId)
|
||||
|
||||
// Groups
|
||||
fun getAllGroups(includeInactive: Boolean): List<GroupRecord>
|
||||
|
|
|
@ -2,12 +2,10 @@ package org.session.libsession.messaging.messages.signal;
|
|||
|
||||
public class IncomingGroupMessage extends IncomingTextMessage {
|
||||
|
||||
private final String groupID;
|
||||
private final boolean updateMessage;
|
||||
|
||||
public IncomingGroupMessage(IncomingTextMessage base, String groupID, String body, boolean updateMessage) {
|
||||
public IncomingGroupMessage(IncomingTextMessage base, String body, boolean updateMessage) {
|
||||
super(base, body);
|
||||
this.groupID = groupID;
|
||||
this.updateMessage = updateMessage;
|
||||
}
|
||||
|
||||
|
|
|
@ -530,7 +530,7 @@ private fun ClosedGroupControlMessage.getPublicKey(): String = kind!!.let { when
|
|||
private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated, closedGroup: SessionId?) {
|
||||
val inner = message.inner
|
||||
if (closedGroup == null &&
|
||||
(!inner.hasInviteMessage()) || !inner.hasPromoteMessage()) { // TODO: add all the cases for this
|
||||
!inner.hasInviteMessage() && !inner.hasPromoteMessage()) {
|
||||
throw NullPointerException("Message wasn't polled from a closed group!")
|
||||
}
|
||||
when {
|
||||
|
@ -552,7 +552,7 @@ private fun handleGroupInfoChange(message: GroupUpdated, closedGroup: SessionId)
|
|||
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
|
||||
// storage.insertIncomingInfoMessage()
|
||||
storage.insertGroupInfoChange(message, closedGroup)
|
||||
}
|
||||
|
||||
private fun handlePromotionMessage(message: GroupUpdated) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo
|
|||
import com.fasterxml.jackson.core.JsonParseException
|
||||
import org.session.libsession.messaging.messages.control.GroupUpdated
|
||||
import org.session.libsignal.messages.SignalServiceGroup
|
||||
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMemberChangeMessage.Type
|
||||
import org.session.libsignal.utilities.JsonUtil
|
||||
import org.session.libsignal.utilities.Log
|
||||
import java.util.Collections
|
||||
|
@ -22,10 +23,11 @@ class UpdateMessageData () {
|
|||
JsonSubTypes.Type(Kind.GroupMemberAdded::class, name = "GroupMemberAdded"),
|
||||
JsonSubTypes.Type(Kind.GroupMemberRemoved::class, name = "GroupMemberRemoved"),
|
||||
JsonSubTypes.Type(Kind.GroupMemberLeft::class, name = "GroupMemberLeft"),
|
||||
JsonSubTypes.Type(Kind.OpenGroupInvitation::class, name = "OpenGroupInvitation")
|
||||
JsonSubTypes.Type(Kind.OpenGroupInvitation::class, name = "OpenGroupInvitation"),
|
||||
JsonSubTypes.Type(Kind.GroupAvatarUpdated::class, name = "GroupAvatarUpdated")
|
||||
)
|
||||
sealed class Kind() {
|
||||
class GroupCreation(): Kind()
|
||||
sealed class Kind {
|
||||
data object GroupCreation: Kind()
|
||||
class GroupNameChange(val name: String): Kind() {
|
||||
constructor(): this("") //default constructor required for json serialization
|
||||
}
|
||||
|
@ -35,10 +37,12 @@ class UpdateMessageData () {
|
|||
class GroupMemberRemoved(val updatedMembers: Collection<String>): Kind() {
|
||||
constructor(): this(Collections.emptyList())
|
||||
}
|
||||
class GroupMemberLeft(): Kind()
|
||||
data object GroupMemberLeft: Kind()
|
||||
class GroupMemberUpdated(val sessionIds: List<String>, val type: MemberUpdateType?): Kind() {
|
||||
constructor(): this(emptyList(), null)
|
||||
}
|
||||
data object GroupAvatarUpdated: Kind()
|
||||
class GroupExpiryUpdated @JvmOverloads constructor(val newExpiry: Int = 0): Kind()
|
||||
class OpenGroupInvitation(val groupUrl: String, val groupName: String): Kind() {
|
||||
constructor(): this("", "")
|
||||
}
|
||||
|
@ -59,26 +63,40 @@ class UpdateMessageData () {
|
|||
|
||||
fun buildGroupUpdate(type: SignalServiceGroup.Type, name: String, members: Collection<String>): UpdateMessageData? {
|
||||
return when(type) {
|
||||
SignalServiceGroup.Type.CREATION -> UpdateMessageData(Kind.GroupCreation())
|
||||
SignalServiceGroup.Type.CREATION -> UpdateMessageData(Kind.GroupCreation)
|
||||
SignalServiceGroup.Type.NAME_CHANGE -> UpdateMessageData(Kind.GroupNameChange(name))
|
||||
SignalServiceGroup.Type.MEMBER_ADDED -> UpdateMessageData(Kind.GroupMemberAdded(members))
|
||||
SignalServiceGroup.Type.MEMBER_REMOVED -> UpdateMessageData(Kind.GroupMemberRemoved(members))
|
||||
SignalServiceGroup.Type.QUIT -> UpdateMessageData(Kind.GroupMemberLeft())
|
||||
SignalServiceGroup.Type.QUIT -> UpdateMessageData(Kind.GroupMemberLeft)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
fun buildGroupUpdate(groupUpdated: GroupUpdated): UpdateMessageData? {
|
||||
val inner = groupUpdated.inner
|
||||
TODO()
|
||||
// return when {
|
||||
// inner.hasMemberChangeMessage() -> {
|
||||
// val memberChange = inner.memberChangeMessage
|
||||
// val type = memberChange.type
|
||||
// memberChange.memberSessionIdsList
|
||||
// }
|
||||
// else -> null
|
||||
// }
|
||||
return when {
|
||||
inner.hasMemberChangeMessage() -> {
|
||||
val memberChange = inner.memberChangeMessage
|
||||
val type = when (memberChange.type) {
|
||||
Type.ADDED -> MemberUpdateType.ADDED
|
||||
Type.PROMOTED -> MemberUpdateType.PROMOTED
|
||||
Type.REMOVED -> MemberUpdateType.REMOVED
|
||||
}
|
||||
val members = memberChange.memberSessionIdsList
|
||||
UpdateMessageData(Kind.GroupMemberUpdated(members, type))
|
||||
}
|
||||
inner.hasInfoChangeMessage() -> {
|
||||
val infoChange = inner.infoChangeMessage
|
||||
val type = infoChange.type
|
||||
TODO()
|
||||
// when (type) {
|
||||
// GroupUpdateInfoChangeMessage.Type.NAME -> Kind.GroupNameChange(infoChange.updatedName)
|
||||
// GroupUpdateInfoChangeMessage.Type.AVATAR -> Kind.GroupAvatarUpdated
|
||||
// // GroupUpdateInfoChangeMessage.Type.DISAPPEARING_MESSAGES -> Kind.GroupExpirationUpdated(infoChange.updatedExpiration)
|
||||
// }
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
fun buildOpenGroupInvitation(url: String, name: String): UpdateMessageData {
|
||||
|
|
Loading…
Reference in New Issue