m->d support encrypted files
This commit is contained in:
parent
dd4e3aa8e0
commit
be2cdd1186
5 changed files with 127 additions and 15 deletions
|
@ -125,7 +125,7 @@ async function getMemberFromCacheOrHomeserver(roomID, mxid, api) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param {Ty.Event.M_Outer_M_Room_Message | Ty.Event.M_Outer_M_Room_Message_File | Ty.Event.M_Outer_M_Sticker} event
|
||||
* @param {Ty.Event.Outer_M_Room_Message | Ty.Event.Outer_M_Room_Message_File | Ty.Event.Outer_M_Sticker | Ty.Event.Outer_M_Room_Message_Encrypted_File} event
|
||||
* @param {import("discord-api-types/v10").APIGuild} guild
|
||||
* @param {{api: import("../../matrix/api")}} di simple-as-nails dependency injection for the matrix API
|
||||
*/
|
||||
|
@ -148,7 +148,7 @@ async function eventToMessage(event, guild, di) {
|
|||
|
||||
let content = event.content.body // ultimate fallback
|
||||
const attachments = []
|
||||
/** @type {{name: string, url: string}[]} */
|
||||
/** @type {({name: string, url: string} | {name: string, url: string, key: string, iv: string})[]} */
|
||||
const pendingFiles = []
|
||||
|
||||
// Convert content depending on what the message is
|
||||
|
@ -281,10 +281,20 @@ async function eventToMessage(event, guild, di) {
|
|||
} else if (event.type === "m.room.message" && (event.content.msgtype === "m.file" || event.content.msgtype === "m.video" || event.content.msgtype === "m.audio" || event.content.msgtype === "m.image")) {
|
||||
content = ""
|
||||
const filename = event.content.body
|
||||
const url = utils.getPublicUrlForMxc(event.content.url)
|
||||
assert(url)
|
||||
attachments.push({id: "0", filename})
|
||||
pendingFiles.push({name: filename, url})
|
||||
if ("url" in event.content) {
|
||||
// Unencrypted
|
||||
const url = utils.getPublicUrlForMxc(event.content.url)
|
||||
assert(url)
|
||||
attachments.push({id: "0", filename})
|
||||
pendingFiles.push({name: filename, url})
|
||||
} else {
|
||||
// Encrypted
|
||||
const url = utils.getPublicUrlForMxc(event.content.file.url)
|
||||
assert(url)
|
||||
assert.equal(event.content.file.key.alg, "A256CTR")
|
||||
attachments.push({id: "0", filename})
|
||||
pendingFiles.push({name: filename, url, key: event.content.file.key.k, iv: event.content.file.iv})
|
||||
}
|
||||
} else if (event.type === "m.sticker") {
|
||||
content = ""
|
||||
let filename = event.content.body
|
||||
|
|
|
@ -1176,6 +1176,60 @@ test("event2message: image attachments work", async t => {
|
|||
)
|
||||
})
|
||||
|
||||
test("event2message: encrypted image attachments work", async t => {
|
||||
t.deepEqual(
|
||||
await eventToMessage({
|
||||
type: "m.room.message",
|
||||
sender: "@cadence:cadence.moe",
|
||||
content: {
|
||||
info: {
|
||||
mimetype: "image/png",
|
||||
size: 105691,
|
||||
w: 1192,
|
||||
h: 309,
|
||||
"xyz.amorgan.blurhash": "U17USN~q9FtQ-;Rjxuj[9FIUoMM|-=WB9Ft7"
|
||||
},
|
||||
msgtype: "m.image",
|
||||
body: "image.png",
|
||||
file: {
|
||||
v: "v2",
|
||||
key: {
|
||||
alg: "A256CTR",
|
||||
ext: true,
|
||||
k: "QTo-oMPnN1Rbc7vBFg9WXMgoctscdyxdFEIYm8NYceo",
|
||||
key_ops: ["encrypt", "decrypt"],
|
||||
kty: "oct"
|
||||
},
|
||||
iv: "Va9SHZpIn5kAAAAAAAAAAA",
|
||||
hashes: {
|
||||
sha256: "OUZqZFBcANFt42iAKET9YXfWMCdT0BX7QO0Eyk9q4Js"
|
||||
},
|
||||
url: "mxc://heyquark.com/LOGkUTlVFrqfiExlGZNgCJJX",
|
||||
mimetype: "image/png"
|
||||
}
|
||||
},
|
||||
event_id: "$JNhONhXO-5jrztZz8b7mbTMJasbU78TwQr4tog-3Mnk",
|
||||
room_id: "!PnyBKvUBOhjuCucEfk:cadence.moe"
|
||||
}),
|
||||
{
|
||||
messagesToDelete: [],
|
||||
messagesToEdit: [],
|
||||
messagesToSend: [{
|
||||
username: "cadence [they]",
|
||||
content: "",
|
||||
avatar_url: "https://matrix.cadence.moe/_matrix/media/r0/download/cadence.moe/azCAhThKTojXSZJRoWwZmhvU",
|
||||
attachments: [{id: "0", filename: "image.png"}],
|
||||
pendingFiles: [{
|
||||
name: "image.png",
|
||||
url: "https://matrix.cadence.moe/_matrix/media/r0/download/heyquark.com/LOGkUTlVFrqfiExlGZNgCJJX",
|
||||
key: "QTo-oMPnN1Rbc7vBFg9WXMgoctscdyxdFEIYm8NYceo",
|
||||
iv: "Va9SHZpIn5kAAAAAAAAAAA"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
test("event2message: stickers work", async t => {
|
||||
t.deepEqual(
|
||||
await eventToMessage({
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue