|
|
@ -217,7 +217,7 @@ private fun handleConfigurationMessage(message: ConfigurationMessage) {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// only handle new closed group if it's first time sync
|
|
|
|
// only handle new closed group if it's first time sync
|
|
|
|
handleNewClosedGroup(message.sender!!, message.sentTimestamp!!, closedGroup.publicKey, closedGroup.name,
|
|
|
|
handleNewClosedGroup(message.sender!!, message.sentTimestamp!!, closedGroup.publicKey, closedGroup.name,
|
|
|
|
closedGroup.encryptionKeyPair!!, closedGroup.members, closedGroup.admins, message.sentTimestamp!!)
|
|
|
|
closedGroup.encryptionKeyPair!!, closedGroup.members, closedGroup.admins, message.sentTimestamp!!, -1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val allV2OpenGroups = storage.getAllOpenGroups().map { it.value.joinURL }
|
|
|
|
val allV2OpenGroups = storage.getAllOpenGroups().map { it.value.joinURL }
|
|
|
@ -537,17 +537,20 @@ private fun ClosedGroupControlMessage.getPublicKey(): String = kind!!.let { when
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
|
|
|
|
|
|
|
|
private fun MessageReceiver.handleNewClosedGroup(message: ClosedGroupControlMessage) {
|
|
|
|
private fun MessageReceiver.handleNewClosedGroup(message: ClosedGroupControlMessage) {
|
|
|
|
|
|
|
|
val storage = MessagingModuleConfiguration.shared.storage
|
|
|
|
val kind = message.kind!! as? ClosedGroupControlMessage.Kind.New ?: return
|
|
|
|
val kind = message.kind!! as? ClosedGroupControlMessage.Kind.New ?: return
|
|
|
|
val recipient = Recipient.from(MessagingModuleConfiguration.shared.context, Address.fromSerialized(message.sender!!), false)
|
|
|
|
val recipient = Recipient.from(MessagingModuleConfiguration.shared.context, Address.fromSerialized(message.sender!!), false)
|
|
|
|
if (!recipient.isApproved && !recipient.isLocalNumber) return Log.e("Loki", "not accepting new closed group from unapproved recipient")
|
|
|
|
if (!recipient.isApproved && !recipient.isLocalNumber) return Log.e("Loki", "not accepting new closed group from unapproved recipient")
|
|
|
|
val groupPublicKey = kind.publicKey.toByteArray().toHexString()
|
|
|
|
val groupPublicKey = kind.publicKey.toByteArray().toHexString()
|
|
|
|
|
|
|
|
// hard code check by group public key in the big function because I can't be bothered to do group double decode re-encodej
|
|
|
|
|
|
|
|
if ((storage.getThreadIdFor(message.sender!!, groupPublicKey, null, false) ?: -1L) >= 0L) return
|
|
|
|
val members = kind.members.map { it.toByteArray().toHexString() }
|
|
|
|
val members = kind.members.map { it.toByteArray().toHexString() }
|
|
|
|
val admins = kind.admins.map { it.toByteArray().toHexString() }
|
|
|
|
val admins = kind.admins.map { it.toByteArray().toHexString() }
|
|
|
|
val expirationTimer = kind.expirationTimer
|
|
|
|
val expirationTimer = kind.expirationTimer
|
|
|
|
handleNewClosedGroup(message.sender!!, message.sentTimestamp!!, groupPublicKey, kind.name, kind.encryptionKeyPair!!, members, admins, message.sentTimestamp!!)
|
|
|
|
handleNewClosedGroup(message.sender!!, message.sentTimestamp!!, groupPublicKey, kind.name, kind.encryptionKeyPair!!, members, admins, message.sentTimestamp!!, expirationTimer)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPublicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: List<String>, admins: List<String>, formationTimestamp: Long) {
|
|
|
|
private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPublicKey: String, name: String, encryptionKeyPair: ECKeyPair, members: List<String>, admins: List<String>, formationTimestamp: Long, expirationTimer: Int) {
|
|
|
|
val context = MessagingModuleConfiguration.shared.context
|
|
|
|
val context = MessagingModuleConfiguration.shared.context
|
|
|
|
val storage = MessagingModuleConfiguration.shared.storage
|
|
|
|
val storage = MessagingModuleConfiguration.shared.storage
|
|
|
|
val userPublicKey = storage.getUserPublicKey()!!
|
|
|
|
val userPublicKey = storage.getUserPublicKey()!!
|
|
|
@ -587,7 +590,7 @@ private fun handleNewClosedGroup(sender: String, sentTimestamp: Long, groupPubli
|
|
|
|
storage.addClosedGroupPublicKey(groupPublicKey)
|
|
|
|
storage.addClosedGroupPublicKey(groupPublicKey)
|
|
|
|
// Store the encryption key pair
|
|
|
|
// Store the encryption key pair
|
|
|
|
storage.addClosedGroupEncryptionKeyPair(encryptionKeyPair, groupPublicKey, sentTimestamp)
|
|
|
|
storage.addClosedGroupEncryptionKeyPair(encryptionKeyPair, groupPublicKey, sentTimestamp)
|
|
|
|
storage.createInitialConfigGroup(groupPublicKey, name, GroupUtil.createConfigMemberMap(members, admins), formationTimestamp, encryptionKeyPair)
|
|
|
|
storage.createInitialConfigGroup(groupPublicKey, name, GroupUtil.createConfigMemberMap(members, admins), formationTimestamp, encryptionKeyPair, expirationTimer)
|
|
|
|
// Notify the PN server
|
|
|
|
// Notify the PN server
|
|
|
|
PushRegistryV1.register(device = MessagingModuleConfiguration.shared.device, publicKey = userPublicKey)
|
|
|
|
PushRegistryV1.register(device = MessagingModuleConfiguration.shared.device, publicKey = userPublicKey)
|
|
|
|
// Notify the user
|
|
|
|
// Notify the user
|
|
|
|