'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); });