2019-01-28 01:34:06 +01:00

45 lines
1.2 KiB
JavaScript

const ACCEPTABLE_CONTENT_TYPE = /^(?:multipart\/.+)$/i;
const UNACCEPTABLE_METHODS = [
'GET',
'HEAD'
];
/**
* Ensures that the request in question is eligible for file uploads
* @param {Object} req Express req object
*/
module.exports = function(req) {
return hasBody(req) && hasAcceptableMethod(req) && hasAcceptableContentType(req);
};
/**
* Ensures the request is not using a non-compliant multipart method
* such as GET or HEAD
* @param {Object} req Express req object
* @return {Boolean}
*/
function hasAcceptableMethod(req) {
return (UNACCEPTABLE_METHODS.indexOf(req.method) < 0);
}
/**
* Ensures that only multipart requests are processed by express-fileupload
* @param {Object} req Express req object
* @return {Boolean}
*/
function hasAcceptableContentType(req) {
let str = (req.headers['content-type'] || '').split(';')[0];
return ACCEPTABLE_CONTENT_TYPE.test(str);
}
/**
* Ensures the request contains a content body
* @param {Object} req Express req object
* @return {Boolean}
*/
function hasBody(req) {
return ('transfer-encoding' in req.headers) ||
('content-length' in req.headers && req.headers['content-length'] !== '0');
}