@blocklet/uploader-server
Version:
blocklet upload server
96 lines (95 loc) • 2.67 kB
JavaScript
import { app as companionAppLib } from "@uppy/companion";
import bodyParser from "body-parser";
import session from "express-session";
import crypto from "crypto";
const secret = crypto.randomBytes(32).toString("hex");
const REWRITE_500_STATUS_CODE = 400;
export function initCompanion({
path,
express,
providerOptions,
...restProps
}) {
const app = express();
app.use(bodyParser.json());
app.use(session({ secret }));
let dynamicProviderOptions = providerOptions;
const companionOptions = {
secret,
providerOptions,
// unused
server: {
protocol: "https",
host: "UNUSED_HOST",
// unused
path: "UNUSED_PATH"
// unused
},
filePath: path,
streamingUpload: true,
metrics: false,
...restProps
};
const newCompanion = companionAppLib(companionOptions);
const { app: companionApp } = newCompanion;
app.all(
"*",
(req, res, next) => {
let hackerCompanion = {};
Object.defineProperty(req, "companion", {
get() {
return hackerCompanion;
},
set(value) {
hackerCompanion = value;
hackerCompanion.options.providerOptions = dynamicProviderOptions;
}
});
const originalStatus = res.status.bind(res);
const originalSendStatus = res.sendStatus.bind(res);
const originalWriteHead = res.writeHead.bind(res);
res.status = (code) => {
if (code >= 500) {
return originalStatus(REWRITE_500_STATUS_CODE);
}
return originalStatus(code);
};
res.sendStatus = (code) => {
if (code >= 500) {
return originalSendStatus(REWRITE_500_STATUS_CODE);
}
return originalSendStatus(code);
};
res.writeHead = (statusCode, ...args) => {
if (res.headersSent) {
return originalWriteHead(statusCode, ...args);
}
const newStatusCode = statusCode >= 500 ? REWRITE_500_STATUS_CODE : statusCode;
return originalWriteHead(newStatusCode, ...args);
};
let _statusCode = res.statusCode;
Object.defineProperty(res, "statusCode", {
configurable: true,
// Allow further redefinition if necessary
enumerable: true,
get() {
return _statusCode;
},
set(code) {
if (code >= 500) {
_statusCode = REWRITE_500_STATUS_CODE;
} else {
_statusCode = code;
}
}
});
next();
},
companionApp
);
newCompanion.handle = app;
newCompanion.setProviderOptions = (options) => {
dynamicProviderOptions = options;
};
return newCompanion;
}