mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 02:15:35 +03:00
Code review
This commit is contained in:
parent
23f32aae84
commit
0f06368027
6 changed files with 105 additions and 103 deletions
|
@ -1,76 +1,85 @@
|
|||
/*
|
||||
* Copyright 2022 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.api.session.crypto.model
|
||||
|
||||
import com.squareup.moshi.JsonClass
|
||||
import org.matrix.android.sdk.api.session.events.model.content.WithHeldCode
|
||||
|
||||
enum class TrailType {
|
||||
OutgoingKeyForward,
|
||||
IncomingKeyForward,
|
||||
OutgoingKeyWithheld,
|
||||
IncomingKeyRequest,
|
||||
Unknown
|
||||
}
|
||||
|
||||
interface AuditInfo {
|
||||
val roomId: String
|
||||
val sessionId: String
|
||||
val senderKey: String
|
||||
val alg: String
|
||||
val userId: String
|
||||
val deviceId: String
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class ForwardInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
override val userId: String,
|
||||
override val deviceId: String,
|
||||
val chainIndex: Long?
|
||||
) : AuditInfo
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class WithheldInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
val code: WithHeldCode,
|
||||
override val userId: String,
|
||||
override val deviceId: String
|
||||
) : AuditInfo
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class IncomingKeyRequestInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
override val userId: String,
|
||||
override val deviceId: String,
|
||||
val requestId: String
|
||||
) : AuditInfo
|
||||
|
||||
data class AuditTrail(
|
||||
val ageLocalTs: Long,
|
||||
val type: TrailType,
|
||||
val info: AuditInfo
|
||||
)
|
||||
/*
|
||||
* Copyright 2022 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.api.session.crypto.model
|
||||
|
||||
import com.squareup.moshi.JsonClass
|
||||
import org.matrix.android.sdk.api.session.events.model.content.WithHeldCode
|
||||
|
||||
enum class TrailType {
|
||||
OutgoingKeyForward,
|
||||
IncomingKeyForward,
|
||||
OutgoingKeyWithheld,
|
||||
IncomingKeyRequest,
|
||||
Unknown
|
||||
}
|
||||
|
||||
interface AuditInfo {
|
||||
val roomId: String
|
||||
val sessionId: String
|
||||
val senderKey: String
|
||||
val alg: String
|
||||
val userId: String
|
||||
val deviceId: String
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class ForwardInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
override val userId: String,
|
||||
override val deviceId: String,
|
||||
val chainIndex: Long?
|
||||
) : AuditInfo
|
||||
|
||||
object UnknownInfo : AuditInfo {
|
||||
override val roomId: String = ""
|
||||
override val sessionId: String = ""
|
||||
override val senderKey: String = ""
|
||||
override val alg: String = ""
|
||||
override val userId: String = ""
|
||||
override val deviceId: String = ""
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class WithheldInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
val code: WithHeldCode,
|
||||
override val userId: String,
|
||||
override val deviceId: String
|
||||
) : AuditInfo
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class IncomingKeyRequestInfo(
|
||||
override val roomId: String,
|
||||
override val sessionId: String,
|
||||
override val senderKey: String,
|
||||
override val alg: String,
|
||||
override val userId: String,
|
||||
override val deviceId: String,
|
||||
val requestId: String
|
||||
) : AuditInfo
|
||||
|
||||
data class AuditTrail(
|
||||
val ageLocalTs: Long,
|
||||
val type: TrailType,
|
||||
val info: AuditInfo
|
||||
)
|
||||
|
|
|
@ -96,9 +96,9 @@ internal class IncomingKeyRequestManager @Inject constructor(
|
|||
val requestId = this.requestId ?: return null
|
||||
if (body.algorithm != MXCRYPTO_ALGORITHM_MEGOLM) return null
|
||||
val action = when (this.action) {
|
||||
"request" -> MegolmRequestAction.Request
|
||||
"request" -> MegolmRequestAction.Request
|
||||
"request_cancellation" -> MegolmRequestAction.Cancel
|
||||
else -> null
|
||||
else -> null
|
||||
} ?: return null
|
||||
return ValidMegolmRequestBody(
|
||||
requestId = requestId,
|
||||
|
@ -112,6 +112,11 @@ internal class IncomingKeyRequestManager @Inject constructor(
|
|||
}
|
||||
|
||||
fun addNewIncomingRequest(senderId: String, request: RoomKeyShareRequest) {
|
||||
if (!cryptoStore.isKeyGossipingEnabled()) {
|
||||
Timber.tag(loggerTag.value)
|
||||
.i("Ignore incoming key request as per crypto config in room ${request.body?.roomId}")
|
||||
return
|
||||
}
|
||||
outgoingRequestScope.launch {
|
||||
// It is important to handle requests in order
|
||||
sequencer.post {
|
||||
|
@ -422,7 +427,8 @@ internal class IncomingKeyRequestManager @Inject constructor(
|
|||
MXCRYPTO_ALGORITHM_MEGOLM,
|
||||
requestingDevice.userId,
|
||||
requestingDevice.deviceId,
|
||||
chainIndex)
|
||||
chainIndex
|
||||
)
|
||||
true
|
||||
} catch (failure: Throwable) {
|
||||
Timber.tag(loggerTag.value)
|
||||
|
|
|
@ -953,13 +953,13 @@ internal class RealmCryptoStore @Inject constructor(
|
|||
|
||||
override fun enableKeyGossiping(enable: Boolean) {
|
||||
doRealmTransaction(realmConfiguration) {
|
||||
it.where<CryptoMetadataEntity>().findFirst()?.globalEnableKeyRequestingAndSharing = enable
|
||||
it.where<CryptoMetadataEntity>().findFirst()?.globalEnableKeyGossiping = enable
|
||||
}
|
||||
}
|
||||
|
||||
override fun isKeyGossipingEnabled(): Boolean {
|
||||
return doWithRealm(realmConfiguration) {
|
||||
it.where<CryptoMetadataEntity>().findFirst()?.globalEnableKeyRequestingAndSharing
|
||||
it.where<CryptoMetadataEntity>().findFirst()?.globalEnableKeyGossiping
|
||||
} ?: true
|
||||
}
|
||||
|
||||
|
|
|
@ -61,10 +61,10 @@ internal class MigrateCryptoTo016(realm: DynamicRealm) : RealmMigrator(realm, 16
|
|||
.addIndex(AuditTrailEntityFields.TYPE)
|
||||
|
||||
realm.schema.get("CryptoMetadataEntity")
|
||||
?.addField(CryptoMetadataEntityFields.GLOBAL_ENABLE_KEY_REQUESTING_AND_SHARING, Boolean::class.java)
|
||||
?.addField(CryptoMetadataEntityFields.GLOBAL_ENABLE_KEY_GOSSIPING, Boolean::class.java)
|
||||
?.transform {
|
||||
// set the default value to true
|
||||
it.setBoolean(CryptoMetadataEntityFields.GLOBAL_ENABLE_KEY_REQUESTING_AND_SHARING, true)
|
||||
it.setBoolean(CryptoMetadataEntityFields.GLOBAL_ENABLE_KEY_GOSSIPING, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
package org.matrix.android.sdk.internal.crypto.store.db.model
|
||||
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.session.crypto.model.AuditInfo
|
||||
import org.matrix.android.sdk.api.session.crypto.model.AuditTrail
|
||||
import org.matrix.android.sdk.api.session.crypto.model.ForwardInfo
|
||||
import org.matrix.android.sdk.api.session.crypto.model.IncomingKeyRequestInfo
|
||||
import org.matrix.android.sdk.api.session.crypto.model.TrailType
|
||||
import org.matrix.android.sdk.api.session.crypto.model.UnknownInfo
|
||||
import org.matrix.android.sdk.api.session.crypto.model.WithheldInfo
|
||||
import org.matrix.android.sdk.internal.di.MoshiProvider
|
||||
|
||||
|
@ -30,7 +30,7 @@ internal object AuditTrailMapper {
|
|||
fun map(entity: AuditTrailEntity): AuditTrail? {
|
||||
val contentJson = entity.contentJson ?: return null
|
||||
return when (entity.type) {
|
||||
TrailType.OutgoingKeyForward.name -> {
|
||||
TrailType.OutgoingKeyForward.name -> {
|
||||
val info = tryOrNull {
|
||||
MoshiProvider.providesMoshi().adapter(ForwardInfo::class.java).fromJson(contentJson)
|
||||
} ?: return null
|
||||
|
@ -50,7 +50,7 @@ internal object AuditTrailMapper {
|
|||
info = info
|
||||
)
|
||||
}
|
||||
TrailType.IncomingKeyRequest.name -> {
|
||||
TrailType.IncomingKeyRequest.name -> {
|
||||
val info = tryOrNull {
|
||||
MoshiProvider.providesMoshi().adapter(IncomingKeyRequestInfo::class.java).fromJson(contentJson)
|
||||
} ?: return null
|
||||
|
@ -60,7 +60,7 @@ internal object AuditTrailMapper {
|
|||
info = info
|
||||
)
|
||||
}
|
||||
TrailType.IncomingKeyForward.name -> {
|
||||
TrailType.IncomingKeyForward.name -> {
|
||||
val info = tryOrNull {
|
||||
MoshiProvider.providesMoshi().adapter(ForwardInfo::class.java).fromJson(contentJson)
|
||||
} ?: return null
|
||||
|
@ -70,24 +70,11 @@ internal object AuditTrailMapper {
|
|||
info = info
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
else -> {
|
||||
AuditTrail(
|
||||
ageLocalTs = entity.ageLocalTs ?: 0,
|
||||
type = TrailType.Unknown,
|
||||
info = object : AuditInfo {
|
||||
override val roomId: String
|
||||
get() = ""
|
||||
override val sessionId: String
|
||||
get() = ""
|
||||
override val senderKey: String
|
||||
get() = ""
|
||||
override val alg: String
|
||||
get() = ""
|
||||
override val userId: String
|
||||
get() = ""
|
||||
override val deviceId: String
|
||||
get() = ""
|
||||
}
|
||||
info = UnknownInfo
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ internal open class CryptoMetadataEntity(
|
|||
// Settings for blacklisting unverified devices.
|
||||
var globalBlacklistUnverifiedDevices: Boolean = false,
|
||||
// setting to enable or disable key gossiping
|
||||
var globalEnableKeyRequestingAndSharing: Boolean = true,
|
||||
var globalEnableKeyGossiping: Boolean = true,
|
||||
// The keys backup version currently used. Null means no backup.
|
||||
var backupVersion: String? = null,
|
||||
|
||||
|
|
Loading…
Reference in a new issue