Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modernize some lib files #1480

Merged
merged 3 commits into from Aug 24, 2018
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.

Always

Just for now

Next

Modernize lib/server.js

  • Loading branch information
DiegoRBaquero committed Aug 23, 2018
commit d4c05a223080f2915ff6159002385b5d4f7c8e33
@@ -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,27 +129,24 @@ 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)
}

function serveIndexPage () {
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
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.