@blocklet/uploader-server
Version:
blocklet upload server
102 lines (101 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.initCompanion = initCompanion;
var _companion = require("@uppy/companion");
var _bodyParser = _interopRequireDefault(require("body-parser"));
var _expressSession = _interopRequireDefault(require("express-session"));
var _crypto = _interopRequireDefault(require("crypto"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const secret = _crypto.default.randomBytes(32).toString("hex");
const REWRITE_500_STATUS_CODE = 400;
function initCompanion({
path,
express,
providerOptions,
...restProps
}) {
const app = express();
app.use(_bodyParser.default.json());
app.use((0, _expressSession.default)({
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 = (0, _companion.app)(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;
}