-
-
Save litmaj0r/c93488a3342fafa4b1b3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| '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