From e4ac5f6c1325e38a2a64d8abfc63ba3b8934f4eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 24 Mar 2021 13:45:15 +0100 Subject: [PATCH] crypto: Don't track users on the kotlin side of things --- .../internal/crypto/DefaultCryptoService.kt | 48 +++---------------- .../session/sync/CryptoSyncHandler.kt | 4 +- .../session/sync/SyncResponseHandler.kt | 2 +- 3 files changed, 9 insertions(+), 45 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 8a0b344445..936d3fb5cb 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -440,22 +440,16 @@ internal class DefaultCryptoService @Inject constructor( /** * A sync response has been received - * - * @param syncResponse the syncResponse */ - suspend fun onSyncCompleted(syncResponse: SyncResponse) { + suspend fun onSyncCompleted() { if (isStarted()) { sendOutgoingRequests() } cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { runCatching { - if (syncResponse.deviceLists != null) { - deviceListManager.handleDeviceListsChanges(syncResponse.deviceLists.changed, syncResponse.deviceLists.left) - } if (isStarted()) { // Make sure we process to-device messages before generating new one-time-keys #2782 - deviceListManager.refreshOutdatedDeviceLists() incomingGossipingRequestManager.processReceivedGossipingRequests() } } @@ -566,13 +560,11 @@ internal class DefaultCryptoService @Inject constructor( * * @param roomId the room id to enable encryption in. * @param algorithm the encryption config for the room. - * @param inhibitDeviceQuery true to suppress device list query for users in the room (for now) * @param membersId list of members to start tracking their devices * @return true if the operation succeeds. */ private suspend fun setEncryptionInRoom(roomId: String, algorithm: String?, - inhibitDeviceQuery: Boolean, membersId: List): Boolean { // If we already have encryption in this room, we should ignore this event // (for now at least. Maybe we should alert the user somehow?) @@ -608,12 +600,7 @@ internal class DefaultCryptoService @Inject constructor( Timber.v("Enabling encryption in $roomId for the first time; invalidating device lists for all users therein") val userIds = ArrayList(membersId) - - deviceListManager.startTrackingDeviceList(userIds) - - if (!inhibitDeviceQuery) { - deviceListManager.refreshOutdatedDeviceLists() - } + olmMachine!!.updateTrackedUsers(userIds) } return true @@ -675,7 +662,7 @@ internal class DefaultCryptoService @Inject constructor( if (alg == null) { val algorithm = getEncryptionAlgorithm(roomId) if (algorithm != null) { - if (setEncryptionInRoom(roomId, algorithm, false, userIds)) { + if (setEncryptionInRoom(roomId, algorithm, userIds)) { alg = roomEncryptorsStore.get(roomId) } } @@ -889,7 +876,7 @@ internal class DefaultCryptoService @Inject constructor( } finally { val userIds = getRoomUserIds(roomId) olmMachine!!.updateTrackedUsers(userIds) - setEncryptionInRoom(roomId, event.content?.get("algorithm")?.toString(), true, userIds) + setEncryptionInRoom(roomId, event.content?.get("algorithm")?.toString(), userIds) } } } @@ -912,9 +899,8 @@ internal class DefaultCryptoService @Inject constructor( val roomMember: RoomMemberContent? = event.content.toModel() val membership = roomMember?.membership if (membership == Membership.JOIN) { - olmMachine!!.updateTrackedUsers(listOf(userId)) // make sure we are tracking the deviceList for this user. - deviceListManager.startTrackingDeviceList(listOf(userId)) + olmMachine!!.updateTrackedUsers(listOf(userId)) } else if (membership == Membership.INVITE && shouldEncryptForInvitedMembers(roomId) && isEncryptionEnabledForInvitedUser()) { @@ -923,7 +909,7 @@ internal class DefaultCryptoService @Inject constructor( // know what other servers are in the room at the time they've been invited. // They therefore will not send device updates if a user logs in whilst // their state is invite. - deviceListManager.startTrackingDeviceList(listOf(userId)) + olmMachine!!.updateTrackedUsers(listOf(userId)) } } } @@ -1130,28 +1116,6 @@ internal class DefaultCryptoService @Inject constructor( warnOnUnknownDevicesRepository.setWarnOnUnknownDevices(warn) } - /** - * Check if the user ids list have some unknown devices. - * A success means there is no unknown devices. - * If there are some unknown devices, a MXCryptoError.UnknownDevice exception is triggered. - * - * @param userIds the user ids list - * @param callback the asynchronous callback. - */ - fun checkUnknownDevices(userIds: List, callback: MatrixCallback) { - // force the refresh to ensure that the devices list is up-to-date - cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { - runCatching { - val keys = deviceListManager.downloadKeys(userIds, true) - val unknownDevices = getUnknownDevices(keys) - if (unknownDevices.map.isNotEmpty()) { - // trigger an an unknown devices exception - throw Failure.CryptoError(MXCryptoError.UnknownDevice(unknownDevices)) - } - }.foldToCallback(callback) - } - } - /** * Set the global override for whether the client should ever send encrypted * messages to unverified devices. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt index 1e08b86d4b..9d3328eb43 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt @@ -52,8 +52,8 @@ internal class CryptoSyncHandler @Inject constructor(private val cryptoService: } } - suspend fun onSyncCompleted(syncResponse: SyncResponse) { - cryptoService.onSyncCompleted(syncResponse) + suspend fun onSyncCompleted() { + cryptoService.onSyncCompleted() } /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index e306c1ad4c..b456f87648 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -127,7 +127,7 @@ internal class SyncResponseHandler @Inject constructor(@SessionDatabase private } Timber.v("On sync completed") - cryptoSyncHandler.onSyncCompleted(syncResponse) + cryptoSyncHandler.onSyncCompleted() } /**