diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt index 97ed8ca6c5..297dc59665 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/common/CommonTestHelper.kt @@ -37,8 +37,11 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import org.junit.Assert.* -import java.util.* +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import java.util.ArrayList +import java.util.UUID import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit @@ -280,7 +283,7 @@ class CommonTestHelper(context: Context) { fun signout(session: Session) { val lock = CountDownLatch(1) - session.signOut(true, object : TestMatrixCallback(lock) {}) + session.signOut(true, TestMatrixCallback(lock)) await(lock) } } diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt index 605fcd5f76..c8e7355d7a 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/crosssigning/XSigningTest.kt @@ -12,6 +12,7 @@ import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertTrue @@ -73,14 +74,12 @@ class XSigningTest : InstrumentedTest { password = TestConstants.PASSWORD ) - val aliceLatch = CountDownLatch(1) - val bobLatch = CountDownLatch(1) + val latch = CountDownLatch(2) - aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(aliceLatch)) - bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(bobLatch)) + aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(latch)) + bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(latch)) - mTestHelper.await(aliceLatch) - mTestHelper.await(bobLatch) + mTestHelper.await(latch) // Check that alice can see bob keys val downloadLatch = CountDownLatch(1) @@ -88,14 +87,14 @@ class XSigningTest : InstrumentedTest { mTestHelper.await(downloadLatch) val bobKeysFromAlicePOV = aliceSession.getCrossSigningService().getUserCrossSigningKeys(bobSession.myUserId) - assertNotNull("Alice can see bob Master key", bobKeysFromAlicePOV?.masterKey()) - assertNull("Alice should not see bob User key", bobKeysFromAlicePOV?.userKey()) - assertNotNull("Alice can see bob SelfSigned key", bobKeysFromAlicePOV?.selfSigningKey()) + assertNotNull("Alice can see bob Master key", bobKeysFromAlicePOV!!.masterKey()) + assertNull("Alice should not see bob User key", bobKeysFromAlicePOV.userKey()) + assertNotNull("Alice can see bob SelfSigned key", bobKeysFromAlicePOV.selfSigningKey()) - assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV?.masterKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.masterKey()?.unpaddedBase64PublicKey) - assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV?.selfSigningKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.selfSigningKey()?.unpaddedBase64PublicKey) + assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV.masterKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.masterKey()?.unpaddedBase64PublicKey) + assertEquals("Bob keys from alice pov should match", bobKeysFromAlicePOV.selfSigningKey()?.unpaddedBase64PublicKey, bobSession.getCrossSigningService().getMyCrossSigningKeys()?.selfSigningKey()?.unpaddedBase64PublicKey) - assertTrue("Bob keys from alice pov should not be trusted", bobKeysFromAlicePOV?.isTrusted() == false) + assertFalse("Bob keys from alice pov should not be trusted", bobKeysFromAlicePOV.isTrusted()) mTestHelper.signout(aliceSession) mTestHelper.signout(bobSession) @@ -117,14 +116,12 @@ class XSigningTest : InstrumentedTest { password = TestConstants.PASSWORD ) - val aliceLatch = CountDownLatch(1) - val bobLatch = CountDownLatch(1) + val latch = CountDownLatch(2) - aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(aliceLatch)) - bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(bobLatch)) + aliceSession.getCrossSigningService().initializeCrossSigning(aliceAuthParams, TestMatrixCallback(latch)) + bobSession.getCrossSigningService().initializeCrossSigning(bobAuthParams, TestMatrixCallback(latch)) - mTestHelper.await(aliceLatch) - mTestHelper.await(bobLatch) + mTestHelper.await(latch) // Check that alice can see bob keys val downloadLatch = CountDownLatch(1) diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt index 03dba96d40..312ad03a06 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/keysbackup/KeysBackupTest.kt @@ -314,7 +314,8 @@ class KeysBackupTest : InstrumentedTest { val sessionData = keysBackup .decryptKeyBackupData(keyBackupData, session.olmInboundGroupSession!!.sessionIdentifier(), - cryptoTestData.roomId, decryption!!) + cryptoTestData.roomId, + decryption!!) assertNotNull(sessionData) // - Compare the decrypted megolm key with the original one assertKeysEquals(session.exportKeys(), sessionData) diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt index a381ccf091..6ae2489993 100644 --- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt +++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/verification/SASTest.kt @@ -47,7 +47,6 @@ import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters -import java.util.ArrayList import java.util.concurrent.CountDownLatch @RunWith(AndroidJUnit4::class) @@ -78,7 +77,10 @@ class SASTest : InstrumentedTest { } bobVerificationService.addListener(bobListener) - val txID = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobSession.myUserId, bobSession.getMyDevice().deviceId) + val txID = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, + bobSession.myUserId, + bobSession.getMyDevice().deviceId, + null) assertNotNull("Alice should have a started transaction", txID) val aliceKeyTx = aliceVerificationService.getExistingTransaction(bobSession.myUserId, txID!!) @@ -325,7 +327,7 @@ class SASTest : InstrumentedTest { val aliceCreatedLatch = CountDownLatch(2) val aliceCancelledLatch = CountDownLatch(2) - val createdTx = ArrayList() + val createdTx = mutableListOf() val aliceListener = object : VerificationService.VerificationListener { override fun transactionCreated(tx: VerificationTransaction) { createdTx.add(tx as SASDefaultVerificationTransaction) @@ -344,8 +346,8 @@ class SASTest : InstrumentedTest { val bobUserId = bobSession!!.myUserId val bobDeviceId = bobSession.getMyDevice().deviceId - aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId) - aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId) + aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null) + aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null) mTestHelper.await(aliceCreatedLatch) mTestHelper.await(aliceCancelledLatch) @@ -402,7 +404,7 @@ class SASTest : InstrumentedTest { val bobUserId = bobSession.myUserId val bobDeviceId = bobSession.getMyDevice().deviceId - aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId) + aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null) mTestHelper.await(aliceAcceptedLatch) assertTrue("Should have receive a commitment", accepted!!.commitment?.trim()?.isEmpty() == false) @@ -471,7 +473,7 @@ class SASTest : InstrumentedTest { val bobUserId = bobSession.myUserId val bobDeviceId = bobSession.getMyDevice().deviceId - val verificationSAS = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId) + val verificationSAS = aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null) mTestHelper.await(aliceSASLatch) mTestHelper.await(bobSASLatch) @@ -541,7 +543,7 @@ class SASTest : InstrumentedTest { val bobUserId = bobSession.myUserId val bobDeviceId = bobSession.getMyDevice().deviceId - aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId) + aliceVerificationService.beginKeyVerification(VerificationMethod.SAS, bobUserId, bobDeviceId, null) mTestHelper.await(aliceSASLatch) mTestHelper.await(bobSASLatch) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt index 979ff16d55..8d75fe2a91 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/crosssigning/MXCrossSigningInfo.kt @@ -20,14 +20,11 @@ import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey import im.vector.matrix.android.internal.crypto.model.KeyUsage data class MXCrossSigningInfo( - - var userId: String, - - var crossSigningKeys: List = ArrayList() - + val userId: String, + val crossSigningKeys: List ) { - fun isTrusted() : Boolean = masterKey()?.trustLevel?.isVerified() == true + fun isTrusted(): Boolean = masterKey()?.trustLevel?.isVerified() == true && selfSigningKey()?.trustLevel?.isVerified() == true fun masterKey(): CryptoCrossSigningKey? = crossSigningKeys diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt index 35337d10d7..0dd143f792 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/sas/VerificationService.kt @@ -58,16 +58,14 @@ interface VerificationService { fun requestKeyVerificationInDMs(methods: List, otherUserId: String, roomId: String, - localId: String? = LocalEcho.createLocalEchoId() - ): PendingVerificationRequest + localId: String? = LocalEcho.createLocalEchoId()): PendingVerificationRequest /** * Request a key verification from another user using toDevice events. */ fun requestKeyVerification(methods: List, otherUserId: String, - otherDevices: List? - ): PendingVerificationRequest + otherDevices: List?): PendingVerificationRequest fun declineVerificationRequestInDMs(otherUserId: String, otherDeviceId: String, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt index ab39dea178..553c36a9f4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/events/model/Event.kt @@ -86,9 +86,9 @@ data class Event( var sendState: SendState = SendState.UNKNOWN /** - The `age` value transcoded in a timestamp based on the device clock when the SDK received - the event from the home server. - Unlike `age`, this value is static. + * The `age` value transcoded in a timestamp based on the device clock when the SDK received + * the event from the home server. + * Unlike `age`, this value is static. */ @Transient var ageLocalTs: Long? = null diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt index 5265ede87d..bc5add34a1 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DeviceListManager.kt @@ -42,22 +42,28 @@ internal class DeviceListManager @Inject constructor(private val cryptoStore: IM fun onUsersDeviceUpdate(users: List) } - private val deviceChangeListeners = ArrayList() + private val deviceChangeListeners = mutableListOf() fun addListener(listener: UserDevicesUpdateListener) { - deviceChangeListeners.add(listener) + synchronized(deviceChangeListeners) { + deviceChangeListeners.add(listener) + } } fun removeListener(listener: UserDevicesUpdateListener) { - deviceChangeListeners.remove(listener) + synchronized(deviceChangeListeners) { + deviceChangeListeners.remove(listener) + } } - fun dispatchDeviceChange(users: List) { - deviceChangeListeners.forEach { - try { - it.onUsersDeviceUpdate(users) - } catch (failure: Throwable) { - Timber.e(failure, "Failed to dispatch device chande") + private fun dispatchDeviceChange(users: List) { + synchronized(deviceChangeListeners) { + deviceChangeListeners.forEach { + try { + it.onUsersDeviceUpdate(users) + } catch (failure: Throwable) { + Timber.e(failure, "Failed to dispatch device change") + } } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt index 0c13daf560..6214ae0321 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DefaultCrossSigningService.kt @@ -271,13 +271,13 @@ internal class DefaultCrossSigningService @Inject constructor( } private fun clearSigningKeys() { - this@DefaultCrossSigningService.masterPkSigning?.releaseSigning() - this@DefaultCrossSigningService.userPkSigning?.releaseSigning() - this@DefaultCrossSigningService.selfSigningPkSigning?.releaseSigning() + masterPkSigning?.releaseSigning() + userPkSigning?.releaseSigning() + selfSigningPkSigning?.releaseSigning() - this@DefaultCrossSigningService.masterPkSigning = null - this@DefaultCrossSigningService.userPkSigning = null - this@DefaultCrossSigningService.selfSigningPkSigning = null + masterPkSigning = null + userPkSigning = null + selfSigningPkSigning = null cryptoStore.setMyCrossSigningInfo(null) cryptoStore.storePrivateKeysInfo(null, null, null) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt index 4b08caf375..075b141f8d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustLevel.kt @@ -15,8 +15,10 @@ */ package im.vector.matrix.android.internal.crypto.crosssigning -data class DeviceTrustLevel(val crossSigningVerified: Boolean, val locallyVerified: Boolean?) { - +data class DeviceTrustLevel( + val crossSigningVerified: Boolean, + val locallyVerified: Boolean? +) { fun isVerified() = crossSigningVerified || locallyVerified == true fun isCrossSigningVerified() = crossSigningVerified fun isLocallyVerified() = locallyVerified diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt index d1a1c83cd2..27d2c1e76d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/DeviceTrustResult.kt @@ -18,7 +18,6 @@ package im.vector.matrix.android.internal.crypto.crosssigning import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo sealed class DeviceTrustResult { - data class Success(val level: DeviceTrustLevel) : DeviceTrustResult() data class UnknownDevice(val deviceID: String) : DeviceTrustResult() data class CrossSigningNotConfigured(val userID: String) : DeviceTrustResult() @@ -27,6 +26,6 @@ sealed class DeviceTrustResult { data class InvalidDeviceSignature(val deviceId: String, val signingKey: String, val throwable: Throwable?) : DeviceTrustResult() } -fun DeviceTrustResult.isSuccess(): Boolean = this is DeviceTrustResult.Success -fun DeviceTrustResult.isCrossSignedVerified(): Boolean = (this as? DeviceTrustResult.Success)?.level?.isCrossSigningVerified() == true -fun DeviceTrustResult.isLocallyVerified(): Boolean = (this as? DeviceTrustResult.Success)?.level?.isLocallyVerified() == true +fun DeviceTrustResult.isSuccess() = this is DeviceTrustResult.Success +fun DeviceTrustResult.isCrossSignedVerified() = this is DeviceTrustResult.Success && level.isCrossSigningVerified() +fun DeviceTrustResult.isLocallyVerified() = this is DeviceTrustResult.Success && level.isLocallyVerified() == true diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt index d8c616cb64..c4235531fb 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/crosssigning/UserTrustResult.kt @@ -13,19 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package im.vector.matrix.android.internal.crypto.crosssigning import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey sealed class UserTrustResult { - object Success : UserTrustResult() -// data class Success(val deviceID: String, val crossSigned: Boolean) : UserTrustResult() -// -// data class UnknownDevice(val deviceID: String) : UserTrustResult() + // data class Success(val deviceID: String, val crossSigned: Boolean) : UserTrustResult() + // data class UnknownDevice(val deviceID: String) : UserTrustResult() data class CrossSigningNotConfigured(val userID: String) : UserTrustResult() + data class UnknownCrossSignatureInfo(val userID: String) : UserTrustResult() data class KeysNotTrusted(val key: MXCrossSigningInfo) : UserTrustResult() data class KeyNotSigned(val key: CryptoCrossSigningKey) : UserTrustResult() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt index bd438c54f2..b12eaabaed 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoCrossSigningKey.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package im.vector.matrix.android.internal.crypto.model import im.vector.matrix.android.internal.crypto.crosssigning.DeviceTrustLevel @@ -87,6 +103,6 @@ enum class KeyUsage(val value: String) { USER_SIGNING("user_signing") } -fun CryptoCrossSigningKey.toRest(): RestKeyInfo { +internal fun CryptoCrossSigningKey.toRest(): RestKeyInfo { return CryptoInfoMapper.map(this) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt index cede23f16a..8f6d64221c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoDeviceInfo.kt @@ -29,15 +29,12 @@ data class CryptoDeviceInfo( override val signatures: Map>? = null, val unsigned: JsonDict? = null, -// TODO how to store if this device is verified by a user SSK, or is legacy trusted? -// I need to know if it is trusted via cross signing (Trusted because bob verified it) + // TODO how to store if this device is verified by a user SSK, or is legacy trusted? + // I need to know if it is trusted via cross signing (Trusted because bob verified it) var trustLevel: DeviceTrustLevel? = null, var isBlocked: Boolean = false - -) - - : CryptoInfo { +) : CryptoInfo { val isVerified: Boolean get() = trustLevel?.isVerified() ?: false @@ -93,7 +90,7 @@ data class CryptoDeviceInfo( // } } -fun CryptoDeviceInfo.toRest(): RestDeviceInfo { +internal fun CryptoDeviceInfo.toRest(): RestDeviceInfo { return CryptoInfoMapper.map(this) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt index 8d216f3160..4459d508ff 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/CryptoInfoMapper.kt @@ -15,14 +15,10 @@ */ package im.vector.matrix.android.internal.crypto.model -import com.squareup.moshi.Moshi import im.vector.matrix.android.internal.crypto.model.rest.RestDeviceInfo import im.vector.matrix.android.internal.crypto.model.rest.RestKeyInfo -import im.vector.matrix.android.internal.di.SerializeNulls -object CryptoInfoMapper { - - private val moshi = Moshi.Builder().add(SerializeNulls.JSON_ADAPTER_FACTORY).build() +internal object CryptoInfoMapper { fun map(restDeviceInfo: RestDeviceInfo): CryptoDeviceInfo { return CryptoDeviceInfo( diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt index fc8eff2875..fa4daa112c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeleteDeviceParams.kt @@ -24,5 +24,5 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class DeleteDeviceParams( @Json(name = "auth") - var userPasswordAuth: UserPasswordAuth? = null + val userPasswordAuth: UserPasswordAuth? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt index 27a3480d0e..563e0499ae 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/DeviceKeys.kt @@ -38,5 +38,4 @@ data class DeviceKeys( @Json(name = "usage") val usage: List? = null - ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt index 5a48f547f9..12d27a023f 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyChangesResponse.kt @@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass * This class describes the key changes response */ @JsonClass(generateAdapter = true) -data class KeyChangesResponse( +internal data class KeyChangesResponse( // list of user ids which have new devices @Json(name = "changed") var changed: List? = null, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt index ef30986124..dc6075ca43 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationAccept.kt @@ -33,31 +33,31 @@ internal data class KeyVerificationAccept( * Alice’s device should record this ID and use it in future messages in this transaction. */ @Json(name = "transaction_id") - override var transactionID: String? = null, + override val transactionID: String? = null, /** * The key agreement protocol that Bob’s device has selected to use, out of the list proposed by Alice’s device */ @Json(name = "key_agreement_protocol") - override var keyAgreementProtocol: String? = null, + override val keyAgreementProtocol: String? = null, /** * The hash algorithm that Bob’s device has selected to use, out of the list proposed by Alice’s device */ @Json(name = "hash") - override var hash: String? = null, + override val hash: String? = null, /** * The message authentication code that Bob’s device has selected to use, out of the list proposed by Alice’s device */ @Json(name = "message_authentication_code") - override var messageAuthenticationCode: String? = null, + override val messageAuthenticationCode: String? = null, /** * An array of short authentication string methods that Bob’s client (and Bob) understands. Must be a subset of the list proposed by Alice’s device */ @Json(name = "short_authentication_string") - override var shortAuthenticationStrings: List? = null, + override val shortAuthenticationStrings: List? = null, /** * The hash (encoded as unpadded base64) of the concatenation of the device’s ephemeral public key (QB, encoded as unpadded base64) @@ -89,14 +89,14 @@ internal data class KeyVerificationAccept( commitment: String, messageAuthenticationCode: String, shortAuthenticationStrings: List): VerificationInfoAccept { - return KeyVerificationAccept().apply { - this.transactionID = tid - this.keyAgreementProtocol = keyAgreementProtocol - this.hash = hash - this.commitment = commitment - this.messageAuthenticationCode = messageAuthenticationCode - this.shortAuthenticationStrings = shortAuthenticationStrings - } + return KeyVerificationAccept( + transactionID = tid, + keyAgreementProtocol = keyAgreementProtocol, + hash = hash, + commitment = commitment, + messageAuthenticationCode = messageAuthenticationCode, + shortAuthenticationStrings = shortAuthenticationStrings + ) } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt index 818bffc942..d1ae09cc37 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationCancel.kt @@ -34,12 +34,12 @@ internal data class KeyVerificationCancel( /** * machine-readable reason for cancelling, see #CancelCode */ - override var code: String? = null, + override val code: String? = null, /** * human-readable reason for cancelling. This should only be used if the receiving client does not understand the code given. */ - override var reason: String? = null + override val reason: String? = null ) : SendToDeviceObject, VerificationInfoCancel { companion object { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt index d012d03add..9a190e1e15 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationKey.kt @@ -28,7 +28,7 @@ internal data class KeyVerificationKey( /** * the ID of the transaction that the message is part of */ - @Json(name = "transaction_id") override var transactionID: String? = null, + @Json(name = "transaction_id") override val transactionID: String? = null, /** * The device’s ephemeral public key, as an unpadded base64 string diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt index 84bc73fda0..004477e90b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeyVerificationReady.kt @@ -26,7 +26,7 @@ import im.vector.matrix.android.internal.crypto.verification.VerificationInfoRea internal data class KeyVerificationReady( @Json(name = "from_device") override val fromDevice: String?, @Json(name = "methods") override val methods: List?, - @Json(name = "transaction_id") override var transactionID: String? = null + @Json(name = "transaction_id") override val transactionID: String? = null ) : SendToDeviceObject, VerificationInfoReady { override fun toSendToDeviceObject() = this diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt index 87b9891ffa..38f6615dad 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimBody.kt @@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass * This class represents the response to /keys/claim request made by claimOneTimeKeysForUsersDevices. */ @JsonClass(generateAdapter = true) -data class KeysClaimBody( +internal data class KeysClaimBody( /** * The time (in milliseconds) to wait when downloading keys from remote servers. 10 seconds is the recommended default. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt index 976743d8bc..59567ba77a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysClaimResponse.kt @@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass * This class represents the response to /keys/claim request made by claimOneTimeKeysForUsersDevices. */ @JsonClass(generateAdapter = true) -data class KeysClaimResponse( +internal data class KeysClaimResponse( /** * The requested keys ordered by device by user. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt index 769a28f7e7..3dca696fcd 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryBody.kt @@ -24,7 +24,7 @@ import com.squareup.moshi.JsonClass * This class represents the body to /keys/query */ @JsonClass(generateAdapter = true) -data class KeysQueryBody( +internal data class KeysQueryBody( /** * The time (in milliseconds) to wait when downloading keys from remote servers. 10 seconds is the recommended default. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt index b2b62706a7..dd3cb049dd 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysQueryResponse.kt @@ -28,28 +28,27 @@ import com.squareup.moshi.JsonClass * The user_signing_keys property will only be included when a user requests their own keys. */ @JsonClass(generateAdapter = true) -data class KeysQueryResponse( +internal data class KeysQueryResponse( /** * The device keys per devices per users. * Map from userId to map from deviceId to MXDeviceInfo * TODO Use MXUsersDevicesMap? */ @Json(name = "device_keys") - var deviceKeys: Map>? = null, + val deviceKeys: Map>? = null, /** * The failures sorted by homeservers. TODO Bad comment ? * TODO Use MXUsersDevicesMap? */ - var failures: Map>? = null, + val failures: Map>? = null, @Json(name = "master_keys") - var masterKeys: Map? = null, + val masterKeys: Map? = null, @Json(name = "self_signing_keys") - var selfSigningKeys: Map? = null, + val selfSigningKeys: Map? = null, @Json(name = "user_signing_keys") - var userSigningKeys: Map? = null - + val userSigningKeys: Map? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt index 961125767e..2267c25534 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadBody.kt @@ -21,10 +21,10 @@ import com.squareup.moshi.JsonClass import im.vector.matrix.android.api.util.JsonDict @JsonClass(generateAdapter = true) -data class KeysUploadBody( +internal data class KeysUploadBody( @Json(name = "device_keys") - var deviceKeys: RestDeviceInfo? = null, + val deviceKeys: RestDeviceInfo? = null, @Json(name = "one_time_keys") - var oneTimeKeys: JsonDict? = null + val oneTimeKeys: JsonDict? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt index b68c13bf4d..38360fa1cd 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/KeysUploadResponse.kt @@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass * This class represents the response to /keys/upload request made by uploadKeys. */ @JsonClass(generateAdapter = true) -data class KeysUploadResponse( +internal data class KeysUploadResponse( /** * The count per algorithm as returned by the home server: a map (algorithm to count). diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt index e057780093..1fc1e599b7 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestDeviceInfo.kt @@ -20,40 +20,41 @@ import com.squareup.moshi.JsonClass import im.vector.matrix.android.api.util.JsonDict @JsonClass(generateAdapter = true) -data class RestDeviceInfo( +internal data class RestDeviceInfo( /** * The id of this device. */ @Json(name = "device_id") - var deviceId: String, + val deviceId: String, /** * the user id */ @Json(name = "user_id") - var userId: String, + val userId: String, /** * The list of algorithms supported by this device. */ @Json(name = "algorithms") - var algorithms: List? = null, + val algorithms: List? = null, /** * A map from ":" to "". */ @Json(name = "keys") - var keys: Map? = null, + val keys: Map? = null, /** * The signature of this MXDeviceInfo. * A map from "" to a map from ":" to "" */ @Json(name = "signatures") - var signatures: Map>? = null, + val signatures: Map>? = null, /* * Additional data from the home server. */ @Json(name = "unsigned") - var unsigned: JsonDict? = null) + val unsigned: JsonDict? = null +) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt index ffd1817402..5c4ff4d7e4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RestKeyInfo.kt @@ -21,7 +21,7 @@ import im.vector.matrix.android.internal.crypto.model.CryptoCrossSigningKey import im.vector.matrix.android.internal.crypto.model.CryptoInfoMapper @JsonClass(generateAdapter = true) -data class RestKeyInfo( +internal data class RestKeyInfo( /** * The user who owns the key */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt index 00ad490e1d..de2345e002 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShare.kt @@ -21,7 +21,7 @@ import com.squareup.moshi.Json * Parent class representing an room key action request * Note: this class cannot be abstract because of [org.matrix.androidsdk.core.JsonUtils.toRoomKeyShare] */ -open class RoomKeyShare : SendToDeviceObject { +internal open class RoomKeyShare : SendToDeviceObject { var action: String? = null diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt index 768c2d71c5..fcfbfccbac 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareCancellation.kt @@ -21,7 +21,7 @@ import com.squareup.moshi.JsonClass * Class representing an room key request cancellation content */ @JsonClass(generateAdapter = true) -class RoomKeyShareCancellation : RoomKeyShare() { +internal class RoomKeyShareCancellation : RoomKeyShare() { init { action = ACTION_SHARE_CANCELLATION } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt index 0d8f7f8738..3b9d210812 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/RoomKeyShareRequest.kt @@ -22,8 +22,7 @@ import com.squareup.moshi.JsonClass * Class representing an room key request content */ @JsonClass(generateAdapter = true) -class RoomKeyShareRequest : RoomKeyShare() { - +internal class RoomKeyShareRequest : RoomKeyShare() { var body: RoomKeyRequestBody? = null init { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt index 8b95d7c686..df4482f0bf 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SendToDeviceBody.kt @@ -16,13 +16,12 @@ package im.vector.matrix.android.internal.crypto.model.rest -class SendToDeviceBody { - - /** - * `Any` should implement [SendToDeviceObject], but we cannot use interface here because of Json serialization - * - * The messages to send. A map from user ID, to a map from device ID to message body. - * The device ID may also be *, meaning all known devices for the user. - */ - var messages: Map>? = null -} +internal data class SendToDeviceBody( + /** + * `Any` should implement [SendToDeviceObject], but we cannot use interface here because of Json serialization + * + * The messages to send. A map from user ID, to a map from device ID to message body. + * The device ID may also be *, meaning all known devices for the user. + */ + val messages: Map>? +) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt index d8186ad2cb..ef459fbc59 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/SignatureUploadResponse.kt @@ -24,8 +24,7 @@ import com.squareup.moshi.JsonClass * Upload Signature response */ @JsonClass(generateAdapter = true) -data class SignatureUploadResponse( - +internal data class SignatureUploadResponse( /** * The response contains a failures property, which is a map of user ID to device ID to failure reason, * if any of the uploaded keys failed. @@ -33,7 +32,7 @@ data class SignatureUploadResponse( * If a signature is not valid, the homeserver should set the corresponding entry in failures to a JSON object * with the errcode property set to M_INVALID_SIGNATURE. */ - var failures: Map>? = null + val failures: Map>? = null ) @@ -41,8 +40,10 @@ data class SignatureUploadResponse( data class UploadResponseFailure( @Json(name = "status") val status: Int, + @Json(name = "errCode") val errCode: String, + @Json(name = "message") val message: String ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt index 161c5d0354..f2ea24a960 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UpdateDeviceInfoBody.kt @@ -20,12 +20,10 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class UpdateDeviceInfoBody( - +internal data class UpdateDeviceInfoBody( /** * The new display name for this device. If not given, the display name is unchanged. */ @Json(name = "display_name") var displayName: String? = null - ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt index f4e71c7dca..05d2d88f95 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt @@ -22,9 +22,9 @@ import im.vector.matrix.android.internal.crypto.model.toRest /** * Helper class to build CryptoApi#uploadSignatures params */ -data class UploadSignatureQueryBuilder( - private val deviceInfoList: ArrayList = ArrayList(), - private val signingKeyInfoList: ArrayList = ArrayList() +internal data class UploadSignatureQueryBuilder( + private val deviceInfoList: MutableList = mutableListOf(), + private val signingKeyInfoList: MutableList = mutableListOf() ) { fun withDeviceInfo(deviceInfo: CryptoDeviceInfo) = apply { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt index 0945de030a..45ad43a0ef 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/model/rest/UserPasswordAuth.kt @@ -28,15 +28,15 @@ data class UserPasswordAuth( // device device session id @Json(name = "session") - var session: String? = null, + val session: String? = null, // registration information @Json(name = "type") - var type: String? = LoginFlowTypes.PASSWORD, + val type: String? = LoginFlowTypes.PASSWORD, @Json(name = "user") - var user: String? = null, + val user: String? = null, @Json(name = "password") - var password: String? = null + val password: String? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt index dceb77ddd9..98f931a455 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/DeviceInfoEntity.kt @@ -35,8 +35,7 @@ internal open class DeviceInfoEntity(@PrimaryKey var primaryKey: String = "", var signatureMapJson: String? = null, var unsignedMapJson: String? = null, var trustLevelEntity: TrustLevelEntity? = null - ) - : RealmObject() { +) : RealmObject() { // // Deserialize data // fun getDeviceInfo(): MXDeviceInfo? { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt index c35282b392..e2c0242193 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/model/TrustLevelEntity.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package im.vector.matrix.android.internal.crypto.store.db.model import io.realm.RealmObject @@ -9,5 +25,5 @@ internal open class TrustLevelEntity( companion object - fun isVerified() : Boolean = crossSignedVerified == true || locallyVerified == true + fun isVerified(): Boolean = crossSignedVerified == true || locallyVerified == true } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt index 4ebdac2635..940fa9c7fb 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt @@ -18,8 +18,8 @@ package im.vector.matrix.android.internal.crypto.tasks import im.vector.matrix.android.internal.auth.data.LoginFlowTypes import im.vector.matrix.android.internal.crypto.api.CryptoApi -import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth import im.vector.matrix.android.internal.crypto.model.rest.DeleteDeviceParams +import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth import im.vector.matrix.android.internal.di.UserId import im.vector.matrix.android.internal.network.executeRequest import im.vector.matrix.android.internal.task.Task @@ -42,16 +42,16 @@ internal class DefaultDeleteDeviceWithUserPasswordTask @Inject constructor( override suspend fun execute(params: DeleteDeviceWithUserPasswordTask.Params) { return executeRequest(eventBus) { - apiCall = cryptoApi.deleteDevice(params.deviceId, DeleteDeviceParams() - .apply { - userPasswordAuth = UserPasswordAuth() - .apply { - type = LoginFlowTypes.PASSWORD - session = params.authSession - user = userId + apiCall = cryptoApi.deleteDevice(params.deviceId, + DeleteDeviceParams( + userPasswordAuth = UserPasswordAuth( + type = LoginFlowTypes.PASSWORD, + session = params.authSession, + user = userId, password = params.password - } - }) + ) + ) + ) } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt index c9a8addd2a..5a8f8e7ba5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/RoomVerificationUpdateTask.kt @@ -35,7 +35,7 @@ import javax.inject.Inject internal interface RoomVerificationUpdateTask : Task { data class Params( val events: List, - val sasVerificationService: DefaultVerificationService, + val verificationService: DefaultVerificationService, val cryptoService: CryptoService ) } @@ -104,7 +104,7 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor( // The verification is started from another device Timber.v("## SAS Verification live observer: Transaction started by other device tid:${it.transactionID} ") it.transactionID?.let { txId -> transactionsHandledByOtherDevice.add(txId) } - params.sasVerificationService.onRoomRequestHandledByOtherDevice(event) + params.verificationService.onRoomRequestHandledByOtherDevice(event) } } } else if (EventType.KEY_VERIFICATION_READY == event.type) { @@ -113,13 +113,13 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor( // The verification is started from another device Timber.v("## SAS Verification live observer: Transaction started by other device tid:${it.transactionID} ") it.transactionID?.let { txId -> transactionsHandledByOtherDevice.add(txId) } - params.sasVerificationService.onRoomRequestHandledByOtherDevice(event) + params.verificationService.onRoomRequestHandledByOtherDevice(event) } } } else if (EventType.KEY_VERIFICATION_CANCEL == event.type || EventType.KEY_VERIFICATION_DONE == event.type) { event.getClearContent().toModel()?.relatesTo?.eventId?.let { transactionsHandledByOtherDevice.remove(it) - params.sasVerificationService.onRoomRequestHandledByOtherDevice(event) + params.verificationService.onRoomRequestHandledByOtherDevice(event) } } @@ -141,11 +141,11 @@ internal class DefaultRoomVerificationUpdateTask @Inject constructor( EventType.KEY_VERIFICATION_CANCEL, EventType.KEY_VERIFICATION_READY, EventType.KEY_VERIFICATION_DONE -> { - params.sasVerificationService.onRoomEvent(event) + params.verificationService.onRoomEvent(event) } EventType.MESSAGE -> { if (MessageType.MSGTYPE_VERIFICATION_REQUEST == event.getClearContent().toModel()?.type) { - params.sasVerificationService.onRoomRequestReceived(event) + params.verificationService.onRoomRequestReceived(event) } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt index 2b4ab74f87..58c461888b 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/SendToDeviceTask.kt @@ -42,8 +42,9 @@ internal class DefaultSendToDeviceTask @Inject constructor( ) : SendToDeviceTask { override suspend fun execute(params: SendToDeviceTask.Params) { - val sendToDeviceBody = SendToDeviceBody() - sendToDeviceBody.messages = params.contentMap.map + val sendToDeviceBody = SendToDeviceBody( + messages = params.contentMap.map + ) return executeRequest(eventBus) { apiCall = cryptoApi.sendToDevice( diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt index 4ea60a7bad..af097f4431 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/tasks/UploadKeysTask.kt @@ -45,15 +45,10 @@ internal class DefaultUploadKeysTask @Inject constructor( override suspend fun execute(params: UploadKeysTask.Params): KeysUploadResponse { val encodedDeviceId = convertToUTF8(params.deviceId) - val body = KeysUploadBody() - - if (null != params.deviceKeys) { - body.deviceKeys = params.deviceKeys - } - - if (null != params.oneTimeKeys) { - body.oneTimeKeys = params.oneTimeKeys - } + val body = KeysUploadBody( + deviceKeys = params.deviceKeys, + oneTimeKeys = params.oneTimeKeys + ) return executeRequest(eventBus) { apiCall = if (encodedDeviceId.isBlank()) { 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 47eceb179b..2b049e0061 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 @@ -30,7 +30,8 @@ import im.vector.matrix.android.internal.worker.getSessionComponent import timber.log.Timber import javax.inject.Inject -internal class SendVerificationMessageWorker constructor(context: Context, params: WorkerParameters) +internal class SendVerificationMessageWorker(context: Context, + params: WorkerParameters) : CoroutineWorker(context, params) { @JsonClass(generateAdapter = true) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt index 5a4838831c..ed2e5dfbe0 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfo.kt @@ -21,6 +21,15 @@ import im.vector.matrix.android.internal.crypto.model.rest.SendToDeviceObject interface VerificationInfo { fun toEventContent(): Content? = null fun toSendToDeviceObject(): SendToDeviceObject? = null - fun isValid() : Boolean + fun isValid(): Boolean + + /** + * String to identify the transaction. + * This string must be unique for the pair of users performing verification for the duration that the transaction is valid. + * Alice’s device should record this ID and use it in future messages in this transaction. + */ val transactionID: String? + + // TODO Refacto Put the relatesTo here or at least in Message sent in Room parent? + // val relatesTo: RelationDefaultContent? } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt index 2774a44d49..cc6c8c8530 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoAccept.kt @@ -16,9 +16,6 @@ package im.vector.matrix.android.internal.crypto.verification internal interface VerificationInfoAccept : VerificationInfo { - - override val transactionID: String? - /** * The key agreement protocol that Bob’s device has selected to use, out of the list proposed by Alice’s device */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt index b9bd2cebee..713453e93e 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoCancel.kt @@ -16,8 +16,6 @@ package im.vector.matrix.android.internal.crypto.verification internal interface VerificationInfoCancel : VerificationInfo { - - override val transactionID: String? /** * machine-readable reason for cancelling, see [CancelCode] */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt index 99edb53e79..2466660ca4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoKey.kt @@ -19,8 +19,6 @@ package im.vector.matrix.android.internal.crypto.verification * Sent by both devices to send their ephemeral Curve25519 public key to the other device. */ internal interface VerificationInfoKey : VerificationInfo { - - override val transactionID: String? /** * The device’s ephemeral public key, as an unpadded base64 string */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt index ace1210986..e895973ae8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoMac.kt @@ -16,9 +16,6 @@ package im.vector.matrix.android.internal.crypto.verification internal interface VerificationInfoMac : VerificationInfo { - - override val transactionID: String? - /** * A map of key ID to the MAC of the key, as an unpadded base64 string, calculated using the MAC key */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt index 0c5312987e..4c26951315 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoReady.kt @@ -22,10 +22,8 @@ package im.vector.matrix.android.internal.crypto.verification * The m.key.verification.ready event is optional; the recipient of the m.key.verification.request event may respond directly * with a m.key.verification.start event instead. */ + interface VerificationInfoReady : VerificationInfo { - - override val transactionID: String? - /** * The ID of the device that sent the m.key.verification.ready message */ diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt index 4875705580..3f3e4f27a6 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationInfoStart.kt @@ -24,13 +24,6 @@ internal interface VerificationInfoStart : VerificationInfo { */ val fromDevice: String? - /** - * String to identify the transaction. - * This string must be unique for the pair of users performing verification for the duration that the transaction is valid. - * Alice’s device should record this ID and use it in future messages in this transaction. - */ - override val transactionID: String? - /** * An array of key agreement protocols that Alice’s client understands. * Must include “curve25519”. diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt index c6a6581384..bbac973f1d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationMessageLiveObserver.kt @@ -37,7 +37,7 @@ internal class VerificationMessageLiveObserver @Inject constructor( @SessionDatabase realmConfiguration: RealmConfiguration, private val roomVerificationUpdateTask: DefaultRoomVerificationUpdateTask, private val cryptoService: CryptoService, - private val sasVerificationService: DefaultVerificationService, + private val verificationService: DefaultVerificationService, private val taskExecutor: TaskExecutor ) : RealmLiveEntityObserver(realmConfiguration) { @@ -67,7 +67,7 @@ internal class VerificationMessageLiveObserver @Inject constructor( .toList() roomVerificationUpdateTask.configureWith( - RoomVerificationUpdateTask.Params(events, sasVerificationService, cryptoService) + RoomVerificationUpdateTask.Params(events, verificationService, cryptoService) ).executeBy(taskExecutor) } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt index 627a444c6d..3d038a0c82 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt @@ -32,7 +32,8 @@ import im.vector.matrix.android.internal.worker.getSessionComponent import org.greenrobot.eventbus.EventBus import javax.inject.Inject -internal class SendEventWorker constructor(context: Context, params: WorkerParameters) +internal class SendEventWorker(context: Context, + params: WorkerParameters) : CoroutineWorker(context, params) { @JsonClass(generateAdapter = true) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt index 285673a1f1..bda3623078 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/CryptoSyncHandler.kt @@ -32,7 +32,7 @@ import timber.log.Timber import javax.inject.Inject internal class CryptoSyncHandler @Inject constructor(private val cryptoService: DefaultCryptoService, - private val sasVerificationService: DefaultVerificationService) { + private val verificationService: DefaultVerificationService) { fun handleToDevice(toDevice: ToDeviceSyncResponse, initialSyncProgressService: DefaultInitialSyncProgressService? = null) { val total = toDevice.events?.size ?: 0 @@ -44,7 +44,7 @@ internal class CryptoSyncHandler @Inject constructor(private val cryptoService: && event.getClearContent()?.toModel()?.type == "m.bad.encrypted") { Timber.e("## handleToDeviceEvent() : Warning: Unable to decrypt to-device event : ${event.content}") } else { - sasVerificationService.onToDeviceEvent(event) + verificationService.onToDeviceEvent(event) cryptoService.onToDeviceEvent(event) } } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt index 168855b201..0c2f8cdee6 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsFragment.kt @@ -90,7 +90,7 @@ class CrossSigningSettingsFragment @Inject constructor( super.onDestroyView() } - fun requestPassword(sessionId: String) { + private fun requestPassword(sessionId: String) { // Ask for password val inflater = this.layoutInflater val layout = inflater.inflate(R.layout.dialog_base_edit_text, null) @@ -105,6 +105,7 @@ class CrossSigningSettingsFragment @Inject constructor( .setPositiveButton(R.string.ok) { _, _ -> val pass = input.text.toString() + // TODO sessionId should never get out the ViewModel viewModel.handle(CrossSigningAction.InitializeCrossSigning(UserPasswordAuth( session = sessionId, password = pass diff --git a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt index cba86da599..e95bf50de9 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/crosssigning/CrossSigningSettingsViewModel.kt @@ -89,7 +89,7 @@ class CrossSigningSettingsViewModel @AssistedInject constructor(@Assisted privat override fun handle(action: CrossSigningAction) { when (action) { is CrossSigningAction.InitializeCrossSigning -> { - initializeCrossSigning(action.auth?.also { it.user = session.myUserId }) + initializeCrossSigning(action.auth?.copy(user = session.myUserId)) } } } diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index a05bc3511d..578038c0af 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1500,7 +1500,7 @@ Why choose Riot.im? Verified! You\'ve successfully verified this device. - Messages with this user in this room are end-to-end encrypted and can‘t be read by third parties. + Messages with this user in this room are end-to-end encrypted and can\'t be read by third parties. Got it Nothing appearing? Not all clients supports interactive verification yet. Use legacy verification. @@ -1694,7 +1694,6 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming Name or ID (#example:matrix.org) Enable swipe to reply in timeline - Enable verification other DM Link copied to clipboard