Merge branch 'krille/request-keys' into 'main'

feat: Allow auto request keys via key sharing requests

See merge request famedly/company/frontend/famedlysdk!1116
This commit is contained in:
Krille Fear 2022-08-29 09:20:35 +00:00
commit 76a94e0319
2 changed files with 25 additions and 6 deletions

View File

@ -226,7 +226,13 @@ class KeyManager {
} }
/// Attempt auto-request for a key /// Attempt auto-request for a key
void maybeAutoRequest(String roomId, String sessionId, String senderKey) { void maybeAutoRequest(
String roomId,
String sessionId,
String senderKey, {
bool tryOnlineBackup = true,
bool onlineKeyBackupOnly = true,
}) {
final room = client.getRoomById(roomId); final room = client.getRoomById(roomId);
final requestIdent = '$roomId|$sessionId|$senderKey'; final requestIdent = '$roomId|$sessionId|$senderKey';
if (room != null && if (room != null &&
@ -234,8 +240,13 @@ class KeyManager {
!client.isUnknownSession) { !client.isUnknownSession) {
// do e2ee recovery // do e2ee recovery
_requestedSessionIds.add(requestIdent); _requestedSessionIds.add(requestIdent);
runInRoot( runInRoot(() => request(
() => request(room, sessionId, senderKey, onlineKeyBackupOnly: true)); room,
sessionId,
senderKey,
tryOnlineBackup: tryOnlineBackup,
onlineKeyBackupOnly: onlineKeyBackupOnly,
));
} }
} }

View File

@ -333,14 +333,22 @@ class Timeline {
} }
/// Request the keys for undecryptable events of this timeline /// Request the keys for undecryptable events of this timeline
void requestKeys() { void requestKeys({
bool tryOnlineBackup = true,
bool onlineKeyBackupOnly = true,
}) {
for (final event in events) { for (final event in events) {
if (event.type == EventTypes.Encrypted && if (event.type == EventTypes.Encrypted &&
event.messageType == MessageTypes.BadEncrypted && event.messageType == MessageTypes.BadEncrypted &&
event.content['can_request_session'] == true) { event.content['can_request_session'] == true) {
try { try {
room.client.encryption?.keyManager.maybeAutoRequest(room.id, room.client.encryption?.keyManager.maybeAutoRequest(
event.content['session_id'], event.content['sender_key']); room.id,
event.content['session_id'],
event.content['sender_key'],
tryOnlineBackup: tryOnlineBackup,
onlineKeyBackupOnly: onlineKeyBackupOnly,
);
} catch (_) { } catch (_) {
// dispose // dispose
} }