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 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 m = IncomingTextMessage(fromSerialized(senderPublicKey), 1, sentTimestamp, "", Optional.of(group), 0, true, false)
|
||||||
val updateData = UpdateMessageData.buildGroupUpdate(type, name, members)?.toJSON()
|
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()
|
val smsDB = DatabaseComponent.get(context).smsDatabase()
|
||||||
smsDB.insertMessageInbox(infoMessage, true)
|
smsDB.insertMessageInbox(infoMessage, true)
|
||||||
}
|
}
|
||||||
|
@ -1145,11 +1145,6 @@ open class Storage(
|
||||||
mmsDB.markAsSent(infoMessageID, true)
|
mmsDB.markAsSent(infoMessageID, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// override fun insertGroupUpdatedControlMessage(groupSessionId: SessionId,
|
|
||||||
// controlMessage) {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
override fun isLegacyClosedGroup(publicKey: String): Boolean {
|
override fun isLegacyClosedGroup(publicKey: String): Boolean {
|
||||||
return DatabaseComponent.get(context).lokiAPIDatabase().isClosedGroup(publicKey)
|
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>) {
|
override fun setServerCapabilities(server: String, capabilities: List<String>) {
|
||||||
return DatabaseComponent.get(context).lokiAPIDatabase().setServerCapabilities(server, capabilities)
|
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.Destination
|
||||||
import org.session.libsession.messaging.messages.Message
|
import org.session.libsession.messaging.messages.Message
|
||||||
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
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.control.MessageRequestResponse
|
||||||
import org.session.libsession.messaging.messages.visible.Attachment
|
import org.session.libsession.messaging.messages.visible.Attachment
|
||||||
import org.session.libsession.messaging.messages.visible.Profile
|
import org.session.libsession.messaging.messages.visible.Profile
|
||||||
|
@ -166,6 +167,7 @@ interface StorageProtocol {
|
||||||
fun getLibSessionClosedGroup(groupSessionId: String): GroupInfo.ClosedGroupInfo?
|
fun getLibSessionClosedGroup(groupSessionId: String): GroupInfo.ClosedGroupInfo?
|
||||||
fun getClosedGroupDisplayInfo(groupSessionId: String): GroupDisplayInfo?
|
fun getClosedGroupDisplayInfo(groupSessionId: String): GroupDisplayInfo?
|
||||||
fun inviteClosedGroupMembers(groupSessionId: String, invitees: List<String>)
|
fun inviteClosedGroupMembers(groupSessionId: String, invitees: List<String>)
|
||||||
|
fun insertGroupInfoChange(message: GroupUpdated, closedGroup: SessionId)
|
||||||
|
|
||||||
// Groups
|
// Groups
|
||||||
fun getAllGroups(includeInactive: Boolean): List<GroupRecord>
|
fun getAllGroups(includeInactive: Boolean): List<GroupRecord>
|
||||||
|
|
|
@ -2,12 +2,10 @@ package org.session.libsession.messaging.messages.signal;
|
||||||
|
|
||||||
public class IncomingGroupMessage extends IncomingTextMessage {
|
public class IncomingGroupMessage extends IncomingTextMessage {
|
||||||
|
|
||||||
private final String groupID;
|
|
||||||
private final boolean updateMessage;
|
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);
|
super(base, body);
|
||||||
this.groupID = groupID;
|
|
||||||
this.updateMessage = updateMessage;
|
this.updateMessage = updateMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,7 @@ private fun ClosedGroupControlMessage.getPublicKey(): String = kind!!.let { when
|
||||||
private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated, closedGroup: SessionId?) {
|
private fun MessageReceiver.handleGroupUpdated(message: GroupUpdated, closedGroup: SessionId?) {
|
||||||
val inner = message.inner
|
val inner = message.inner
|
||||||
if (closedGroup == null &&
|
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!")
|
throw NullPointerException("Message wasn't polled from a closed group!")
|
||||||
}
|
}
|
||||||
when {
|
when {
|
||||||
|
@ -552,7 +552,7 @@ private fun handleGroupInfoChange(message: GroupUpdated, closedGroup: SessionId)
|
||||||
verifyAdminSignature(closedGroup, adminSignature.toByteArray(), "INFO_CHANGE"+type+message.sentTimestamp!!)
|
verifyAdminSignature(closedGroup, adminSignature.toByteArray(), "INFO_CHANGE"+type+message.sentTimestamp!!)
|
||||||
val newName = if (infoChanged.hasUpdatedName()) infoChanged.updatedName else null
|
val newName = if (infoChanged.hasUpdatedName()) infoChanged.updatedName else null
|
||||||
val newExpiration = if (infoChanged.hasUpdatedExpiration()) infoChanged.updatedExpiration else null
|
val newExpiration = if (infoChanged.hasUpdatedExpiration()) infoChanged.updatedExpiration else null
|
||||||
// storage.insertIncomingInfoMessage()
|
storage.insertGroupInfoChange(message, closedGroup)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handlePromotionMessage(message: GroupUpdated) {
|
private fun handlePromotionMessage(message: GroupUpdated) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo
|
||||||
import com.fasterxml.jackson.core.JsonParseException
|
import com.fasterxml.jackson.core.JsonParseException
|
||||||
import org.session.libsession.messaging.messages.control.GroupUpdated
|
import org.session.libsession.messaging.messages.control.GroupUpdated
|
||||||
import org.session.libsignal.messages.SignalServiceGroup
|
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.JsonUtil
|
||||||
import org.session.libsignal.utilities.Log
|
import org.session.libsignal.utilities.Log
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
@ -22,10 +23,11 @@ class UpdateMessageData () {
|
||||||
JsonSubTypes.Type(Kind.GroupMemberAdded::class, name = "GroupMemberAdded"),
|
JsonSubTypes.Type(Kind.GroupMemberAdded::class, name = "GroupMemberAdded"),
|
||||||
JsonSubTypes.Type(Kind.GroupMemberRemoved::class, name = "GroupMemberRemoved"),
|
JsonSubTypes.Type(Kind.GroupMemberRemoved::class, name = "GroupMemberRemoved"),
|
||||||
JsonSubTypes.Type(Kind.GroupMemberLeft::class, name = "GroupMemberLeft"),
|
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() {
|
sealed class Kind {
|
||||||
class GroupCreation(): Kind()
|
data object GroupCreation: Kind()
|
||||||
class GroupNameChange(val name: String): Kind() {
|
class GroupNameChange(val name: String): Kind() {
|
||||||
constructor(): this("") //default constructor required for json serialization
|
constructor(): this("") //default constructor required for json serialization
|
||||||
}
|
}
|
||||||
|
@ -35,10 +37,12 @@ class UpdateMessageData () {
|
||||||
class GroupMemberRemoved(val updatedMembers: Collection<String>): Kind() {
|
class GroupMemberRemoved(val updatedMembers: Collection<String>): Kind() {
|
||||||
constructor(): this(Collections.emptyList())
|
constructor(): this(Collections.emptyList())
|
||||||
}
|
}
|
||||||
class GroupMemberLeft(): Kind()
|
data object GroupMemberLeft: Kind()
|
||||||
class GroupMemberUpdated(val sessionIds: List<String>, val type: MemberUpdateType?): Kind() {
|
class GroupMemberUpdated(val sessionIds: List<String>, val type: MemberUpdateType?): Kind() {
|
||||||
constructor(): this(emptyList(), null)
|
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() {
|
class OpenGroupInvitation(val groupUrl: String, val groupName: String): Kind() {
|
||||||
constructor(): this("", "")
|
constructor(): this("", "")
|
||||||
}
|
}
|
||||||
|
@ -59,26 +63,40 @@ class UpdateMessageData () {
|
||||||
|
|
||||||
fun buildGroupUpdate(type: SignalServiceGroup.Type, name: String, members: Collection<String>): UpdateMessageData? {
|
fun buildGroupUpdate(type: SignalServiceGroup.Type, name: String, members: Collection<String>): UpdateMessageData? {
|
||||||
return when(type) {
|
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.NAME_CHANGE -> UpdateMessageData(Kind.GroupNameChange(name))
|
||||||
SignalServiceGroup.Type.MEMBER_ADDED -> UpdateMessageData(Kind.GroupMemberAdded(members))
|
SignalServiceGroup.Type.MEMBER_ADDED -> UpdateMessageData(Kind.GroupMemberAdded(members))
|
||||||
SignalServiceGroup.Type.MEMBER_REMOVED -> UpdateMessageData(Kind.GroupMemberRemoved(members))
|
SignalServiceGroup.Type.MEMBER_REMOVED -> UpdateMessageData(Kind.GroupMemberRemoved(members))
|
||||||
SignalServiceGroup.Type.QUIT -> UpdateMessageData(Kind.GroupMemberLeft())
|
SignalServiceGroup.Type.QUIT -> UpdateMessageData(Kind.GroupMemberLeft)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildGroupUpdate(groupUpdated: GroupUpdated): UpdateMessageData? {
|
fun buildGroupUpdate(groupUpdated: GroupUpdated): UpdateMessageData? {
|
||||||
val inner = groupUpdated.inner
|
val inner = groupUpdated.inner
|
||||||
TODO()
|
return when {
|
||||||
// return when {
|
inner.hasMemberChangeMessage() -> {
|
||||||
// inner.hasMemberChangeMessage() -> {
|
val memberChange = inner.memberChangeMessage
|
||||||
// val memberChange = inner.memberChangeMessage
|
val type = when (memberChange.type) {
|
||||||
// val type = memberChange.type
|
Type.ADDED -> MemberUpdateType.ADDED
|
||||||
// memberChange.memberSessionIdsList
|
Type.PROMOTED -> MemberUpdateType.PROMOTED
|
||||||
// }
|
Type.REMOVED -> MemberUpdateType.REMOVED
|
||||||
// else -> null
|
}
|
||||||
// }
|
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 {
|
fun buildOpenGroupInvitation(url: String, name: String): UpdateMessageData {
|
||||||
|
|
Loading…
Reference in New Issue