add infrastructure to encrypt while sending

This commit is contained in:
Bruno Windels 2020-09-03 15:36:48 +02:00
parent 5cafef96f5
commit b1226d9220
4 changed files with 24 additions and 2 deletions

View File

@ -121,7 +121,7 @@ export class SendScheduler {
} }
this._sendRequests = []; this._sendRequests = [];
} }
console.error("error for request", request); console.error("error for request", err);
request.reject(err); request.reject(err);
break; break;
} }

View File

@ -88,6 +88,7 @@ export class Room extends EventEmitter {
// encryption got enabled // encryption got enabled
if (!this._summary.encryption && summaryChanges.encryption && !this._roomEncryption) { if (!this._summary.encryption && summaryChanges.encryption && !this._roomEncryption) {
this._roomEncryption = this._createRoomEncryption(this, summaryChanges.encryption); this._roomEncryption = this._createRoomEncryption(this, summaryChanges.encryption);
this._sendQueue.enableEncryption(this._roomEncryption);
} }
if (memberChanges.size) { if (memberChanges.size) {
if (this._changedMembersDuringSync) { if (this._changedMembersDuringSync) {
@ -137,6 +138,7 @@ export class Room extends EventEmitter {
this._summary.load(summary); this._summary.load(summary);
if (this._summary.encryption) { if (this._summary.encryption) {
this._roomEncryption = this._createRoomEncryption(this, this._summary.encryption); this._roomEncryption = this._createRoomEncryption(this, this._summary.encryption);
this._sendQueue.enableEncryption(this._roomEncryption);
} }
// need to load members for name? // need to load members for name?
if (this._summary.needsHeroes) { if (this._summary.needsHeroes) {

View File

@ -26,5 +26,12 @@ export class PendingEvent {
get remoteId() { return this._data.remoteId; } get remoteId() { return this._data.remoteId; }
set remoteId(value) { this._data.remoteId = value; } set remoteId(value) { this._data.remoteId = value; }
get content() { return this._data.content; } get content() { return this._data.content; }
get needsEncryption() { return this._data.needsEncryption; }
get data() { return this._data; } get data() { return this._data; }
setEncrypted(type, content) {
this._data.eventType = type;
this._data.content = content;
this._data.needsEncryption = false;
}
} }

View File

@ -33,6 +33,11 @@ export class SendQueue {
this._isSending = false; this._isSending = false;
this._offline = false; this._offline = false;
this._amountSent = 0; this._amountSent = 0;
this._roomEncryption = null;
}
enableEncryption(roomEncryption) {
this._roomEncryption = roomEncryption;
} }
async _sendLoop() { async _sendLoop() {
@ -45,6 +50,13 @@ export class SendQueue {
if (pendingEvent.remoteId) { if (pendingEvent.remoteId) {
continue; continue;
} }
if (pendingEvent.needsEncryption) {
const {type, content} = await this._sendScheduler.request(async hsApi => {
return await this._roomEncryption.encrypt(pendingEvent.eventType, pendingEvent.content, hsApi);
});
pendingEvent.setEncrypted(type, content);
await this._tryUpdateEvent(pendingEvent);
}
console.log("really sending now"); console.log("really sending now");
const response = await this._sendScheduler.request(hsApi => { const response = await this._sendScheduler.request(hsApi => {
console.log("got sendScheduler slot"); console.log("got sendScheduler slot");
@ -156,7 +168,8 @@ export class SendQueue {
queueIndex, queueIndex,
eventType, eventType,
content, content,
txnId: makeTxnId() txnId: makeTxnId(),
needsEncryption: !!this._roomEncryption
}); });
console.log("_createAndStoreEvent: adding to pendingEventsStore"); console.log("_createAndStoreEvent: adding to pendingEventsStore");
pendingEventsStore.add(pendingEvent.data); pendingEventsStore.add(pendingEvent.data);