diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt index d4cced50ea..f7634cc152 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt @@ -288,31 +288,27 @@ internal class DefaultSasVerificationService @Inject constructor( if (startReq?.isValid()?.not() == true) { Timber.e("## received invalid verification request") if (startReq.transactionID != null) { - sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", event.roomId - ?: "", null).cancelTransaction( - startReq.transactionID ?: "", - otherUserId!!, - startReq.fromDevice ?: event.getSenderKey()!!, - CancelCode.UnknownMethod - ) + sasTransportRoomMessageFactory.createTransport(event.roomId ?: "", null) + .cancelTransaction( + startReq.transactionID ?: "", + otherUserId!!, + startReq.fromDevice ?: event.getSenderKey()!!, + CancelCode.UnknownMethod + ) } return } handleStart(otherUserId, startReq as VerificationInfoStart) { - it.transport = sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", event.roomId - ?: "", it) + it.transport = sasTransportRoomMessageFactory.createTransport(event.roomId ?: "", it) }?.let { - sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", event.roomId - ?: "", null).cancelTransaction( - startReq.transactionID ?: "", - otherUserId!!, - startReq.fromDevice ?: event.getSenderKey()!!, - it - ) + sasTransportRoomMessageFactory.createTransport(event.roomId ?: "", null) + .cancelTransaction( + startReq.transactionID ?: "", + otherUserId!!, + startReq.fromDevice ?: event.getSenderKey()!!, + it + ) } } @@ -729,8 +725,7 @@ internal class DefaultSasVerificationService @Inject constructor( pendingRequests[userId] = it } - val transport = sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", roomId, null) + val transport = sasTransportRoomMessageFactory.createTransport(roomId, null) // Cancel existing pending requests? requestsForUser.forEach { existingRequest -> @@ -767,8 +762,8 @@ internal class DefaultSasVerificationService @Inject constructor( } override fun declineVerificationRequestInDMs(otherUserId: String, otherDeviceId: String, transactionId: String, roomId: String) { - sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", roomId, null).cancelTransaction(transactionId, otherUserId, otherDeviceId, CancelCode.User) + sasTransportRoomMessageFactory.createTransport(roomId, null) + .cancelTransaction(transactionId, otherUserId, otherDeviceId, CancelCode.User) getExistingVerificationRequest(otherUserId, transactionId)?.let { updatePendingRequest(it.copy( @@ -805,8 +800,7 @@ internal class DefaultSasVerificationService @Inject constructor( transactionId, otherUserId, otherDeviceId) - tx.transport = sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", roomId, tx) + tx.transport = sasTransportRoomMessageFactory.createTransport(roomId, tx) addTransaction(tx) tx.start() @@ -822,8 +816,7 @@ internal class DefaultSasVerificationService @Inject constructor( val existingRequest = getExistingVerificationRequest(otherUserId, transactionId) if (existingRequest != null) { // we need to send a ready event, with matching methods - val transport = sasTransportRoomMessageFactory.createTransport(credentials.userId, credentials.deviceId - ?: "", roomId, null) + val transport = sasTransportRoomMessageFactory.createTransport(roomId, null) val methods = existingRequest.requestInfo?.methods?.intersect(listOf(KeyVerificationStart.VERIF_METHOD_SAS))?.toList() if (methods.isNullOrEmpty()) { Timber.i("Cannot ready this request, no common methods found txId:$transactionId") diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransport.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransport.kt index 60e0204800..a9ce2b3abc 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransport.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransport.kt @@ -36,7 +36,7 @@ internal interface SasTransport { fun sendVerificationRequest(localID: String, otherUserId: String, roomId: String, callback: (String?, MessageVerificationRequestContent?) -> Unit) - fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDevice: String, code: CancelCode) + fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDeviceId: String, code: CancelCode) fun done(transactionId: String) /** diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt index 20c59def18..dcd84030a7 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportRoomMessage.kt @@ -26,6 +26,9 @@ import im.vector.matrix.android.api.session.events.model.* import im.vector.matrix.android.api.session.room.model.message.* import im.vector.matrix.android.api.session.room.model.relation.RelationDefaultContent import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationStart +import im.vector.matrix.android.internal.di.DeviceId +import im.vector.matrix.android.internal.di.SessionId +import im.vector.matrix.android.internal.di.UserId import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory import im.vector.matrix.android.internal.worker.WorkManagerUtil import im.vector.matrix.android.internal.worker.WorkerParamsFactory @@ -39,8 +42,9 @@ import javax.inject.Inject internal class SasTransportRoomMessage( private val context: Context, + private val sessionId: String, private val userId: String, - private val userDevice: String, + private val userDeviceId: String?, private val roomId: String, private val monarchy: Monarchy, private val localEchoEventFactory: LocalEchoEventFactory, @@ -61,7 +65,7 @@ internal class SasTransportRoomMessage( ) val workerParams = WorkerParamsFactory.toData(SendVerificationMessageWorker.Params( - userId = userId, + sessionId = sessionId, event = event )) val enqueueInfo = enqueueSendWork(workerParams) @@ -113,11 +117,13 @@ internal class SasTransportRoomMessage( } } - override fun sendVerificationRequest(localID: String, otherUserId: String, roomId: String, + override fun sendVerificationRequest(localID: String, + otherUserId: String, + roomId: String, callback: (String?, MessageVerificationRequestContent?) -> Unit) { val info = MessageVerificationRequestContent( body = context.getString(R.string.key_verification_request_fallback_message, userId), - fromDevice = userDevice, + fromDevice = userDeviceId ?: "", toUserId = otherUserId, methods = listOf(KeyVerificationStart.VERIF_METHOD_SAS) ) @@ -131,7 +137,7 @@ internal class SasTransportRoomMessage( ) val workerParams = WorkerParamsFactory.toData(SendVerificationMessageWorker.Params( - userId = userId, + sessionId = sessionId, event = event )) @@ -174,7 +180,7 @@ internal class SasTransportRoomMessage( } } - override fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDevice: String, code: CancelCode) { + override fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDeviceId: String, code: CancelCode) { Timber.d("## SAS canceling transaction $transactionId for reason $code") val event = createEventAndLocalEcho( type = EventType.KEY_VERIFICATION_CANCEL, @@ -182,7 +188,7 @@ internal class SasTransportRoomMessage( content = MessageVerificationCancelContent.create(transactionId, code).toContent() ) val workerParams = WorkerParamsFactory.toData(SendVerificationMessageWorker.Params( - userId = this.userId, + sessionId = sessionId, event = event )) enqueueSendWork(workerParams) @@ -200,7 +206,7 @@ internal class SasTransportRoomMessage( ).toContent() ) val workerParams = WorkerParamsFactory.toData(SendVerificationMessageWorker.Params( - userId = userId, + sessionId = sessionId, event = event )) enqueueSendWork(workerParams) @@ -286,10 +292,15 @@ internal class SasTransportRoomMessage( internal class SasTransportRoomMessageFactory @Inject constructor( private val context: Context, private val monarchy: Monarchy, + @SessionId + private val sessionId: String, + @UserId + private val userId: String, + @DeviceId + private val deviceId: String?, private val localEchoEventFactory: LocalEchoEventFactory) { - fun createTransport(userId: String, userDevice: String, roomId: String, tx: SASVerificationTransaction? - ): SasTransportRoomMessage { - return SasTransportRoomMessage(context, userId, userDevice, roomId, monarchy, localEchoEventFactory, tx) + fun createTransport(roomId: String, tx: SASVerificationTransaction?): SasTransportRoomMessage { + return SasTransportRoomMessage(context, sessionId, userId, deviceId, roomId, monarchy, localEchoEventFactory, tx) } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportToDevice.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportToDevice.kt index 8d73695f4a..db578c5047 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportToDevice.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SasTransportToDevice.kt @@ -78,11 +78,11 @@ internal class SasTransportToDevice( // To device do not do anything here } - override fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDevice: String, code: CancelCode) { + override fun cancelTransaction(transactionId: String, otherUserId: String, otherUserDeviceId: String, code: CancelCode) { Timber.d("## SAS canceling transaction $transactionId for reason $code") val cancelMessage = KeyVerificationCancel.create(transactionId, code) val contentMap = MXUsersDevicesMap() - contentMap.setObject(otherUserId, otherUserDevice, cancelMessage) + contentMap.setObject(otherUserId, otherUserDeviceId, cancelMessage) sendToDeviceTask .configureWith(SendToDeviceTask.Params(EventType.KEY_VERIFICATION_CANCEL, contentMap, transactionId)) { this.callback = object : MatrixCallback { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt index 55f57d80d3..74482a8abe 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt @@ -34,7 +34,7 @@ internal class SendVerificationMessageWorker constructor(context: Context, param @JsonClass(generateAdapter = true) internal data class Params( - val userId: String, + val sessionId: String, val event: Event ) @@ -49,10 +49,10 @@ internal class SendVerificationMessageWorker constructor(context: Context, param val params = WorkerParamsFactory.fromData(inputData) ?: return Result.success(errorOutputData) - val sessionComponent = getSessionComponent(params.userId) + val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success(errorOutputData).also { // TODO, can this happen? should I update local echo? - Timber.e("Unknown Session, cannot send message, userId:${params.userId}") + Timber.e("Unknown Session, cannot send message, sessionId: ${params.sessionId}") } sessionComponent.inject(this) val localId = params.event.eventId ?: "" diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/StringQualifiers.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/StringQualifiers.kt index b084ba012d..a0a36d9982 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/StringQualifiers.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/di/StringQualifiers.kt @@ -26,7 +26,7 @@ import javax.inject.Qualifier internal annotation class UserId /** - * Used to inject the userId + * Used to inject the deviceId */ @Qualifier @Retention(AnnotationRetention.RUNTIME)