Merge pull request #1586 from famedly/krille/add-methods-to-load-all-keys
feat: Add methods to load all room keys from online key backup
This commit is contained in:
commit
9fa0710a33
|
|
@ -667,6 +667,31 @@ class KeyManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Loads and stores all keys from the online key backup. This may take a
|
||||||
|
/// while for older and big accounts.
|
||||||
|
Future<void> loadAllKeys() async {
|
||||||
|
final info = await getRoomKeysBackupInfo();
|
||||||
|
final ret = await client.getRoomKeys(info.version);
|
||||||
|
await loadFromResponse(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Loads all room keys for a single room and stores them. This may take a
|
||||||
|
/// while for older and big rooms.
|
||||||
|
Future<void> loadAllKeysFromRoom(String roomId) async {
|
||||||
|
final info = await getRoomKeysBackupInfo();
|
||||||
|
final ret = await client.getRoomKeysByRoomId(roomId, info.version);
|
||||||
|
final keys = RoomKeys.fromJson({
|
||||||
|
'rooms': {
|
||||||
|
roomId: {
|
||||||
|
'sessions': ret.sessions.map((k, s) => MapEntry(k, s.toJson())),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await loadFromResponse(keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Loads a single key for the specified room from the online key backup
|
||||||
|
/// and stores it.
|
||||||
Future<void> loadSingleKey(String roomId, String sessionId) async {
|
Future<void> loadSingleKey(String roomId, String sessionId) async {
|
||||||
final info = await getRoomKeysBackupInfo();
|
final info = await getRoomKeysBackupInfo();
|
||||||
final ret =
|
final ret =
|
||||||
|
|
|
||||||
|
|
@ -67,9 +67,35 @@ void main() {
|
||||||
.request(client.getRoomById(roomId)!, sessionId, senderKey);
|
.request(client.getRoomById(roomId)!, sessionId, senderKey);
|
||||||
expect(
|
expect(
|
||||||
client.encryption!.keyManager
|
client.encryption!.keyManager
|
||||||
.getInboundGroupSession(roomId, sessionId) !=
|
.getInboundGroupSession(roomId, sessionId)
|
||||||
null,
|
?.sessionId,
|
||||||
true);
|
sessionId);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Load all Room Keys', () async {
|
||||||
|
if (!olmEnabled) return;
|
||||||
|
final keyManager = client.encryption!.keyManager;
|
||||||
|
const roomId = '!getroomkeys726s6s6q:example.com';
|
||||||
|
const sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU';
|
||||||
|
expect(keyManager.getInboundGroupSession(roomId, sessionId), null);
|
||||||
|
await client.encryption!.keyManager.loadAllKeysFromRoom(roomId);
|
||||||
|
expect(
|
||||||
|
keyManager.getInboundGroupSession(roomId, sessionId)?.sessionId,
|
||||||
|
sessionId,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Load all Keys', () async {
|
||||||
|
if (!olmEnabled) return;
|
||||||
|
final keyManager = client.encryption!.keyManager;
|
||||||
|
const roomId = '!getallkeys726s6s6q:example.com';
|
||||||
|
const sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU';
|
||||||
|
expect(keyManager.getInboundGroupSession(roomId, sessionId), null);
|
||||||
|
await client.encryption!.keyManager.loadAllKeys();
|
||||||
|
expect(
|
||||||
|
keyManager.getInboundGroupSession(roomId, sessionId)?.sessionId,
|
||||||
|
sessionId,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('upload key', () async {
|
test('upload key', () async {
|
||||||
|
|
|
||||||
|
|
@ -1936,7 +1936,7 @@ class FakeMatrixApi extends BaseClient {
|
||||||
'mac': 'QzKV/fgAs4U',
|
'mac': 'QzKV/fgAs4U',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}?version=5':
|
'/client/v3/room_keys/keys/${Uri.encodeComponent('!getroomkeys726s6s6q:example.com')}?version=5':
|
||||||
(var req) => {
|
(var req) => {
|
||||||
'sessions': {
|
'sessions': {
|
||||||
'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': {
|
'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': {
|
||||||
|
|
@ -1955,7 +1955,7 @@ class FakeMatrixApi extends BaseClient {
|
||||||
},
|
},
|
||||||
'/client/v3/room_keys/keys?version=5': (var req) => {
|
'/client/v3/room_keys/keys?version=5': (var req) => {
|
||||||
'rooms': {
|
'rooms': {
|
||||||
'!726s6s6q:example.com': {
|
'!getallkeys726s6s6q:example.com': {
|
||||||
'sessions': {
|
'sessions': {
|
||||||
'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': {
|
'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': {
|
||||||
'first_message_index': 0,
|
'first_message_index': 0,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue