diff options
author | Diego RodrÃguez <diegorbaquero@gmail.com> | 2018-08-24 02:58:29 +0300 |
---|---|---|
committer | Diego RodrÃguez <diegorbaquero@gmail.com> | 2018-08-24 02:58:29 +0300 |
commit | d4c05a223080f2915ff6159002385b5d4f7c8e33 (patch) | |
tree | 2346426300c80da01038a1a2ead70cbf0f772665 /lib | |
parent | f0e004b902c8c60a66b3ec45c3caddf81e18550a (diff) |
Modernize lib/server.js
Diffstat (limited to 'lib')
-rw-r--r-- | lib/server.js | 75 |
1 files changed, 34 insertions, 41 deletions
diff --git a/lib/server.js b/lib/server.js index 8ea9a48..60595a8 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1,44 +1,41 @@ -module.exports = Server - -var arrayRemove = require('unordered-array-remove') -var http = require('http') -var mime = require('mime') -var pump = require('pump') -var rangeParser = require('range-parser') -var url = require('url') - -function Server (torrent, opts) { - var server = http.createServer() - if (!opts) opts = {} +const arrayRemove = require('unordered-array-remove') +const http = require('http') +const mime = require('mime') +const pump = require('pump') +const rangeParser = require('range-parser') +const url = require('url') + +function Server (torrent, opts = {}) { + const server = http.createServer() if (!opts.origin) opts.origin = '*' // allow all origins by default - var sockets = [] - var pendingReady = [] - var closed = false + const sockets = [] + const pendingReady = [] + let closed = false server.on('connection', onConnection) server.on('request', onRequest) - var _close = server.close - server.close = function (cb) { + const _close = server.close + server.close = cb => { closed = true server.removeListener('connection', onConnection) server.removeListener('request', onRequest) while (pendingReady.length) { - var onReady = pendingReady.pop() + const onReady = pendingReady.pop() torrent.removeListener('ready', onReady) } torrent = null _close.call(server, cb) } - server.destroy = function (cb) { - sockets.forEach(function (socket) { + server.destroy = cb => { + sockets.forEach(socket => { socket.destroy() }) // Only call `server.close` if user has not called it already - if (!cb) cb = function () {} + if (!cb) cb = () => {} if (closed) process.nextTick(cb) else server.close(cb) } @@ -68,13 +65,13 @@ function Server (torrent, opts) { function onConnection (socket) { socket.setTimeout(36000000) sockets.push(socket) - socket.once('close', function () { + socket.once('close', () => { arrayRemove(sockets, sockets.indexOf(socket)) }) } function onRequest (req, res) { - var pathname = url.parse(req.url).pathname + const pathname = url.parse(req.url).pathname if (pathname === '/favicon.ico') { return serve404Page() @@ -132,12 +129,12 @@ function Server (torrent, opts) { return serveIndexPage() } - var index = Number(pathname.split('/')[1]) + const index = Number(pathname.split('/')[1]) if (Number.isNaN(index) || index >= torrent.files.length) { return serve404Page() } - var file = torrent.files[index] + const file = torrent.files[index] serveFile(file) } @@ -145,14 +142,11 @@ function Server (torrent, opts) { res.statusCode = 200 res.setHeader('Content-Type', 'text/html') - var listHtml = torrent.files.map(function (file, i) { - return '<li><a download="' + file.name + '" href="/' + i + '/' + file.name + '">' + file.path + '</a> ' + - '(' + file.length + ' bytes)</li>' - }).join('<br>') + const listHtml = torrent.files.map((file, i) => `<li><a download="${file.name}" href="/${i}/${file.name}">${file.path}</a> (${file.length} bytes)</li>`).join('<br>') - var html = getPageHTML( - torrent.name + ' - WebTorrent', - '<h1>' + torrent.name + '</h1><ol>' + listHtml + '</ol>' + const html = getPageHTML( + `${torrent.name} - WebTorrent`, + `<h1>${torrent.name}</h1><ol>${listHtml}</ol>` ) res.end(html) } @@ -161,7 +155,7 @@ function Server (torrent, opts) { res.statusCode = 404 res.setHeader('Content-Type', 'text/html') - var html = getPageHTML('404 - Not Found', '<h1>404 - Not Found</h1>') + const html = getPageHTML('404 - Not Found', '<h1>404 - Not Found</h1>') res.end(html) } @@ -175,7 +169,7 @@ function Server (torrent, opts) { // Set name of file (for "Save Page As..." dialog) res.setHeader( 'Content-Disposition', - 'inline; filename*=UTF-8\'\'' + encodeRFC5987(file.name) + `inline; filename*=UTF-8''${encodeRFC5987(file.name)}` ) // Support DLNA streaming @@ -187,7 +181,7 @@ function Server (torrent, opts) { // `rangeParser` returns an array of ranges, or an error code (number) if // there was an error parsing the range. - var range = rangeParser(file.length, req.headers.range || '') + let range = rangeParser(file.length, req.headers.range || '') if (Array.isArray(range)) { res.statusCode = 206 // indicates that range-request was understood @@ -197,7 +191,7 @@ function Server (torrent, opts) { res.setHeader( 'Content-Range', - 'bytes ' + range.start + '-' + range.end + '/' + file.length + `bytes ${range.start}-${range.end}/${file.length}` ) res.setHeader('Content-Length', range.end - range.start + 1) } else { @@ -215,7 +209,7 @@ function Server (torrent, opts) { function serveMethodNotAllowed () { res.statusCode = 405 res.setHeader('Content-Type', 'text/html') - var html = getPageHTML('405 - Method Not Allowed', '<h1>405 - Method Not Allowed</h1>') + const html = getPageHTML('405 - Method Not Allowed', '<h1>405 - Method Not Allowed</h1>') res.end(html) } } @@ -224,10 +218,7 @@ function Server (torrent, opts) { } function getPageHTML (title, pageHtml) { - return '<!DOCTYPE html><html lang="en"><head>' + - '<meta charset="utf-8">' + - '<title>' + title + '</title>' + - '</head><body>' + pageHtml + '</body></html>' + return `<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>${title}</title></head><body>${pageHtml}</body></html>` } // From https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent @@ -241,3 +232,5 @@ function encodeRFC5987 (str) { // so we can allow for a little better readability over the wire: |`^ .replace(/%(?:7C|60|5E)/g, unescape) } + +module.exports = Server |