Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 5420051

Browse files
committed
Merge branch 'poljar/eventindex-search-verification-state' into develop
2 parents 7549d7d + f70ada4 commit 5420051

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

src/Searching.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,29 @@ async function localSearch(searchTerm, roomId = undefined) {
107107
const result = MatrixClientPeg.get()._processRoomEventsSearch(
108108
emptyResult, response);
109109

110+
// Restore our encryption info so we can properly re-verify the events.
111+
for (let i = 0; i < result.results.length; i++) {
112+
const timeline = result.results[i].context.getTimeline();
113+
114+
for (let j = 0; j < timeline.length; j++) {
115+
const ev = timeline[j];
116+
if (ev.event.curve25519Key) {
117+
ev.makeEncrypted(
118+
"m.room.encrypted",
119+
{ algorithm: ev.event.algorithm },
120+
ev.event.curve25519Key,
121+
ev.event.ed25519Key,
122+
);
123+
ev._forwardingCurve25519KeyChain = ev.event.forwardingCurve25519KeyChain;
124+
125+
delete ev.event.curve25519Key;
126+
delete ev.event.ed25519Key;
127+
delete ev.event.algorithm;
128+
delete ev.event.forwardingCurve25519KeyChain;
129+
}
130+
}
131+
}
132+
110133
return result;
111134
}
112135

src/indexing/EventIndex.js

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,33 @@ export default class EventIndex extends EventEmitter {
290290
return validEventType && validMsgType && hasContentValue;
291291
}
292292

293+
eventToJson(ev) {
294+
const jsonEvent = ev.toJSON();
295+
const e = ev.isEncrypted() ? jsonEvent.decrypted : jsonEvent;
296+
297+
if (ev.isEncrypted()) {
298+
// Let us store some additional data so we can re-verify the event.
299+
// The js-sdk checks if an event is encrypted using the algorithm,
300+
// the sender key and ed25519 signing key are used to find the
301+
// correct device that sent the event which allows us to check the
302+
// verification state of the event, either directly or using cross
303+
// signing.
304+
e.curve25519Key = ev.getSenderKey();
305+
e.ed25519Key = ev.getClaimedEd25519Key();
306+
e.algorithm = ev.getWireContent().algorithm;
307+
e.forwardingCurve25519KeyChain = ev.getForwardingCurve25519KeyChain();
308+
} else {
309+
// Make sure that unencrypted events don't contain any of that data,
310+
// despite what the server might give to us.
311+
delete e.curve25519Key;
312+
delete e.ed25519Key;
313+
delete e.algorithm;
314+
delete e.forwardingCurve25519KeyChain;
315+
}
316+
317+
return e;
318+
}
319+
293320
/**
294321
* Queue up live events to be added to the event index.
295322
*
@@ -300,8 +327,7 @@ export default class EventIndex extends EventEmitter {
300327

301328
if (!this.isValidEvent(ev)) return;
302329

303-
const jsonEvent = ev.toJSON();
304-
const e = ev.isEncrypted() ? jsonEvent.decrypted : jsonEvent;
330+
const e = this.eventToJson(ev);
305331

306332
const profile = {
307333
displayname: ev.sender.rawDisplayName,
@@ -477,8 +503,7 @@ export default class EventIndex extends EventEmitter {
477503
// Let us convert the events back into a format that EventIndex can
478504
// consume.
479505
const events = filteredEvents.map((ev) => {
480-
const jsonEvent = ev.toJSON();
481-
const e = ev.isEncrypted() ? jsonEvent.decrypted : jsonEvent;
506+
const e = this.eventToJson(ev);
482507

483508
let profile = {};
484509
if (e.sender in profiles) profile = profiles[e.sender];

0 commit comments

Comments
 (0)