Compare commits

..

No commits in common. "master" and "v4.0.12" have entirely different histories.

10 changed files with 51 additions and 152 deletions

5
.gitignore vendored
View file

@ -1,6 +1,5 @@
node_modules
*.log
npm-debug.log
.env
.vscode
.DS_Store
.DS_Store

View file

@ -1,11 +1,5 @@
# Changelog
## [4.0.13] - 2019-11-23
### Added
- Added a mechanism to handle dynamically allocating numerous ports at the same time without collisions per [jogli5er's](https://github.com/jogli5er) suggestion in [PR 15](https://zb.gy/3a).
### Changed
- Switched 'granax' package to '@deadcanaries/granax' as suggested in [issue 12](https://zb.gy/2z).
## [4.0.12] - 2019-11-21
### Added
- Added a entrypoint file so the node.js process is not the root process, so it responds to SIGINT calls (Ctrl+C).

View file

@ -1 +1 @@
tor-router.gh.zb.gy
tor-router.docs.zacharyboyd.nyc

View file

@ -56,7 +56,7 @@ const shell = require('shelljs');
const getPort = require('get-port');
const del = require('del');
const temp = require('temp');
const { TorController } = require('@deadcanaries/granax');
const { TorController } = require('granax');
const nanoid = require("nanoid");
const winston = require('winston');
Promise.promisifyAll(temp);

View file

@ -64,7 +64,7 @@ module.exports = {
"Log": "notice stdout",
"NewCircuitPeriod": "10"
},
"torPath": require('@deadcanaries/granax').tor(require('os').platform()),
"torPath": require('granax').tor(require('os').platform()),
"instances": null,
"dns": {
"timeout": 10000,

148
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.13",
"version": "4.0.11",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -10,61 +10,6 @@
"integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=",
"optional": true
},
"@deadcanaries/granax": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/@deadcanaries/granax/-/granax-3.2.4.tgz",
"integrity": "sha512-2R/OUWeTlx6/2HVAeCtViKZHoQvD8YSKa/sVHc24itbNUGZ/StDbfwVE82/IvqNmY7Du7M1CsCDKYteGxkcNcQ==",
"requires": {
"7zip": "0.0.6",
"async": "^2.3.0",
"latest-torbrowser-version": "^2.0.2",
"merge": "^1.2.1",
"mkdirp": "^0.5.1",
"mv": "^2.1.1",
"ncp": "^2.0.0",
"progress": "^2.0.3",
"rimraf": "^2.6.3"
},
"dependencies": {
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"latest-torbrowser-version": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/latest-torbrowser-version/-/latest-torbrowser-version-2.0.2.tgz",
"integrity": "sha512-2cg5j8szOY0g3jlyLZhye9as3oJihNJD3DN9+I7tdXMEBW4ZKH8Blq17xtj5Q2jtV7v8NjRCkBrXz3zPEjMWLQ==",
"requires": {
"async": "^2.6.0",
"cheerio": "^1.0.0-rc.2",
"follow-redirects": "^1.2.4",
"semver": "^5.4.1"
}
},
"merge": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
"integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ=="
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"requires": {
"glob": "^7.1.3"
}
}
}
},
"@types/events": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
@ -204,9 +149,9 @@
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
},
"arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
},
"asn1": {
"version": "0.2.4",
@ -236,11 +181,6 @@
"lodash": "^4.14.0"
}
},
"async-mutex": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.1.4.tgz",
"integrity": "sha512-zVWTmAnxxHaeB2B1te84oecI8zTDJ/8G49aVBblRX6be0oq6pAybNcUSxwfgVOmOjSCvN4aYZAqwtyNI8e1YGw=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@ -1002,6 +942,19 @@
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
"granax": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/granax/-/granax-3.1.4.tgz",
"integrity": "sha512-MhmOZs4c2KKCYqC5ORANfW535QTvkqAGOZPTBpiUsdqtgF5sOix14pDsq3Ye11kx+C6IgFPQZoTmifESDBswaA==",
"requires": {
"7zip": "0.0.6",
"async": "^2.3.0",
"latest-torbrowser-version": "^2.0.1",
"merge": "^1.2.0",
"mkdirp": "^0.5.1",
"ncp": "^2.0.0"
}
},
"growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
@ -1555,6 +1508,17 @@
"colornames": "0.0.2"
}
},
"latest-torbrowser-version": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/latest-torbrowser-version/-/latest-torbrowser-version-2.0.1.tgz",
"integrity": "sha512-HtbbcKs6cl7Tz4RG+l1uulWd+tOJujn8wqyXd2zZjPRk9rO/mslg7Ajg72beEFCXwHPWZzwVR+w8mPO5yDiOWg==",
"requires": {
"async": "^2.6.0",
"cheerio": "^1.0.0-rc.2",
"follow-redirects": "^1.2.4",
"semver": "^5.4.1"
}
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
@ -1686,6 +1650,11 @@
}
}
},
"merge": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz",
"integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo="
},
"mime-db": {
"version": "1.36.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
@ -1903,38 +1872,6 @@
"websocket": "^1.0.28"
}
},
"mv": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
"integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
"requires": {
"mkdirp": "~0.5.1",
"ncp": "~2.0.0",
"rimraf": "~2.4.0"
},
"dependencies": {
"glob": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "2 || 3",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"rimraf": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
"integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
"requires": {
"glob": "^6.0.1"
}
}
}
},
"nan": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
@ -2060,7 +1997,8 @@
"ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M="
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
"optional": true
},
"nice-try": {
"version": "1.0.5",
@ -2195,11 +2133,6 @@
"define-property": "2.0.2"
},
"dependencies": {
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
},
"babylon": {
"version": "7.0.0-beta.47",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz",
@ -2308,11 +2241,6 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@ -2615,8 +2543,7 @@
"dependencies": {
"ipv6": {
"version": "3.1.1",
"resolved": false,
"integrity": "sha1-RtoOJgrzb9m+tBKXyYe3whotnhw=",
"bundled": true,
"requires": {
"cli": "0.4.x",
"cliff": "0.1.x",
@ -2625,8 +2552,7 @@
"dependencies": {
"sprintf": {
"version": "0.1.3",
"resolved": false,
"integrity": "sha1-Uw/DFAXUdCL27bQPKb2vrFme3hE="
"bundled": true
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.13",
"version": "4.0.12",
"main": "src/index.js",
"repository": "git@github.com:znetstar/tor-router.git",
"author": "Zachary Boyd <zachary@zacharyboyd.nyc>",
@ -31,13 +31,11 @@
"socks-proxy-agent": "^4.0.1"
},
"dependencies": {
"@deadcanaries/granax": "^3.2.4",
"arrify": "^2.0.1",
"async-mutex": "^0.1.4",
"bluebird": "^3.5.2",
"del": "^3.0.0",
"eventemitter3": "^3.1.0",
"get-port": "^2.1.0",
"granax": "^3.1.4",
"js-weighted-list": "^0.1.1",
"lodash": "^4.17.4",
"multi-rpc": "^1.5.5",

View file

@ -27,9 +27,7 @@ const Promise = require("bluebird");
const _ = require('lodash');
const WeightedList = require('js-weighted-list');
const getPort = require('get-port');
const TorProcess = require('./TorProcess');
const { Mutex } = require('async-mutex');
Promise.promisifyAll(fs);
@ -464,19 +462,6 @@ class TorPool extends EventEmitter {
if (typeof(instances) === 'number') {
instances = Array.from(Array(instances)).map(() => ({}));
const lock = new Mutex();
instances = await Promise.all(instances.map(async(instance) => {
instance.ports = {};
let release = await lock.acquire();
try {
instance.ports.dns_port = await getPort();
instance.ports.socks_port = await getPort();
instance.ports.control_port = await getPort();
} finally {
release();
}
return instance;
}));
}
return await this.add(instances);
}

View file

@ -13,7 +13,7 @@ const shell = require('shelljs');
const getPort = require('get-port');
const del = require('del');
const temp = require('temp');
const { TorController } = require('@deadcanaries/granax');
const { TorController } = require('granax');
const nanoid = require("nanoid");
const winston = require('winston');
Promise.promisifyAll(temp);
@ -52,7 +52,6 @@ class TorProcess extends EventEmitter {
definition.Config = definition.Config || {};
this._definition = definition;
this._ports = definition.ports || {};
/**
* Path to the Tor executable.
@ -264,12 +263,10 @@ class TorProcess extends EventEmitter {
* @returns {Promise<ChildProcess>} - The process that has been created.
*/
async create() {
let dnsPort = this._ports.dns_port || await getPort();
let socksPort = this._ports.socks_port || await getPort();
let controlPort = this._ports.control_port || await getPort();
this.logger.info(`[tor-${this.instance_name}]: DNS PORT = ${dnsPort}`);
this.logger.info(`[tor-${this.instance_name}]: SOCKS PORT = ${socksPort}`);
this.logger.info(`[tor-${this.instance_name}]: CONTROL PORT = ${controlPort}`);
this._ports = {};
let dnsPort = this._ports.dns_port = await getPort();
let socksPort = this._ports.socks_port = await getPort();
let controlPort = this._ports.control_port = await getPort();
Object.freeze(this._ports);
let options = {
@ -406,7 +403,7 @@ class TorProcess extends EventEmitter {
* @returns {Error}
*/
this.emit('error', new Error(msg));
this.logger.error(`[tor-${this.instance_name}]: ${text}`);
this.logger.error(`[tor-${this.instance_name}]: ${msg}`);
}
else if (text.indexOf('[notice]') !== -1) {

View file

@ -21,7 +21,7 @@ module.exports = {
"Log": "notice stdout",
"NewCircuitPeriod": "10"
},
"torPath": require('@deadcanaries/granax').tor(require('os').platform()),
"torPath": require('granax').tor(require('os').platform()),
"instances": null,
"dns": {
"timeout": 10000,