mirror of
https://github.com/element-hq/element-android
synced 2024-11-28 13:38:49 +03:00
Fix / protect against crash during migration
This commit is contained in:
parent
024c62515c
commit
a995615f87
1 changed files with 35 additions and 29 deletions
|
@ -102,38 +102,44 @@ internal object RealmCryptoStoreMigration : RealmMigration {
|
||||||
?.addRealmObjectField(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevelentityEntitySchema)
|
?.addRealmObjectField(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevelentityEntitySchema)
|
||||||
?.transform { obj ->
|
?.transform { obj ->
|
||||||
|
|
||||||
val oldSerializedData = obj.getString("deviceInfoData")
|
try {
|
||||||
deserializeFromRealm<MXDeviceInfo>(oldSerializedData)?.let { oldDevice ->
|
val oldSerializedData = obj.getString("deviceInfoData")
|
||||||
|
deserializeFromRealm<MXDeviceInfo>(oldSerializedData)?.let { oldDevice ->
|
||||||
|
|
||||||
val trustLevel = realm.createObject("TrustLevelEntity")
|
val trustLevel = realm.createObject("TrustLevelEntity")
|
||||||
when (oldDevice.verified) {
|
when (oldDevice.verified) {
|
||||||
MXDeviceInfo.DEVICE_VERIFICATION_UNKNOWN -> {
|
MXDeviceInfo.DEVICE_VERIFICATION_UNKNOWN -> {
|
||||||
obj.setNull(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`)
|
obj.setNull(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`)
|
||||||
}
|
}
|
||||||
MXDeviceInfo.DEVICE_VERIFICATION_BLOCKED -> {
|
MXDeviceInfo.DEVICE_VERIFICATION_BLOCKED -> {
|
||||||
trustLevel.setNull(TrustLevelEntityFields.LOCALLY_VERIFIED)
|
trustLevel.setNull(TrustLevelEntityFields.LOCALLY_VERIFIED)
|
||||||
trustLevel.setNull(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED)
|
trustLevel.setNull(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED)
|
||||||
obj.setBoolean(DeviceInfoEntityFields.IS_BLOCKED, oldDevice.isBlocked)
|
obj.setBoolean(DeviceInfoEntityFields.IS_BLOCKED, oldDevice.isBlocked)
|
||||||
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
||||||
}
|
}
|
||||||
MXDeviceInfo.DEVICE_VERIFICATION_UNVERIFIED -> {
|
MXDeviceInfo.DEVICE_VERIFICATION_UNVERIFIED -> {
|
||||||
trustLevel.setBoolean(TrustLevelEntityFields.LOCALLY_VERIFIED, false)
|
trustLevel.setBoolean(TrustLevelEntityFields.LOCALLY_VERIFIED, false)
|
||||||
trustLevel.setBoolean(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED, false)
|
trustLevel.setBoolean(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED, false)
|
||||||
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
||||||
}
|
}
|
||||||
MXDeviceInfo.DEVICE_VERIFICATION_VERIFIED -> {
|
MXDeviceInfo.DEVICE_VERIFICATION_VERIFIED -> {
|
||||||
trustLevel.setBoolean(TrustLevelEntityFields.LOCALLY_VERIFIED, true)
|
trustLevel.setBoolean(TrustLevelEntityFields.LOCALLY_VERIFIED, true)
|
||||||
trustLevel.setBoolean(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED, false)
|
trustLevel.setBoolean(TrustLevelEntityFields.CROSS_SIGNED_VERIFIED, false)
|
||||||
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
obj.setObject(DeviceInfoEntityFields.TRUST_LEVEL_ENTITY.`$`, trustLevel)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
obj.setString(DeviceInfoEntityFields.USER_ID, oldDevice.userId)
|
||||||
|
obj.setString(DeviceInfoEntityFields.IDENTITY_KEY, oldDevice.identityKey())
|
||||||
|
obj.setString(DeviceInfoEntityFields.ALGORITHM_LIST_JSON, listMigrationAdapter.toJson(oldDevice.algorithms))
|
||||||
|
obj.setString(DeviceInfoEntityFields.KEYS_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.keys))
|
||||||
|
obj.setString(DeviceInfoEntityFields.SIGNATURE_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.signatures))
|
||||||
|
obj.setString(DeviceInfoEntityFields.UNSIGNED_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.unsigned))
|
||||||
}
|
}
|
||||||
|
} catch (failure: Throwable) {
|
||||||
obj.setString(DeviceInfoEntityFields.USER_ID, oldDevice.userId)
|
Timber.w(failure, "Crypto Data base migration error")
|
||||||
obj.setString(DeviceInfoEntityFields.IDENTITY_KEY, oldDevice.identityKey())
|
// an unfortunate refactor did modify that class, making deserialization failing
|
||||||
obj.setString(DeviceInfoEntityFields.ALGORITHM_LIST_JSON, listMigrationAdapter.toJson(oldDevice.algorithms))
|
// so we just skip and ignore..
|
||||||
obj.setString(DeviceInfoEntityFields.KEYS_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.keys))
|
|
||||||
obj.setString(DeviceInfoEntityFields.SIGNATURE_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.signatures))
|
|
||||||
obj.setString(DeviceInfoEntityFields.UNSIGNED_MAP_JSON, mapMigrationAdapter.toJson(oldDevice.unsigned))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?.removeField("deviceInfoData")
|
?.removeField("deviceInfoData")
|
||||||
|
|
Loading…
Reference in a new issue