Cleaning, code review
This commit is contained in:
parent
9385d19ad0
commit
eaf104495d
@ -322,11 +322,13 @@ class E2eeSanityTests : InstrumentedTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val importedResult = testHelper.doSync<ImportRoomKeysResult> {
|
val importedResult = testHelper.doSync<ImportRoomKeysResult> {
|
||||||
kbs.restoreKeyBackupWithPassword(keyVersionResult!!,
|
kbs.restoreKeyBackupWithPassword(
|
||||||
|
keyVersionResult!!,
|
||||||
keyBackupPassword,
|
keyBackupPassword,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null, it)
|
null, it
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(3, importedResult.totalNumberOfKeys)
|
assertEquals(3, importedResult.totalNumberOfKeys)
|
||||||
@ -724,7 +726,8 @@ class E2eeSanityTests : InstrumentedTest {
|
|||||||
assertEquals(
|
assertEquals(
|
||||||
"USK Private parts should be the same",
|
"USK Private parts should be the same",
|
||||||
aliceSession.cryptoService().crossSigningService().getCrossSigningPrivateKeys()!!.user,
|
aliceSession.cryptoService().crossSigningService().getCrossSigningPrivateKeys()!!.user,
|
||||||
aliceNewSession.cryptoService().crossSigningService().getCrossSigningPrivateKeys()!!.user)
|
aliceNewSession.cryptoService().crossSigningService().getCrossSigningPrivateKeys()!!.user
|
||||||
|
)
|
||||||
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
"SSK Private parts should be the same",
|
"SSK Private parts should be the same",
|
||||||
|
@ -113,7 +113,7 @@ class WithHeldTests : InstrumentedTest {
|
|||||||
?.firstOrNull { it.fromDevice == bobSession.sessionParams.deviceId }
|
?.firstOrNull { it.fromDevice == bobSession.sessionParams.deviceId }
|
||||||
?.result
|
?.result
|
||||||
?.let {
|
?.let {
|
||||||
it as? RequestResult.Failure
|
it as? RequestResult.Failure
|
||||||
}
|
}
|
||||||
?.code == WithHeldCode.UNVERIFIED
|
?.code == WithHeldCode.UNVERIFIED
|
||||||
}
|
}
|
||||||
@ -161,13 +161,15 @@ class WithHeldTests : InstrumentedTest {
|
|||||||
val aliceInterceptor = testHelper.getTestInterceptor(aliceSession)
|
val aliceInterceptor = testHelper.getTestInterceptor(aliceSession)
|
||||||
|
|
||||||
// Simulate no OTK
|
// Simulate no OTK
|
||||||
aliceInterceptor!!.addRule(MockOkHttpInterceptor.SimpleRule(
|
aliceInterceptor!!.addRule(
|
||||||
"/keys/claim",
|
MockOkHttpInterceptor.SimpleRule(
|
||||||
200,
|
"/keys/claim",
|
||||||
"""
|
200,
|
||||||
|
"""
|
||||||
{ "one_time_keys" : {} }
|
{ "one_time_keys" : {} }
|
||||||
"""
|
"""
|
||||||
))
|
)
|
||||||
|
)
|
||||||
Log.d("#TEST", "Recovery :${aliceSession.sessionParams.credentials.accessToken}")
|
Log.d("#TEST", "Recovery :${aliceSession.sessionParams.credentials.accessToken}")
|
||||||
|
|
||||||
val roomAlicePov = aliceSession.getRoom(testData.roomId)!!
|
val roomAlicePov = aliceSession.getRoom(testData.roomId)!!
|
||||||
@ -198,7 +200,10 @@ class WithHeldTests : InstrumentedTest {
|
|||||||
|
|
||||||
// Ensure that alice has marked the session to be shared with bob
|
// Ensure that alice has marked the session to be shared with bob
|
||||||
val sessionId = eventBobPOV!!.root.content.toModel<EncryptedEventContent>()!!.sessionId!!
|
val sessionId = eventBobPOV!!.root.content.toModel<EncryptedEventContent>()!!.sessionId!!
|
||||||
val chainIndex = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(bobSession.myUserId, bobSession.sessionParams.credentials.deviceId)
|
val chainIndex = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(
|
||||||
|
bobSession.myUserId,
|
||||||
|
bobSession.sessionParams.credentials.deviceId
|
||||||
|
)
|
||||||
|
|
||||||
Assert.assertEquals("Alice should have marked bob's device for this session", 0, chainIndex)
|
Assert.assertEquals("Alice should have marked bob's device for this session", 0, chainIndex)
|
||||||
// Add a new device for bob
|
// Add a new device for bob
|
||||||
@ -216,7 +221,10 @@ class WithHeldTests : InstrumentedTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val chainIndex2 = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(bobSecondSession.myUserId, bobSecondSession.sessionParams.credentials.deviceId)
|
val chainIndex2 = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(
|
||||||
|
bobSecondSession.myUserId,
|
||||||
|
bobSecondSession.sessionParams.credentials.deviceId
|
||||||
|
)
|
||||||
|
|
||||||
Assert.assertEquals("Alice should have marked bob's device for this session", 1, chainIndex2)
|
Assert.assertEquals("Alice should have marked bob's device for this session", 1, chainIndex2)
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@
|
|||||||
package org.matrix.android.sdk.internal.crypto.store.db.migration
|
package org.matrix.android.sdk.internal.crypto.store.db.migration
|
||||||
|
|
||||||
import io.realm.DynamicRealm
|
import io.realm.DynamicRealm
|
||||||
import org.matrix.android.sdk.internal.crypto.store.db.model.GossipingEventEntityFields
|
|
||||||
import org.matrix.android.sdk.internal.crypto.store.db.model.IncomingGossipingRequestEntityFields
|
|
||||||
import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingGossipingRequestEntityFields
|
|
||||||
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||||
|
|
||||||
internal class MigrateCryptoTo005(realm: DynamicRealm) : RealmMigrator(realm, 5) {
|
internal class MigrateCryptoTo005(realm: DynamicRealm) : RealmMigrator(realm, 5) {
|
||||||
@ -29,38 +26,37 @@ internal class MigrateCryptoTo005(realm: DynamicRealm) : RealmMigrator(realm, 5)
|
|||||||
realm.schema.remove("IncomingRoomKeyRequestEntity")
|
realm.schema.remove("IncomingRoomKeyRequestEntity")
|
||||||
|
|
||||||
// Not need to migrate existing request, just start fresh?
|
// Not need to migrate existing request, just start fresh?
|
||||||
|
|
||||||
realm.schema.create("GossipingEventEntity")
|
realm.schema.create("GossipingEventEntity")
|
||||||
.addField(GossipingEventEntityFields.TYPE, String::class.java)
|
.addField("type", String::class.java)
|
||||||
.addIndex(GossipingEventEntityFields.TYPE)
|
.addIndex("type")
|
||||||
.addField(GossipingEventEntityFields.CONTENT, String::class.java)
|
.addField("content", String::class.java)
|
||||||
.addField(GossipingEventEntityFields.SENDER, String::class.java)
|
.addField("sender", String::class.java)
|
||||||
.addIndex(GossipingEventEntityFields.SENDER)
|
.addIndex("sender")
|
||||||
.addField(GossipingEventEntityFields.DECRYPTION_RESULT_JSON, String::class.java)
|
.addField("decryptionResultJson", String::class.java)
|
||||||
.addField(GossipingEventEntityFields.DECRYPTION_ERROR_CODE, String::class.java)
|
.addField("decryptionErrorCode", String::class.java)
|
||||||
.addField(GossipingEventEntityFields.AGE_LOCAL_TS, Long::class.java)
|
.addField("ageLocalTs", Long::class.java)
|
||||||
.setNullable(GossipingEventEntityFields.AGE_LOCAL_TS, true)
|
.setNullable("ageLocalTs", true)
|
||||||
.addField(GossipingEventEntityFields.SEND_STATE_STR, String::class.java)
|
.addField("sendStateStr", String::class.java)
|
||||||
|
|
||||||
realm.schema.create("IncomingGossipingRequestEntity")
|
realm.schema.create("IncomingGossipingRequestEntity")
|
||||||
.addField(IncomingGossipingRequestEntityFields.REQUEST_ID, String::class.java)
|
.addField("requestId", String::class.java)
|
||||||
.addIndex(IncomingGossipingRequestEntityFields.REQUEST_ID)
|
.addIndex("requestId")
|
||||||
.addField(IncomingGossipingRequestEntityFields.TYPE_STR, String::class.java)
|
.addField("typeStr", String::class.java)
|
||||||
.addIndex(IncomingGossipingRequestEntityFields.TYPE_STR)
|
.addIndex("typeStr")
|
||||||
.addField(IncomingGossipingRequestEntityFields.OTHER_USER_ID, String::class.java)
|
.addField("otherUserId", String::class.java)
|
||||||
.addField(IncomingGossipingRequestEntityFields.REQUESTED_INFO_STR, String::class.java)
|
.addField("requestedInfoStr", String::class.java)
|
||||||
.addField(IncomingGossipingRequestEntityFields.OTHER_DEVICE_ID, String::class.java)
|
.addField("otherDeviceId", String::class.java)
|
||||||
.addField(IncomingGossipingRequestEntityFields.REQUEST_STATE_STR, String::class.java)
|
.addField("requestStateStr", String::class.java)
|
||||||
.addField(IncomingGossipingRequestEntityFields.LOCAL_CREATION_TIMESTAMP, Long::class.java)
|
.addField("localCreationTimestamp", Long::class.java)
|
||||||
.setNullable(IncomingGossipingRequestEntityFields.LOCAL_CREATION_TIMESTAMP, true)
|
.setNullable("localCreationTimestamp", true)
|
||||||
|
|
||||||
realm.schema.create("OutgoingGossipingRequestEntity")
|
realm.schema.create("OutgoingGossipingRequestEntity")
|
||||||
.addField(OutgoingGossipingRequestEntityFields.REQUEST_ID, String::class.java)
|
.addField("requestId", String::class.java)
|
||||||
.addIndex(OutgoingGossipingRequestEntityFields.REQUEST_ID)
|
.addIndex("requestId")
|
||||||
.addField(OutgoingGossipingRequestEntityFields.RECIPIENTS_DATA, String::class.java)
|
.addField("recipientsData", String::class.java)
|
||||||
.addField(OutgoingGossipingRequestEntityFields.REQUESTED_INFO_STR, String::class.java)
|
.addField("requestedInfoStr", String::class.java)
|
||||||
.addField(OutgoingGossipingRequestEntityFields.TYPE_STR, String::class.java)
|
.addField("typeStr", String::class.java)
|
||||||
.addIndex(OutgoingGossipingRequestEntityFields.TYPE_STR)
|
.addIndex("typeStr")
|
||||||
.addField(OutgoingGossipingRequestEntityFields.REQUEST_STATE_STR, String::class.java)
|
.addField("requestStateStr", String::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import org.matrix.android.sdk.internal.crypto.store.db.model.KeyRequestReplyEnti
|
|||||||
import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingKeyRequestEntityFields
|
import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingKeyRequestEntityFields
|
||||||
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||||
|
|
||||||
internal class MigrateCryptoTo016(realm: DynamicRealm) : RealmMigrator(realm, 15) {
|
internal class MigrateCryptoTo016(realm: DynamicRealm) : RealmMigrator(realm, 16) {
|
||||||
|
|
||||||
override fun doMigrate(realm: DynamicRealm) {
|
override fun doMigrate(realm: DynamicRealm) {
|
||||||
realm.schema.remove("OutgoingGossipingRequestEntity")
|
realm.schema.remove("OutgoingGossipingRequestEntity")
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* 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 org.matrix.android.sdk.internal.crypto.store.db.model
|
|
||||||
|
|
||||||
import com.squareup.moshi.JsonDataException
|
|
||||||
import io.realm.RealmObject
|
|
||||||
import io.realm.annotations.Index
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.MXEventDecryptionResult
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.OlmDecryptionResult
|
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
|
||||||
import org.matrix.android.sdk.api.session.room.send.SendState
|
|
||||||
import org.matrix.android.sdk.internal.database.mapper.ContentMapper
|
|
||||||
import org.matrix.android.sdk.internal.di.MoshiProvider
|
|
||||||
import timber.log.Timber
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keep track of gossiping event received in toDevice messages
|
|
||||||
* (room key request, or sss secret sharing, as well as cancellations)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// not used anymore, just here for db migration
|
|
||||||
internal open class GossipingEventEntity(@Index var type: String? = "",
|
|
||||||
var content: String? = null,
|
|
||||||
@Index var sender: String? = null,
|
|
||||||
var decryptionResultJson: String? = null,
|
|
||||||
var decryptionErrorCode: String? = null,
|
|
||||||
var ageLocalTs: Long? = null) : RealmObject() {
|
|
||||||
|
|
||||||
private var sendStateStr: String = SendState.UNKNOWN.name
|
|
||||||
|
|
||||||
var sendState: SendState
|
|
||||||
get() {
|
|
||||||
return SendState.valueOf(sendStateStr)
|
|
||||||
}
|
|
||||||
set(value) {
|
|
||||||
sendStateStr = value.name
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object
|
|
||||||
|
|
||||||
fun setDecryptionResult(result: MXEventDecryptionResult) {
|
|
||||||
val decryptionResult = OlmDecryptionResult(
|
|
||||||
payload = result.clearEvent,
|
|
||||||
senderKey = result.senderCurve25519Key,
|
|
||||||
keysClaimed = result.claimedEd25519Key?.let { mapOf("ed25519" to it) },
|
|
||||||
forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain
|
|
||||||
)
|
|
||||||
val adapter = MoshiProvider.providesMoshi().adapter<OlmDecryptionResult>(OlmDecryptionResult::class.java)
|
|
||||||
decryptionResultJson = adapter.toJson(decryptionResult)
|
|
||||||
decryptionErrorCode = null
|
|
||||||
}
|
|
||||||
|
|
||||||
fun toModel(): Event {
|
|
||||||
return Event(
|
|
||||||
type = this.type ?: "",
|
|
||||||
content = ContentMapper.map(this.content),
|
|
||||||
senderId = this.sender
|
|
||||||
).also {
|
|
||||||
it.ageLocalTs = this.ageLocalTs
|
|
||||||
it.sendState = this.sendState
|
|
||||||
this.decryptionResultJson?.let { json ->
|
|
||||||
try {
|
|
||||||
it.mxDecryptionResult = MoshiProvider.providesMoshi().adapter(OlmDecryptionResult::class.java).fromJson(json)
|
|
||||||
} catch (t: JsonDataException) {
|
|
||||||
Timber.e(t, "Failed to parse decryption result")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// TODO get the full crypto error object
|
|
||||||
it.mCryptoError = this.decryptionErrorCode?.let { errorCode ->
|
|
||||||
MXCryptoError.ErrorType.valueOf(errorCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* 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 org.matrix.android.sdk.internal.crypto.store.db.model
|
|
||||||
|
|
||||||
import io.realm.RealmObject
|
|
||||||
import io.realm.annotations.Index
|
|
||||||
|
|
||||||
// not used anymore, just here for db migration
|
|
||||||
internal open class IncomingGossipingRequestEntity(@Index var requestId: String? = "",
|
|
||||||
@Index var typeStr: String? = null,
|
|
||||||
var otherUserId: String? = null,
|
|
||||||
var requestedInfoStr: String? = null,
|
|
||||||
var otherDeviceId: String? = null,
|
|
||||||
var localCreationTimestamp: Long? = null
|
|
||||||
) : RealmObject() {
|
|
||||||
|
|
||||||
private var requestStateStr: String = ""
|
|
||||||
|
|
||||||
companion object
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* 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 org.matrix.android.sdk.internal.crypto.store.db.model
|
|
||||||
|
|
||||||
import io.realm.RealmObject
|
|
||||||
import io.realm.annotations.Index
|
|
||||||
|
|
||||||
// not used anymore, just here for db migration
|
|
||||||
internal open class OutgoingGossipingRequestEntity(
|
|
||||||
@Index var requestId: String? = null,
|
|
||||||
var recipientsData: String? = null,
|
|
||||||
var requestedInfoStr: String? = null,
|
|
||||||
@Index var typeStr: String? = null
|
|
||||||
) : RealmObject() {
|
|
||||||
|
|
||||||
private var requestStateStr: String = ""
|
|
||||||
}
|
|
@ -423,7 +423,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
|
|||||||
private fun tentativeRestoreBackup(res: Map<String, String>?) {
|
private fun tentativeRestoreBackup(res: Map<String, String>?) {
|
||||||
// It's not a good idea to download the full backup, it might take very long
|
// It's not a good idea to download the full backup, it might take very long
|
||||||
// and use a lot of resources
|
// and use a lot of resources
|
||||||
// Just check that the ey is valid and store it, the backup will be used megolm session per
|
// Just check that the key is valid and store it, the backup will be used megolm session per
|
||||||
// megolm session when an UISI is encountered
|
// megolm session when an UISI is encountered
|
||||||
|
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user