mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-01-01 13:58:32 +03:00
rust: Allow individual room keys to be invalid when importing
This commit is contained in:
parent
38644f0aa2
commit
3f710ef4c0
1 changed files with 12 additions and 5 deletions
|
@ -27,7 +27,7 @@ use ruma::{
|
||||||
DeviceKeyAlgorithm, EventId, RoomId, UserId,
|
DeviceKeyAlgorithm, EventId, RoomId, UserId,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::value::RawValue;
|
use serde_json::{value::RawValue, Value};
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
use matrix_sdk_common::{deserialized_responses::AlgorithmInfo, uuid::Uuid};
|
use matrix_sdk_common::{deserialized_responses::AlgorithmInfo, uuid::Uuid};
|
||||||
|
@ -613,7 +613,7 @@ impl OlmMachine {
|
||||||
Ok(encrypted)
|
Ok(encrypted)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn impor_keys_helper(
|
fn import_keys_helper(
|
||||||
&self,
|
&self,
|
||||||
keys: Vec<ExportedRoomKey>,
|
keys: Vec<ExportedRoomKey>,
|
||||||
progress_listener: Box<dyn ProgressListener>,
|
progress_listener: Box<dyn ProgressListener>,
|
||||||
|
@ -650,7 +650,7 @@ impl OlmMachine {
|
||||||
) -> Result<KeysImportResult, KeyImportError> {
|
) -> Result<KeysImportResult, KeyImportError> {
|
||||||
let keys = Cursor::new(keys);
|
let keys = Cursor::new(keys);
|
||||||
let keys = decrypt_key_export(keys, passphrase)?;
|
let keys = decrypt_key_export(keys, passphrase)?;
|
||||||
self.impor_keys_helper(keys, progress_listener)
|
self.import_keys_helper(keys, progress_listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Import room keys from the given serialized unencrypted key export.
|
/// Import room keys from the given serialized unencrypted key export.
|
||||||
|
@ -670,8 +670,15 @@ impl OlmMachine {
|
||||||
keys: &str,
|
keys: &str,
|
||||||
progress_listener: Box<dyn ProgressListener>,
|
progress_listener: Box<dyn ProgressListener>,
|
||||||
) -> Result<KeysImportResult, KeyImportError> {
|
) -> Result<KeysImportResult, KeyImportError> {
|
||||||
let keys: Vec<ExportedRoomKey> = serde_json::from_str(keys)?;
|
let keys: Vec<Value> = serde_json::from_str(keys)?;
|
||||||
self.impor_keys_helper(keys, progress_listener)
|
|
||||||
|
let keys = keys
|
||||||
|
.into_iter()
|
||||||
|
.map(serde_json::from_value)
|
||||||
|
.filter_map(|k| k.ok())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
self.import_keys_helper(keys, progress_listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Discard the currently active room key for the given room if there is
|
/// Discard the currently active room key for the given room if there is
|
||||||
|
|
Loading…
Reference in a new issue