get peer information and update db - seedlinux - Torrent indexing tool opensource torrents with share ratio's etc.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 4dd2f4853a8b25b6962cb9a53c8b4e7508d3bf0d
(DIR) parent c2e2b3fee98d235ac9a35c3e95c626f592e0759f
(HTM) Author: Jay Scott <jay@jayscott.co.uk>
Date: Sat, 1 Jul 2017 22:57:58 +0100
get peer information and update db
Diffstat:
M README.md | 23 -----------------------
M controllers/torrents_controller.js | 101 +++++++++++++++++++++++--------
M package-lock.json | 352 +++++++++++++++++++++++++++++++
M package.json | 5 ++++-
M routes/torrent_route.js | 1 +
5 files changed, 434 insertions(+), 48 deletions(-)
---
(DIR) diff --git a/README.md b/README.md
@@ -22,29 +22,6 @@ Seed the data using mongo-import tool.
mongoimport --db seedlinux --collection torrents --drop --file ./data/dataset.json
```
-Torrents Model
-
-```json
-{
- name: {type: String, required: true, max: 100},
- hash: {type: String, required: true, max: 20},
- created: {type: String},
- comment: {type: String, max: 100},
- announce: [
- {type: String}
- ],
- files: [{
- path: String,
- name: String,
- length: Number,
- offset: Number
- }],
- magneturi: {type: String},
- leechers: {type: Number},
- seeders: {type: Number},
-}
-```
-
### Stuff used to make this:
* [Docker](https://hub.docker.com/_/mongo/) image for MongoDB.
(DIR) diff --git a/controllers/torrents_controller.js b/controllers/torrents_controller.js
@@ -1,36 +1,89 @@
'use strict';
-let Torrent = require('../models/torrent_model');
+const Torrent = require('../models/torrent_model');
const async = require('async');
-exports.index = function(req, res) {
-
- async.parallel({
- torrent_count: function(callback) {
- Torrent.count(callback);
- },
- torrent_data: function(callback) {
- Torrent.find({},callback);
- },
- }, function(err, results) {
- res.render('torrent', { title: 'Index Page', data: results });
- });
+function getTorrent(query, callback) {
+ Torrent.find(query, function(err, data) {
+ if (err) {
+ callback(err, null);
+ } else {
+ callback(null, data[0]);
+ }
+ });
};
-exports.torrent_detail = function(req, res) {
- async.parallel({
+function updateTorrent(query, data, callback) {
+ Torrent.findOneAndUpdate(query, data, function(err, data) {
+ if (err) {
+ callback(err, null);
+ } else {
+ callback(null, data[0]);
+ }
+ });
+};
+
+exports.index = function(req, res) {
+ async.parallel(
+ {
torrent_count: function(callback) {
Torrent.count(callback);
},
torrent_data: function(callback) {
- Torrent.find({hash: req.params.id},callback);
+ Torrent.find({}, callback);
+ }
+ },
+ function(err, results) {
+ res.render('torrent', { title: 'Index Page', data: results });
+ }
+ );
+};
+
+exports.torrent_detail = function(req, res) {
+ async.parallel(
+ {
+ torrent_count: function(callback) {
+ Torrent.count(callback);
},
- }, function(err, results) {
- if(results.torrent_data == "" ) {
- console.log(results);
- res.redirect('/');
- } else {
- res.render('details', { title: 'Torrent Details', data: results });
- }
- });
+ torrent_data: function(callback) {
+ Torrent.find({ hash: req.params.id }, callback);
+ }
+ },
+ function(err, results) {
+ if (results.torrent_data == '') {
+ res.sendStatus(404);
+ } else {
+ res.render('details', { title: 'Torrent Details', data: results });
+ }
+ }
+ );
};
+
+exports.torrent_stats = function(req, res) {
+
+ const webtorrentHealth = require('webtorrent-health');
+
+ getTorrent({hash: req.params.id }, function(err, torrent) {
+ if (err) res.sendStatus(404);
+
+ if (torrent == null) {
+ res.sendStatus(404);
+ } else {
+ webtorrentHealth(torrent.magneturi, {trackers: torrent.announce}, function (err, data) {
+ if (err) res.sendStatus(500);
+
+ let newData = {
+ seeders: data.seeds,
+ leechers: data.peers,
+ ratio: Math.round((data.peers > 0 ? data.seeds / data.peers : data.seeds) +'e+2') + 'e-2'
+ }
+
+ updateTorrent({hash: req.params.id}, newData, function(err, user) {
+ if (err) res.sendStatus(500);
+
+ res.redirect('/torrent/details/' + req.params.id);
+ });
+ })
+ }
+ });
+}
(DIR) diff --git a/package-lock.json b/package-lock.json
@@ -25,6 +25,11 @@
}
}
},
+ "addr-to-ip-port": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/addr-to-ip-port/-/addr-to-ip-port-1.4.2.tgz",
+ "integrity": "sha1-fkb/Hya3qfXjP9g51XrvYwO0xpI="
+ },
"align-text": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
@@ -35,11 +40,28 @@
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
},
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
"app-root-path": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz",
"integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y="
},
+ "aproba": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
+ "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==",
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "optional": true
+ },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -72,6 +94,28 @@
}
}
},
+ "bindings": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=",
+ "optional": true
+ },
+ "bittorrent-peerid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bittorrent-peerid/-/bittorrent-peerid-1.2.0.tgz",
+ "integrity": "sha1-n2dWEvDmr8bvNFDfulH/cjir83E="
+ },
+ "bittorrent-tracker": {
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/bittorrent-tracker/-/bittorrent-tracker-9.2.3.tgz",
+ "integrity": "sha512-KW7nE/Lwxlpy6BmEEufvwXXsAnq7961xsoE8qL2PWrwKqKjEWLIX/T3REdq6o+RQT0YYdmy7NnqVRs/w+2LUjg=="
+ },
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "optional": true
+ },
"blob-to-buffer": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.6.tgz",
@@ -82,6 +126,11 @@
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz",
"integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs="
},
+ "bn.js": {
+ "version": "4.11.7",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
+ "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA=="
+ },
"body-parser": {
"version": "1.17.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz",
@@ -104,6 +153,12 @@
"resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
"integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
},
+ "bufferutil": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-3.0.1.tgz",
+ "integrity": "sha1-ILLvUVmsSfIORLzjjnw1pqkE7mY=",
+ "optional": true
+ },
"bytes": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
@@ -124,6 +179,12 @@
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A="
},
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "optional": true
+ },
"clean-css": {
"version": "3.4.27",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz",
@@ -134,11 +195,26 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE="
},
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
"commander": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ="
},
+ "compact2string": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/compact2string/-/compact2string-1.4.0.tgz",
+ "integrity": "sha1-qZzZbqAAUlaEsmloOuIiLW7qe0k="
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
"constantinople": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.0.tgz",
@@ -184,6 +260,18 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "optional": true
+ },
"depd": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
@@ -209,6 +297,11 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
"integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA="
},
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY="
+ },
"es6-promise": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
@@ -224,6 +317,12 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz",
"integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE="
},
+ "expand-template": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.0.3.tgz",
+ "integrity": "sha1-bDAzIxd6YrGyLAcCefeGEoe2mxo=",
+ "optional": true
+ },
"express": {
"version": "4.15.3",
"resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
@@ -248,6 +347,11 @@
}
}
},
+ "flat": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-2.0.1.tgz",
+ "integrity": "sha1-cOKRiKdL4MPIlAnu0fqVd5B64y8="
+ },
"forwarded": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz",
@@ -263,11 +367,28 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
"integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E="
},
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "optional": true
+ },
+ "get-browser-rtc": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz",
+ "integrity": "sha1-u81AyEUaftTvXDc7gWmkCd0dEdk="
+ },
"get-stdin": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
"integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
},
+ "github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+ "optional": true
+ },
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
@@ -278,6 +399,12 @@
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg="
},
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "optional": true
+ },
"hooks-fixed": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.0.tgz",
@@ -298,6 +425,17 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "optional": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ },
"ipaddr.js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz",
@@ -313,6 +451,11 @@
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-2.1.0.tgz",
"integrity": "sha1-kb6dR968/vB3l36XIr5tz7RGXvA="
},
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs="
+ },
"is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
@@ -363,6 +506,11 @@
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
},
+ "lru": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz",
+ "integrity": "sha1-6n+4VG2DczOWoTCR12z+tMBoN9U="
+ },
"magnet-uri": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/magnet-uri/-/magnet-uri-5.1.7.tgz",
@@ -398,6 +546,23 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
},
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
"mongodb": {
"version": "2.2.27",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.27.tgz",
@@ -457,11 +622,40 @@
"resolved": "https://registry.npmjs.org/muri/-/muri-1.2.1.tgz",
"integrity": "sha1-7H6lzmympSPrGrNbrNpfqBbJqjw="
},
+ "nan": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
+ "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
+ "optional": true
+ },
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
+ "node-abi": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.0.3.tgz",
+ "integrity": "sha1-DKZ+XmZ7jhNDVJyhcVOoFdC7/ao=",
+ "optional": true
+ },
+ "noop-logger": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
+ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
+ "optional": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "optional": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -482,6 +676,12 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
},
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "optional": true
+ },
"parse-torrent": {
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/parse-torrent/-/parse-torrent-5.8.3.tgz",
@@ -507,6 +707,20 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "prebuild-install": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.1.2.tgz",
+ "integrity": "sha1-2a4MqFMw4Dli2TKS+VqLRMLr9QU=",
+ "optional": true,
+ "dependencies": {
+ "simple-get": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz",
+ "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=",
+ "optional": true
+ }
+ }
+ },
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
@@ -594,11 +808,33 @@
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.3.tgz",
"integrity": "sha1-181bI9s8qHxjbIaglz+c2OAwQ2w="
},
+ "pump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
+ "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE="
+ },
"qs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
},
+ "random-iterate": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/random-iterate/-/random-iterate-1.0.1.tgz",
+ "integrity": "sha1-99l9kt7mZl7F9toIx/ljytSyrJk="
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ }
+ }
+ },
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
@@ -609,6 +845,12 @@
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
"integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y="
},
+ "rc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "optional": true
+ },
"readable-stream": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
@@ -644,6 +886,16 @@
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8="
},
+ "run-parallel": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz",
+ "integrity": "sha1-KQA8miFj4B4tLfyQV18sbB1hoDk="
+ },
+ "run-series": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.4.tgz",
+ "integrity": "sha1-iac93F51ye+KtjIMChYA1qQRebk="
+ },
"rusha": {
"version": "0.8.6",
"resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.6.tgz",
@@ -681,11 +933,23 @@
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz",
"integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI="
},
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "optional": true
+ },
"setprototypeof": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
},
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "optional": true
+ },
"simple-concat": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
@@ -703,11 +967,28 @@
}
}
},
+ "simple-peer": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-8.1.1.tgz",
+ "integrity": "sha512-t2zRYgj1HE5lbfkuL2bJ8s8Q60TQfPwOfDj/TA1/N/Qvi8pdj4uEU0bctrZIsHZlzuU7HM+RFR/YBbiLJjHpxQ=="
+ },
"simple-sha1": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-2.1.0.tgz",
"integrity": "sha1-lCe7lv8SY8wQqEFM7dUaGLkZ6LM="
},
+ "simple-websocket": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-5.0.2.tgz",
+ "integrity": "sha1-BA2Q3qnkGZqXYTOUzmiTLErvPUQ=",
+ "dependencies": {
+ "ws": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz",
+ "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA="
+ }
+ }
+ },
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
@@ -735,6 +1016,39 @@
}
}
},
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
+ },
+ "string2compact": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/string2compact/-/string2compact-1.2.2.tgz",
+ "integrity": "sha1-Qgs6nuHEaFSRm0oq6sZcQ/pQWXs="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "optional": true
+ },
+ "tar-fs": {
+ "version": "1.15.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz",
+ "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=",
+ "optional": true
+ },
+ "tar-stream": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
+ "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
+ "optional": true
+ },
"thirty-two": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz",
@@ -745,6 +1059,12 @@
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
"integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
},
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "optional": true
+ },
"type-is": {
"version": "1.6.15",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
@@ -768,16 +1088,32 @@
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true
},
+ "ultron": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
+ "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
+ },
"uniq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
"integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
},
+ "unordered-array-remove": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz",
+ "integrity": "sha1-xUbo+I4xegzyZEyX7LV9umbSUO8="
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
+ "unzip-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
+ "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
+ "optional": true
+ },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -798,6 +1134,17 @@
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
},
+ "webtorrent-health": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/webtorrent-health/-/webtorrent-health-1.1.1.tgz",
+ "integrity": "sha1-OOi6WUgUHrwWkzIZanMNBw94pEY="
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "optional": true
+ },
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
@@ -818,6 +1165,11 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
+ "ws": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.0.0.tgz",
+ "integrity": "sha1-mN2wAFbIOQy3Ued4h4hJf5kQO2w="
+ },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
(DIR) diff --git a/package.json b/package.json
@@ -9,14 +9,17 @@
"dependencies": {
"app-root-path": "^2.0.1",
"async": "^2.5.0",
+ "bittorrent-tracker": "^9.2.3",
"body-parser": "~1.17.1",
"cookie-parser": "~1.4.3",
"debug": "~2.6.3",
"express": "~4.15.2",
+ "flat": "^2.0.1",
"mongoose": "4.10.8",
"morgan": "~1.8.1",
"parse-torrent": "^5.8.3",
"pug": "~2.0.0-beta11",
- "serve-favicon": "~2.4.2"
+ "serve-favicon": "~2.4.2",
+ "webtorrent-health": "^1.1.1"
}
}
(DIR) diff --git a/routes/torrent_route.js b/routes/torrent_route.js
@@ -5,5 +5,6 @@ const router = express.Router();
const torrent_controller = require('../controllers/torrents_controller');
router.get('/details/:id', torrent_controller.torrent_detail);
+router.get('/stats/:id', torrent_controller.torrent_stats);
module.exports = router;