1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-12-08 19:08:34 +03:00

Add MatrixEvent.attemptDecryption

... and use it from both MatrixClient and the megolm re-decryption code.

This will help us avoid races when decryption is asynchronous.
This commit is contained in:
Richard van der Hoff
2017-07-18 14:41:25 +01:00
parent d37cbb10a5
commit 86f2c86440
3 changed files with 54 additions and 44 deletions

View File

@@ -298,6 +298,58 @@ utils.extend(module.exports.MatrixEvent.prototype, {
this._claimedEd25519Key = claimedEd25519Key;
},
/**
* Attempt to decrypt this event.
*
* (This is used within the SDK: it isn't intended for use by applications)
*
* @internal
*
* @param {module:crypto} crypto crypto module
*/
attemptDecryption: function(crypto) {
if (!crypto) {
this._badEncryptedMessage("Encryption not enabled");
return;
}
if (!this.isEncrypted()) {
throw new Error("Attempt to decrypt event which isn't encrypted");
}
if (
this._clearEvent && this._clearEvent.content &&
this._clearEvent.content.msgtype !== "m.bad.encrypted"
) {
// we may want to just ignore this? let's start with rejecting it.
throw new Error(
"Attempt to decrypt event which has already been encrypted",
);
}
try {
crypto.decryptEvent(this);
} catch (e) {
console.warn(
`Error decrypting event (id=${this.getId()}): ${e}`,
);
if (e.name !== "DecryptionError") {
throw e;
}
this._badEncryptedMessage(e.message);
}
},
_badEncryptedMessage: function(reason) {
this.setClearData({
type: "m.room.message",
content: {
msgtype: "m.bad.encrypted",
body: "** Unable to decrypt: " + reason + " **",
},
});
},
/**
* Update the cleartext data on this event.
*