mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-17 05:55:00 +08:00
Decrypt events ahead of storing them in the index
This commit is contained in:
parent
6e3f8d6a0a
commit
d0d2907a07
@ -38,7 +38,6 @@ export default class EventIndex extends EventEmitter {
|
||||
this._eventsPerCrawl = 100;
|
||||
this._crawler = null;
|
||||
this._currentCheckpoint = null;
|
||||
this.liveEventsForIndex = new Set();
|
||||
}
|
||||
|
||||
async init() {
|
||||
@ -188,16 +187,11 @@ export default class EventIndex extends EventEmitter {
|
||||
return;
|
||||
}
|
||||
|
||||
// If the event is not yet decrypted mark it for the
|
||||
// Event.decrypted callback.
|
||||
if (ev.isBeingDecrypted()) {
|
||||
const eventId = ev.getId();
|
||||
this.liveEventsForIndex.add(eventId);
|
||||
} else {
|
||||
// If the event is decrypted or is unencrypted add it to the
|
||||
// index now.
|
||||
await this.addLiveEventToIndex(ev);
|
||||
await ev._decryptionPromise;
|
||||
}
|
||||
|
||||
await this.addLiveEventToIndex(ev);
|
||||
}
|
||||
|
||||
onRoomStateEvent = async (ev, state) => {
|
||||
@ -219,7 +213,6 @@ export default class EventIndex extends EventEmitter {
|
||||
const eventId = ev.getId();
|
||||
|
||||
// If the event isn't in our live event set, ignore it.
|
||||
if (!this.liveEventsForIndex.delete(eventId)) return;
|
||||
if (err) return;
|
||||
await this.addLiveEventToIndex(ev);
|
||||
}
|
||||
@ -523,18 +516,18 @@ export default class EventIndex extends EventEmitter {
|
||||
}
|
||||
});
|
||||
|
||||
const decryptionPromises = [];
|
||||
|
||||
matrixEvents.forEach(ev => {
|
||||
if (ev.isBeingDecrypted() || ev.isDecryptionFailure()) {
|
||||
// TODO the decryption promise is a private property, this
|
||||
// should either be made public or we should convert the
|
||||
// event that gets fired when decryption is done into a
|
||||
// promise using the once event emitter method:
|
||||
// https://nodejs.org/api/events.html#events_events_once_emitter_name
|
||||
decryptionPromises.push(ev._decryptionPromise);
|
||||
}
|
||||
});
|
||||
const decryptionPromises = matrixEvents
|
||||
.filter(event => event.isEncrypted())
|
||||
.map(event => {
|
||||
if (event.shouldAttemptDecryption()) {
|
||||
return event.attemptDecryption(client._crypto, {
|
||||
isRetry: true,
|
||||
emit: false,
|
||||
});
|
||||
} else {
|
||||
return event._decryptionPromise;
|
||||
}
|
||||
});
|
||||
|
||||
// Let us wait for all the events to get decrypted.
|
||||
await Promise.all(decryptionPromises);
|
||||
|
Loading…
Reference in New Issue
Block a user