add infrastructure to encrypt while sending
This commit is contained in:
parent
5cafef96f5
commit
b1226d9220
4 changed files with 24 additions and 2 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Reference in a new issue