Fix automatic content length workaround switch
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
// @ts-check
|
||||
|
||||
const passthrough = require("../passthrough")
|
||||
const {reg, writeRegistration} = require("./read-registration.js")
|
||||
const Ty = require("../types")
|
||||
|
||||
const {sync, db, select} = passthrough
|
||||
/** @type {import("./mreq")} */
|
||||
const mreq = sync.require("./mreq")
|
||||
@@ -44,11 +47,8 @@ async function uploadDiscordFileToMxc(path) {
|
||||
return existingFromDb
|
||||
}
|
||||
|
||||
// Download from Discord
|
||||
const promise = fetch(url, {}).then(async res => {
|
||||
// Upload to Matrix
|
||||
const root = await module.exports._actuallyUploadDiscordFileToMxc(urlNoExpiry, res)
|
||||
|
||||
// Download from Discord and upload to Matrix
|
||||
const promise = module.exports._actuallyUploadDiscordFileToMxc(url).then(root => {
|
||||
// Store relationship in database
|
||||
db.prepare("INSERT INTO file (discord_url, mxc_url) VALUES (?, ?)").run(urlNoExpiry, root.content_uri)
|
||||
inflight.delete(urlNoExpiry)
|
||||
@@ -62,17 +62,31 @@ async function uploadDiscordFileToMxc(path) {
|
||||
|
||||
/**
|
||||
* @param {string} url
|
||||
* @param {Response} res
|
||||
* @returns {Promise<Ty.R.FileUploaded>}
|
||||
*/
|
||||
async function _actuallyUploadDiscordFileToMxc(url, res) {
|
||||
const body = res.body
|
||||
/** @type {import("../types").R.FileUploaded} */
|
||||
const root = await mreq.mreq("POST", "/media/v3/upload", body, {
|
||||
headers: {
|
||||
"Content-Type": res.headers.get("content-type")
|
||||
async function _actuallyUploadDiscordFileToMxc(url) {
|
||||
const res = await fetch(url, {})
|
||||
try {
|
||||
/** @type {Ty.R.FileUploaded} */
|
||||
const root = await mreq.mreq("POST", "/media/v3/upload", res.body, {
|
||||
headers: {
|
||||
"Content-Type": res.headers.get("content-type")
|
||||
}
|
||||
})
|
||||
return root
|
||||
} catch (e) {
|
||||
if (e instanceof mreq.MatrixServerError && e.data.error?.includes("Content-Length") && !reg.ooye.content_length_workaround) {
|
||||
reg.ooye.content_length_workaround = true
|
||||
const root = await _actuallyUploadDiscordFileToMxc(url)
|
||||
console.error("OOYE cannot stream uploads to Synapse. The `content_length_workaround` option"
|
||||
+ "\nhas been activated in registration.yaml, which works around the problem, but"
|
||||
+ "\nhalves the speed of bridging d->m files. A better way to resolve this problem"
|
||||
+ "\nis to run an nginx reverse proxy to Synapse and re-run OOYE setup.")
|
||||
writeRegistration(reg)
|
||||
return root
|
||||
}
|
||||
})
|
||||
return root
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
function guildIcon(guild) {
|
||||
|
@@ -5,8 +5,7 @@ const streamWeb = require("stream/web")
|
||||
const {buffer} = require("stream/consumers")
|
||||
const mixin = require("@cloudrac3r/mixin-deep")
|
||||
|
||||
const {reg, writeRegistration} = require("./read-registration.js")
|
||||
|
||||
const {reg} = require("./read-registration.js")
|
||||
const baseUrl = `${reg.ooye.server_origin}/_matrix`
|
||||
|
||||
class MatrixServerError extends Error {
|
||||
@@ -56,21 +55,11 @@ async function mreq(method, url, bodyIn, extra = {}) {
|
||||
},
|
||||
...(body && {duplex: "half"}), // https://github.com/octokit/request.js/pull/571/files
|
||||
}, extra)
|
||||
// console.log(baseUrl + url, opts)
|
||||
|
||||
const res = await fetch(baseUrl + url, opts)
|
||||
const root = await res.json()
|
||||
|
||||
if (!res.ok || root.errcode) {
|
||||
if (root.error?.includes("Content-Length") && !reg.ooye.content_length_workaround) {
|
||||
reg.ooye.content_length_workaround = true
|
||||
const root = await mreq(method, url, body, extra)
|
||||
console.error("OOYE cannot stream uploads to Synapse. The `content_length_workaround` option"
|
||||
+ "\nhas been activated in registration.yaml, which works around the problem, but"
|
||||
+ "\nhalves the speed of bridging d->m files. A better way to resolve this problem"
|
||||
+ "\nis to run an nginx reverse proxy to Synapse and re-run OOYE setup.")
|
||||
writeRegistration(reg)
|
||||
return root
|
||||
}
|
||||
delete opts.headers?.["Authorization"]
|
||||
throw new MatrixServerError(root, {baseUrl, url, ...opts})
|
||||
}
|
||||
|
Reference in New Issue
Block a user