fleet/website/config/http.js
Eric 5fb3669d01
Website: Update error handler in http config (#36155)
Closes: https://github.com/fleetdm/fleet/issues/36127

Changes:
- Updated the middlewareErrorHandler in the website's http config to
send 412 responses for `PreconditionFailedError` errors.
2025-11-21 15:04:50 -06:00

89 lines
3.9 KiB
JavaScript
Vendored

/**
* HTTP Server Settings
* (sails.config.http)
*
* Configuration for the underlying HTTP server in Sails.
* (for additional recommended settings, see `config/env/production.js`)
*
* For more information on configuration, check out:
* https://sailsjs.com/config/http
*/
module.exports.http = {
/****************************************************************************
* *
* Sails/Express middleware to run for every HTTP request. *
* (Only applies to HTTP requests -- not virtual WebSocket requests.) *
* *
* https://sailsjs.com/documentation/concepts/middleware *
* *
****************************************************************************/
middleware: {
/***************************************************************************
* *
* The order in which middleware should be run for HTTP requests. *
* (This Sails app's routes are handled by the "router" middleware below.) *
* *
***************************************************************************/
order: [
'cookieParser',
'session',
'bodyParser',
'compress',
'poweredBy',
'router',
'www',
'favicon',
'middlewareErrorHandler'
],
/***************************************************************************
* *
* The body parser that will handle incoming multipart HTTP requests. *
* *
* https://sailsjs.com/config/http#?customizing-the-body-parser *
* *
***************************************************************************/
bodyParser: (function _configureBodyParser(){
var skipper = require('skipper');
var middlewareFn = skipper({
strict: true,
limit: '10MB',// [?] https://github.com/expressjs/body-parser/tree/ee91374eae1555af679550b1d2fb5697d9924109#limit-1
onBodyParserError: (err, req, res)=>{
// If an error occurs while parsing an incoming request body, we'll return a badRequest response if error.statusCode is between 400-500
if (_.isNumber(err.statusCode) && err.statusCode >= 400 && err.statusCode < 500) {
return res.status(400).send(err.message);
// If an error occurs and this was a request going to a static asset, return a 403 response.
} else if(req.url.match(sails.LOOKS_LIKE_ASSET_RX)) {
return res.status(403).send();
} else {
sails.log.error('Sending 500 ("Server Error") response: \n', err);
return res.status(500).send();
}
}
});
return middlewareFn;
})(),
// Note: this middleware function will run for every HTTP request, but will only handle errors thrown by the serve-static middleware if a user requests an invalid byte range of a static asset, or sends a request with an invalid 'If-Match' header value.
middlewareErrorHandler: function(err, req, res, next) {
// If this is a 'RangeNotSatisfiableError' error, respond with a 416 status code.
if (err.message === 'Range Not Satisfiable') {
return res.status(416).send();
// If this is a 'PreconditionFailedError' error, respond with a 412 status code.
} else if(err.message === 'Precondition Failed') {
return res.status(412).send();
} else {
return next(err);
}
},
},
};