Skip to content

Commit

Permalink
post rebase fix
Browse files Browse the repository at this point in the history
  • Loading branch information
BillCarsonFr committed May 11, 2022
1 parent 8739c48 commit ffc7074
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ import org.matrix.android.sdk.internal.crypto.tasks.SetDeviceNameTask
import org.matrix.android.sdk.internal.crypto.tasks.UploadKeysTask
import org.matrix.android.sdk.internal.crypto.verification.DefaultVerificationService
import org.matrix.android.sdk.internal.crypto.verification.VerificationMessageProcessor
import org.matrix.android.sdk.internal.database.helper.SessionInfoPair
import org.matrix.android.sdk.internal.di.DeviceId
import org.matrix.android.sdk.internal.di.MoshiProvider
import org.matrix.android.sdk.internal.di.UserId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ internal class IncomingKeyRequestManager @Inject constructor(
}

val export = sessionHolder.mutex.withLock {
sessionHolder.wrapper.exportKeys(chainIndex)
sessionHolder.wrapper.exportKeys(/**TODO*/ false ,chainIndex)
} ?: return false.also {
Timber.tag(loggerTag.value)
.e("shareKeysWithDevice: failed to export group session ${validRequest.sessionId}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ import org.matrix.android.sdk.api.session.events.model.content.RoomKeyContent
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.internal.crypto.MXOlmDevice
import org.matrix.android.sdk.internal.crypto.MegolmSessionData
import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction
import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter
import org.matrix.android.sdk.internal.crypto.OutgoingKeyRequestManager
import org.matrix.android.sdk.internal.crypto.algorithms.IMXDecrypting
import org.matrix.android.sdk.internal.crypto.keysbackup.DefaultKeysBackupService
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
Expand Down Expand Up @@ -150,7 +149,8 @@ internal class MXMegolmDecryption(
throw MXCryptoError.Base(
MXCryptoError.ErrorType.KEYS_WITHHELD,
withHeldInfo.code?.value ?: "",
withHeldInfo.reason)
withHeldInfo.reason
)
}

if (requestKeysOnFail) {
Expand Down Expand Up @@ -249,9 +249,9 @@ internal class MXMegolmDecryption(
)

when (addSessionResult) {
is MXOlmDevice.AddSessionResult.Imported -> addSessionResult.ratchetIndex
is MXOlmDevice.AddSessionResult.Imported -> addSessionResult.ratchetIndex
is MXOlmDevice.AddSessionResult.NotImportedHigherIndex -> addSessionResult.newIndex
else -> null
else -> null
}?.let { index ->
if (event.getClearType() == EventType.FORWARDED_ROOM_KEY) {
val fromDevice = (event.content?.get("sender_key") as? String)?.let { senderDeviceIdentityKey ->
Expand All @@ -268,7 +268,8 @@ internal class MXMegolmDecryption(
senderKey = senderKey,
fromIndex = index,
fromDevice = fromDevice,
event = event)
event = event
)

cryptoStore.saveIncomingForwardKeyAuditTrail(
roomId = roomKeyContent.roomId,
Expand All @@ -277,7 +278,8 @@ internal class MXMegolmDecryption(
algorithm = roomKeyContent.algorithm ?: "",
userId = event.senderId ?: "",
deviceId = fromDevice ?: "",
chainIndex = index.toLong())
chainIndex = index.toLong()
)

// The index is used to decide if we cancel sent request or if we wait for a better key
outgoingKeyRequestManager.postCancelRequestForSessionIfNeeded(roomKeyContent.sessionId, roomKeyContent.roomId, senderKey, index)
Expand All @@ -304,44 +306,44 @@ internal class MXMegolmDecryption(
Timber.tag(loggerTag.value).v("ON NEW SESSION $sessionId - $senderKey")
newSessionListener?.onNewSession(roomId, senderKey, sessionId)
}
override fun shareKeysWithDevice(exportedKeys: MegolmSessionData?, deviceId: String, userId: String) {
exportedKeys ?: return
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
runCatching { deviceListManager.downloadKeys(listOf(userId), false) }
.mapCatching {
val deviceInfo = cryptoStore.getUserDevice(userId, deviceId)
if (deviceInfo == null) {
throw RuntimeException()
} else {
val devicesByUser = mapOf(userId to listOf(deviceInfo))
val usersDeviceMap = ensureOlmSessionsForDevicesAction.handle(devicesByUser)
val olmSessionResult = usersDeviceMap.getObject(userId, deviceId)
if (olmSessionResult?.sessionId == null) {
// no session with this device, probably because there
// were no one-time keys.
Timber.tag(loggerTag.value).e("no session with this device $deviceId, probably because there were no one-time keys.")
return@mapCatching
}
Timber.tag(loggerTag.value).i("shareKeysWithDevice() : sharing session ${exportedKeys.sessionId} with device $userId:$deviceId")

val payloadJson = mapOf(
"type" to EventType.FORWARDED_ROOM_KEY,
"content" to exportedKeys
)

val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
val sendToDeviceMap = MXUsersDevicesMap<Any>()
sendToDeviceMap.setObject(userId, deviceId, encodedPayload)
Timber.tag(loggerTag.value).i("shareKeysWithDevice() : sending ${exportedKeys.sessionId} to $userId:$deviceId")
val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
try {
sendToDeviceTask.execute(sendToDeviceParams)
} catch (failure: Throwable) {
Timber.tag(loggerTag.value).e(failure, "shareKeysWithDevice() : Failed to send ${exportedKeys.sessionId} to $userId:$deviceId")
}
}
}
}
}

override fun shareForwardKeysWithDevice(exportedKeys: MegolmSessionData?, deviceId: String, userId: String) {
// exportedKeys ?: return
// cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
// runCatching { deviceListManager.downloadKeys(listOf(userId), false) }
// .mapCatching {
// val deviceInfo = cryptoStore.getUserDevice(userId, deviceId)
// if (deviceInfo == null) {
// throw RuntimeException()
// } else {
// val devicesByUser = mapOf(userId to listOf(deviceInfo))
// val usersDeviceMap = ensureOlmSessionsForDevicesAction.handle(devicesByUser)
// val olmSessionResult = usersDeviceMap.getObject(userId, deviceId)
// if (olmSessionResult?.sessionId == null) {
// // no session with this device, probably because there
// // were no one-time keys.
// Timber.tag(loggerTag.value).e("no session with this device $deviceId, probably because there were no one-time keys.")
// return@mapCatching
// }
// Timber.tag(loggerTag.value).i("shareKeysWithDevice() : sharing session ${exportedKeys.sessionId} with device $userId:$deviceId")
//
// val payloadJson = mapOf(
// "type" to EventType.FORWARDED_ROOM_KEY,
// "content" to exportedKeys
// )
//
// val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
// val sendToDeviceMap = MXUsersDevicesMap<Any>()
// sendToDeviceMap.setObject(userId, deviceId, encodedPayload)
// Timber.tag(loggerTag.value).i("shareKeysWithDevice() : sending ${exportedKeys.sessionId} to $userId:$deviceId")
// val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
// try {
// sendToDeviceTask.execute(sendToDeviceParams)
// } catch (failure: Throwable) {
// Timber.tag(loggerTag.value).e(failure, "shareKeysWithDevice() : Failed to send ${exportedKeys.sessionId} to $userId:$deviceId")
// }
// }
// }
// }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,6 @@ internal class RealmCryptoStoreMigration @Inject constructor(
if (oldVersion < 14) MigrateCryptoTo014(realm).perform()
if (oldVersion < 15) MigrateCryptoTo015(realm).perform()
if (oldVersion < 16) MigrateCryptoTo016(realm).perform()
<<<<<<< develop
if (oldVersion < 17) MigrateCryptoTo017(realm).perform()
=======
>>>>>>> Implement history key sharing functionality with respect to room visibility settings
}
}

0 comments on commit ffc7074

Please sign in to comment.