mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-16 20:10:04 +03:00
Add MXCryptoConfig flag for key history sharing
Add shared_history flag to sessionBackupData
This commit is contained in:
parent
fb352ffa38
commit
a9a7400fef
5 changed files with 29 additions and 5 deletions
|
@ -38,4 +38,10 @@ data class MXCryptoConfig constructor(
|
||||||
* You can limit request only to your sessions by turning this setting to `true`
|
* You can limit request only to your sessions by turning this setting to `true`
|
||||||
*/
|
*/
|
||||||
val limitRoomKeyRequestsToMyDevices: Boolean = false,
|
val limitRoomKeyRequestsToMyDevices: Boolean = false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag that indicates whether or not key history will be shared to invited
|
||||||
|
* users with respect to room visibility
|
||||||
|
*/
|
||||||
|
val shouldShareKeyHistory: Boolean = true,
|
||||||
)
|
)
|
||||||
|
|
|
@ -1429,7 +1429,8 @@ internal class DefaultKeysBackupService @Inject constructor(
|
||||||
"sender_key" to sessionData.senderKey,
|
"sender_key" to sessionData.senderKey,
|
||||||
"sender_claimed_keys" to sessionData.senderClaimedKeys,
|
"sender_claimed_keys" to sessionData.senderClaimedKeys,
|
||||||
"forwarding_curve25519_key_chain" to (sessionData.forwardingCurve25519KeyChain.orEmpty()),
|
"forwarding_curve25519_key_chain" to (sessionData.forwardingCurve25519KeyChain.orEmpty()),
|
||||||
"session_key" to sessionData.sessionKey
|
"session_key" to sessionData.sessionKey,
|
||||||
|
"org.matrix.msc3061.shared_history" to sessionData.sharedHistory
|
||||||
)
|
)
|
||||||
|
|
||||||
val json = MoshiProvider.providesMoshi()
|
val json = MoshiProvider.providesMoshi()
|
||||||
|
@ -1456,7 +1457,7 @@ internal class DefaultKeysBackupService @Inject constructor(
|
||||||
},
|
},
|
||||||
forwardedCount = olmInboundGroupSessionWrapper.sessionData.forwardingCurve25519KeyChain.orEmpty().size,
|
forwardedCount = olmInboundGroupSessionWrapper.sessionData.forwardingCurve25519KeyChain.orEmpty().size,
|
||||||
isVerified = device?.isVerified == true,
|
isVerified = device?.isVerified == true,
|
||||||
|
sharedHistory = olmInboundGroupSessionWrapper.sessionData.sharedHistory,
|
||||||
sessionData = mapOf(
|
sessionData = mapOf(
|
||||||
"ciphertext" to encryptedSessionBackupData.mCipherText,
|
"ciphertext" to encryptedSessionBackupData.mCipherText,
|
||||||
"mac" to encryptedSessionBackupData.mMac,
|
"mac" to encryptedSessionBackupData.mMac,
|
||||||
|
|
|
@ -50,5 +50,12 @@ internal data class KeyBackupData(
|
||||||
* Algorithm-dependent data.
|
* Algorithm-dependent data.
|
||||||
*/
|
*/
|
||||||
@Json(name = "session_data")
|
@Json(name = "session_data")
|
||||||
val sessionData: JsonDict
|
val sessionData: JsonDict,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag that indicates whether or not the current inboundSession will be shared to
|
||||||
|
* invited users to decrypt past messages
|
||||||
|
*/
|
||||||
|
@Json(name = "org.matrix.msc3061.shared_history")
|
||||||
|
val sharedHistory: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,6 +26,7 @@ import io.realm.RealmConfiguration
|
||||||
import io.realm.Sort
|
import io.realm.Sort
|
||||||
import io.realm.kotlin.createObject
|
import io.realm.kotlin.createObject
|
||||||
import io.realm.kotlin.where
|
import io.realm.kotlin.where
|
||||||
|
import org.matrix.android.sdk.api.MatrixConfiguration
|
||||||
import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
import org.matrix.android.sdk.api.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
||||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||||
import org.matrix.android.sdk.api.logger.LoggerTag
|
import org.matrix.android.sdk.api.logger.LoggerTag
|
||||||
|
@ -111,6 +112,7 @@ internal class RealmCryptoStore @Inject constructor(
|
||||||
private val crossSigningKeysMapper: CrossSigningKeysMapper,
|
private val crossSigningKeysMapper: CrossSigningKeysMapper,
|
||||||
@UserId private val userId: String,
|
@UserId private val userId: String,
|
||||||
@DeviceId private val deviceId: String?,
|
@DeviceId private val deviceId: String?,
|
||||||
|
private val matrixConfiguration: MatrixConfiguration,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
) : IMXCryptoStore {
|
) : IMXCryptoStore {
|
||||||
|
|
||||||
|
@ -658,6 +660,7 @@ internal class RealmCryptoStore @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun shouldShareHistory(roomId: String): Boolean {
|
override fun shouldShareHistory(roomId: String): Boolean {
|
||||||
|
if (!matrixConfiguration.cryptoConfig.shouldShareKeyHistory) return false
|
||||||
return doWithRealm(realmConfiguration) {
|
return doWithRealm(realmConfiguration) {
|
||||||
CryptoRoomEntity.getById(it, roomId)?.shouldShareHistory
|
CryptoRoomEntity.getById(it, roomId)?.shouldShareHistory
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmQuery
|
import io.realm.RealmQuery
|
||||||
|
import org.matrix.android.sdk.api.MatrixConfiguration
|
||||||
import org.matrix.android.sdk.api.session.crypto.CryptoService
|
import org.matrix.android.sdk.api.session.crypto.CryptoService
|
||||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||||
import org.matrix.android.sdk.api.session.room.members.MembershipService
|
import org.matrix.android.sdk.api.session.room.members.MembershipService
|
||||||
|
@ -57,6 +58,7 @@ internal class DefaultMembershipService @AssistedInject constructor(
|
||||||
private val cryptoService: CryptoService,
|
private val cryptoService: CryptoService,
|
||||||
@UserId
|
@UserId
|
||||||
private val userId: String,
|
private val userId: String,
|
||||||
|
private val matrixConfiguration: MatrixConfiguration,
|
||||||
private val queryStringValueProcessor: QueryStringValueProcessor
|
private val queryStringValueProcessor: QueryStringValueProcessor
|
||||||
) : MembershipService {
|
) : MembershipService {
|
||||||
|
|
||||||
|
@ -144,13 +146,18 @@ internal class DefaultMembershipService @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun invite(userId: String, reason: String?) {
|
override suspend fun invite(userId: String, reason: String?) {
|
||||||
|
sendShareHistoryKeysIfNeeded(userId)
|
||||||
|
val params = InviteTask.Params(roomId, userId, reason)
|
||||||
|
inviteTask.execute(params)
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun sendShareHistoryKeysIfNeeded(userId: String) {
|
||||||
|
if (!matrixConfiguration.cryptoConfig.shouldShareKeyHistory) return
|
||||||
// TODO not sure it's the right way to get the latest messages in a room
|
// TODO not sure it's the right way to get the latest messages in a room
|
||||||
val sessionInfo = Realm.getInstance(monarchy.realmConfiguration).use {
|
val sessionInfo = Realm.getInstance(monarchy.realmConfiguration).use {
|
||||||
ChunkEntity.findLatestSessionInfo(it, roomId)
|
ChunkEntity.findLatestSessionInfo(it, roomId)
|
||||||
}
|
}
|
||||||
cryptoService.sendSharedHistoryKeys(roomId, userId, sessionInfo)
|
cryptoService.sendSharedHistoryKeys(roomId, userId, sessionInfo)
|
||||||
val params = InviteTask.Params(roomId, userId, reason)
|
|
||||||
inviteTask.execute(params)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun invite3pid(threePid: ThreePid) {
|
override suspend fun invite3pid(threePid: ThreePid) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue