forked from cadence/out-of-your-element
Emergency sync #11
4 changed files with 13 additions and 76 deletions
|
|
@ -582,7 +582,8 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||||
// check that condition 1 or 2 is met
|
// check that condition 1 or 2 is met
|
||||||
if (repliedToEventInDifferentRoom || repliedToUnknownEvent) {
|
if (repliedToEventInDifferentRoom || repliedToUnknownEvent) {
|
||||||
let referenced = message.referenced_message
|
let referenced = message.referenced_message
|
||||||
if (!referenced) { // backend couldn't be bothered to dereference the message, have to do it ourselves
|
/* c8 ignore next 4 - backend couldn't be bothered to dereference the message, have to do it ourselves */
|
||||||
|
if (!referenced) {
|
||||||
assert(message.message_reference?.message_id)
|
assert(message.message_reference?.message_id)
|
||||||
referenced = await discord.snow.channel.getChannelMessage(message.message_reference.channel_id, message.message_reference.message_id)
|
referenced = await discord.snow.channel.getChannelMessage(message.message_reference.channel_id, message.message_reference.message_id)
|
||||||
}
|
}
|
||||||
|
|
@ -905,11 +906,8 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||||
else if (component.type === DiscordTypes.ComponentType.Button) {
|
else if (component.type === DiscordTypes.ComponentType.Button) {
|
||||||
// May only be a section accessory or in an action row (up to 5)
|
// May only be a section accessory or in an action row (up to 5)
|
||||||
if (component.style === DiscordTypes.ButtonStyle.Link) {
|
if (component.style === DiscordTypes.ButtonStyle.Link) {
|
||||||
if (component.label) {
|
assert(component.label) // required for Discord to validate link buttons
|
||||||
stack.msb.add(`[${component.label} ${component.url}] `, tag`<a href="${component.url}">${component.label}</a> `)
|
stack.msb.add(`[${component.label} ${component.url}] `, tag`<a href="${component.url}">${component.label}</a> `)
|
||||||
} else {
|
|
||||||
stack.msb.add(component.url)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4747,17 +4747,17 @@ test("event2message: stickers work", async t => {
|
||||||
messagesToEdit: [],
|
messagesToEdit: [],
|
||||||
messagesToSend: [{
|
messagesToSend: [{
|
||||||
username: "cadence [they]",
|
username: "cadence [they]",
|
||||||
content: "",
|
content: "[get_real2](https://bridge.example.org/download/sticker/cadence.moe/NyMXQFAAdniImbHzsygScbmN/_.webp)",
|
||||||
avatar_url: "https://bridge.example.org/download/matrix/cadence.moe/azCAhThKTojXSZJRoWwZmhvU",
|
avatar_url: "https://bridge.example.org/download/matrix/cadence.moe/azCAhThKTojXSZJRoWwZmhvU",
|
||||||
attachments: [{id: "0", filename: "get_real2.gif"}],
|
allowed_mentions: {
|
||||||
pendingFiles: [{name: "get_real2.gif", mxc: "mxc://cadence.moe/NyMXQFAAdniImbHzsygScbmN"}]
|
parse: ["users", "roles"]
|
||||||
|
}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("event2message: stickers fetch mimetype from server when mimetype not provided", async t => {
|
test("event2message: stickers fetch mimetype from server when mimetype not provided", async t => {
|
||||||
let called = 0
|
|
||||||
t.deepEqual(
|
t.deepEqual(
|
||||||
await eventToMessage({
|
await eventToMessage({
|
||||||
type: "m.sticker",
|
type: "m.sticker",
|
||||||
|
|
@ -4768,20 +4768,6 @@ test("event2message: stickers fetch mimetype from server when mimetype not provi
|
||||||
},
|
},
|
||||||
event_id: "$mL-eEVWCwOvFtoOiivDP7gepvf-fTYH6_ioK82bWDI0",
|
event_id: "$mL-eEVWCwOvFtoOiivDP7gepvf-fTYH6_ioK82bWDI0",
|
||||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
||||||
}, {}, {}, {
|
|
||||||
api: {
|
|
||||||
async getMedia(mxc, options) {
|
|
||||||
called++
|
|
||||||
t.equal(mxc, "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf")
|
|
||||||
t.equal(options.method, "HEAD")
|
|
||||||
return {
|
|
||||||
status: 200,
|
|
||||||
headers: new Map([
|
|
||||||
["content-type", "image/gif"]
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
ensureJoined: [],
|
ensureJoined: [],
|
||||||
|
|
@ -4789,48 +4775,14 @@ test("event2message: stickers fetch mimetype from server when mimetype not provi
|
||||||
messagesToEdit: [],
|
messagesToEdit: [],
|
||||||
messagesToSend: [{
|
messagesToSend: [{
|
||||||
username: "cadence [they]",
|
username: "cadence [they]",
|
||||||
content: "",
|
content: "[YESYESYES](https://bridge.example.org/download/sticker/cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf/_.webp)",
|
||||||
avatar_url: undefined,
|
avatar_url: undefined,
|
||||||
attachments: [{id: "0", filename: "YESYESYES.gif"}],
|
allowed_mentions: {
|
||||||
pendingFiles: [{name: "YESYESYES.gif", mxc: "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf"}]
|
parse: ["users", "roles"]
|
||||||
|
}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
t.equal(called, 1, "sticker headers should be fetched")
|
|
||||||
})
|
|
||||||
|
|
||||||
test("event2message: stickers with unknown mimetype are not allowed", async t => {
|
|
||||||
let called = 0
|
|
||||||
try {
|
|
||||||
await eventToMessage({
|
|
||||||
type: "m.sticker",
|
|
||||||
sender: "@cadence:cadence.moe",
|
|
||||||
content: {
|
|
||||||
body: "something",
|
|
||||||
url: "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJe"
|
|
||||||
},
|
|
||||||
event_id: "$mL-eEVWCwOvFtoOiivDP7gepvf-fTYH6_ioK82bWDI0",
|
|
||||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
|
||||||
}, {}, {}, {
|
|
||||||
api: {
|
|
||||||
async getMedia(mxc, options) {
|
|
||||||
called++
|
|
||||||
t.equal(mxc, "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJe")
|
|
||||||
t.equal(options.method, "HEAD")
|
|
||||||
return {
|
|
||||||
status: 404,
|
|
||||||
headers: new Map([
|
|
||||||
["content-type", "application/json"]
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
/* c8 ignore next */
|
|
||||||
t.fail("should throw an error")
|
|
||||||
} catch (e) {
|
|
||||||
t.match(e.toString(), "mimetype")
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test("event2message: static emojis work", async t => {
|
test("event2message: static emojis work", async t => {
|
||||||
|
|
|
||||||
|
|
@ -225,19 +225,6 @@ async function getViaServersQuery(roomID, api) {
|
||||||
return qs
|
return qs
|
||||||
}
|
}
|
||||||
|
|
||||||
function generatePermittedMediaHash(mxc) {
|
|
||||||
assert(hasher, "xxhash is not ready yet")
|
|
||||||
const mediaParts = mxc?.match(/^mxc:\/\/([^/]+)\/(\w+)$/)
|
|
||||||
if (!mediaParts) return undefined
|
|
||||||
|
|
||||||
const serverAndMediaID = `${mediaParts[1]}/${mediaParts[2]}`
|
|
||||||
const unsignedHash = hasher.h64(serverAndMediaID)
|
|
||||||
const signedHash = unsignedHash - 0x8000000000000000n // shifting down to signed 64-bit range
|
|
||||||
db.prepare("INSERT OR IGNORE INTO media_proxy (permitted_hash) VALUES (?)").run(signedHash)
|
|
||||||
|
|
||||||
return serverAndMediaID
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Since the introduction of authenticated media, this can no longer just be the /_matrix/media/r0/download URL
|
* Since the introduction of authenticated media, this can no longer just be the /_matrix/media/r0/download URL
|
||||||
* because Discord and Discord users cannot use those URLs. Media now has to be proxied through the bridge.
|
* because Discord and Discord users cannot use those URLs. Media now has to be proxied through the bridge.
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,6 @@ as.router.post("/api/default-roles", defineEventHandler(async event => {
|
||||||
if (getRequestHeader(event, "HX-Request")) {
|
if (getRequestHeader(event, "HX-Request")) {
|
||||||
return pugSync.render(event, "fragments/default-roles-list.pug", {guild, guild_id: guildID})
|
return pugSync.render(event, "fragments/default-roles-list.pug", {guild, guild_id: guildID})
|
||||||
} else {
|
} else {
|
||||||
return sendRedirect(event, "", 302)
|
return sendRedirect(event, `/guild?guild_id=${guildID}`, 302)
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue