You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
const matchValue = require("match-value");
|
|
|
|
const addCommonFields = require("../event-add-common-fields");
|
|
const normalizeEncryptionAlgorithmName = require("../normalize-encryption-algorithm-name");
|
|
const mapMaybeRedacted = require("../map-maybe-redacted");
|
|
|
|
function mapFields(event) {
|
|
let algorithm = normalizeEncryptionAlgorithmName(event.content.algorithm);
|
|
|
|
return {
|
|
// FIXME: decrypt method
|
|
type: "encryptedMessage",
|
|
algorithm: algorithm,
|
|
senderKey: event.content.sender_key,
|
|
... matchValue(algorithm, {
|
|
"olm.curve25519.aes-cbc-256.sha-256": () => ({
|
|
ciphertexts: Object.entries(event.content.ciphertext).map(([ deviceKey, payload ]) => {
|
|
return {
|
|
deviceKey: deviceKey,
|
|
isPreKeyMessage: (payload.type === 0),
|
|
ciphertext: payload.body
|
|
};
|
|
})
|
|
}),
|
|
"megolm.ed25519.aes-cbc-256.hmac-sha-256": {
|
|
ciphertext: event.content.ciphertext,
|
|
deviceID: event.content.device_id,
|
|
sessionID: event.content.session_id
|
|
}
|
|
})
|
|
};
|
|
}
|
|
|
|
module.exports = function mapEncryptedMessage(event, context) {
|
|
if (context === "toDeviceEvent") {
|
|
return mapFields(event);
|
|
} else {
|
|
return addCommonFields(mapMaybeRedacted(event, () => {
|
|
return mapFields(event);
|
|
}));
|
|
}
|
|
};
|