Skip to content

Instantly share code, notes, and snippets.

@litmaj0r
Forked from b225ccc-zz/range.js
Last active August 29, 2015 14:19
Show Gist options
  • Save litmaj0r/c93488a3342fafa4b1b3 to your computer and use it in GitHub Desktop.
Save litmaj0r/c93488a3342fafa4b1b3 to your computer and use it in GitHub Desktop.
'use strict';
var vsm = require('lrs/virtualServerModule');
var parseRange = require('range-parser');
// Change config as needed.
var config = {
vs: 'vs_http', // name of virtual-server
max_range_value: 1e9, // 1 GB
max_ranges: 10
};
function bail_4xx(servResp, code, message) {
code = code || 404;
message = message || '';
servResp.writeHead(code);
servResp.end(message);
return;
}
function onRequest(servReq, servResp, cliReq) {
if ('range' in servReq.headers) {
// parse range header
var range = parseRange(1e12, servReq.headers.range);
// check from parsing error code
if (typeof range === 'number' && range < 0) {
bail_4xx(servResp, 416, 'Malformed header or invalid range');
return;
}
// check if number of ranges exceeds max
if (range.length > config.max_ranges) {
bail_4xx(servResp, 416, 'Too many ranges');
return;
}
// check if range values exceed max
if (range.type === 'bytes') {
for(var i = 0; i < range.length; i++) {
if (r.start > config.max_range_value || r.end > config.max_range_value) {
bail_4xx(servResp, 416, 'Range value exceeds allowed maximum');
return;
}
}
}
}
// all checks passed; process the request
cliReq();
}
vsm.on('exist', config.vs, function(vs) {
console.log("Script '" + __scriptname +
"' installed on Virtual Server '" +
vs.id + "'");
vs.on('request', onRequest);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment