Compare commits

...

21 commits

Author SHA1 Message Date
Zachary Boyd
6ab973e359 Update CNAME 2021-08-06 12:43:00 -04:00
Zachary Boyd
0a414024c2 Update CNAME 2021-08-06 12:39:22 -04:00
Zachary Boyd
a261baeed3
bump version 2019-11-23 22:44:19 -05:00
Zachary Boyd
6040db22dc
merge 2019-11-23 22:41:28 -05:00
Zachary Boyd
37a58f929a
Merge pull request #14 from jogli5er/upstream_master
Pool getPort race condition
2019-11-23 22:40:13 -05:00
Zachary Boyd
c1b7a124c4
Merge branch 'master' into upstream_master 2019-11-23 22:39:55 -05:00
Zachary Boyd
5617f2bfdb
Switches the granax package to the new package location 2019-11-21 23:13:31 -05:00
Zachary Boyd
6b7054500d
Merge pull request #16 from znetstar/dependabot/npm_and_yarn/merge-1.2.1
Bump merge from 1.2.0 to 1.2.1
2019-11-21 22:33:39 -05:00
dependabot[bot]
bf0327ad66
Bump merge from 1.2.0 to 1.2.1
Bumps [merge](https://github.com/yeikos/js.merge) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/yeikos/js.merge/releases)
- [Commits](https://github.com/yeikos/js.merge/compare/v1.2.0...v1.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2019-11-22 03:26:08 +00:00
Zachary Boyd
fbdbf525df
Added a entrypoint file so the node.js process is not the root process, so it responds to SIGINT calls (Ctrl+C). 2019-11-21 22:25:01 -05:00
Roman Brunner
f89e4b20c5 Pool getPort race condition
It appears that when requesting multiple ports asynchronously,
that a port is given out multiple times, which crashes single
Tor processes. Such a crash brings down the whole system as of
now, which might or might not be desired.
This is caused by a race condition on the port numbers. This
commit fixes the issue if a number of Tor instances for the pool
is requested. If the pool is populated with an array of definitions,
the user has to make sure to include the ports in the definition,
otherwise the race condition still persists. If this should still be
allowed is up for discussion or if a check should be included in the
TorPool create function.
2019-11-21 16:27:48 +01:00
Zachary Boyd
15408206a3 Update changelog 2019-01-15 16:07:26 -05:00
Zachary Boyd
76ab9ae829 Fixes #11 2019-01-15 12:11:49 -05:00
Zachary Boyd
aca5498435 updates multi-rpc 2018-12-29 11:14:05 -08:00
Zachary Boyd
5195b576be Updatets to multi-rpc to 1.4.0 2018-12-23 21:17:07 -05:00
Zachary Boyd
08c0b7687e Updates multi-rpc 2018-12-23 20:56:55 -05:00
Zachary Boyd
089e9bbad1 updates multi-rpc 2018-12-16 17:53:18 -05:00
Zachary Boyd
c1dfa465d5 Updates multi-rpc 2018-12-14 19:02:39 -05:00
Zachary Boyd
7b90edabd0 Prevents errors that occur when connecting to the destination in the SOCKS Proxy and HTTP Proxy from crashing the applications 2018-10-15 17:36:32 -04:00
Zachary Boyd
1261821ab3 Updates mutli-rpc 2018-09-26 22:37:17 -04:00
Zachary Boyd
459aef5ca3 Updates multi-rpc 2018-09-25 21:25:06 -04:00
15 changed files with 407 additions and 145 deletions

5
.gitignore vendored
View file

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

View file

@ -1,13 +1,47 @@
# 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).
## [4.0.11] - 2019-01-15
### Changed
- Updates `multi-rpc` to version 1.5.5.
## [4.0.10] - 2018-12-14
### Changed
- Updates `multi-rpc` to version 1.4.1.
## [4.0.9] - 2018-12-14
### Changed
- Updates `multi-rpc` to version 1.4.0.
## [4.0.7] - 2018-12-14
### Changed
- Updates `multi-rpc` to version 1.1.9.
## [4.0.6] - 2018-12-14
### Changed
- Updates `multi-rpc` to version 1.1.1.
## [4.0.5] - 2018-10-15
### Changed
- Prevents errors that occur when connecting to the destination in the SOCKS Proxy and HTTP Proxy from crashing the applications
## [4.0.4] - 2018-09-24
### Changed
- Replaces `jrpc2` with `multi-rpc` for providing the RPC Interface. No changes to the application or API.
- Replaces `jrpc2` with `multi-rpc` for providing the RPC Interface. No changes to the application or API
## [4.0.3] - 2018-09-15
### Changed
- References granax in `default_config.js` to comply with licensing requirements.
- References granax in `default_config.js` to comply with licensing requirements
## [4.0.2] - 2018-09-15

View file

@ -20,7 +20,9 @@ USER tor_router
ADD package.json /app/package.json
RUN npm install
ADD package-lock.json /app/package-lock.json
RUN npm ci
ADD . /app
@ -28,6 +30,6 @@ ENV HOME /home/tor_router
EXPOSE 9050 9053 9077
ENTRYPOINT [ "tor-router" ]
ENTRYPOINT [ "/bin/bash", "/app/docker-entrypoint.sh" ]
CMD [ "-s", "-d", "-j", "1" ]

3
docker-entrypoint.sh Normal file
View file

@ -0,0 +1,3 @@
#!/bin/bash
/app/bin/tor-router $@

View file

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

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('granax');
const { TorController } = require('@deadcanaries/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('granax').tor(require('os').platform()),
"torPath": require('@deadcanaries/granax').tor(require('os').platform()),
"instances": null,
"dns": {
"timeout": 10000,

415
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.4",
"version": "4.0.13",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -10,29 +10,71 @@
"integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=",
"optional": true
},
"@types/acorn": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.3.tgz",
"integrity": "sha512-gou/kWQkGPMZjdCKNZGDpqxLm9+ErG/pFZKPX4tvCjr0Xf4FCYYX3nAsu7aDVKJV3KUe27+mvqqyWT/9VZoM/A==",
"@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": {
"@types/estree": "*"
"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/detect-node": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/detect-node/-/detect-node-2.0.0.tgz",
"integrity": "sha512-+BozjlbPTACYITf1PWf62HLtDV79HbmZosUN1mv1gGrnjDCRwBXkDKka1sf6YQJvspmfPXVcy+X6tFW62KteeQ=="
},
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
},
"@types/events": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
"integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
},
"@types/lodash": {
"version": "4.14.119",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz",
"integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw=="
},
"@types/msgpack-lite": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@types/msgpack-lite/-/msgpack-lite-0.1.6.tgz",
@ -46,10 +88,10 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz",
"integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw=="
},
"@types/text-encoding": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/@types/text-encoding/-/text-encoding-0.0.33.tgz",
"integrity": "sha512-kAMOjud0Nw3HPY0Cu8cTFk0LVya8skY+ajb2rgrSahPQ6AreN0cpGBNrs8Kjlu9EhFIeh5cp7phovL7v9HrPdQ=="
"@types/serialize-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/serialize-error/-/serialize-error-2.1.0.tgz",
"integrity": "sha512-PXQYOySu+YjmtSKxWkXn00H3e4anQMiCaDw0Km7EHfM2/Da79Vni3Mt1QuKP9fmBobaLxN+3vjhSowjQp6XY9g=="
},
"@types/uuid": {
"version": "3.4.4",
@ -75,9 +117,9 @@
"dev": true
},
"acorn": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.1.tgz",
"integrity": "sha512-SiwgrRuRD2D1R6qjwwoopKcCTkmmIWjy1M15Wv+Nk/7VUsBad4P8GOPft2t6coDZG0TuR5dq9o1v0g8wo7F6+A=="
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
"integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg=="
},
"agent-base": {
"version": "4.2.1",
@ -162,9 +204,9 @@
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
},
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
},
"asn1": {
"version": "0.2.4",
@ -194,6 +236,11 @@
"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",
@ -215,7 +262,8 @@
"babylon": {
"version": "7.0.0-beta.19",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
"integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A=="
"integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
@ -304,6 +352,7 @@
"version": "0.8.9",
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
"integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
"dev": true,
"requires": {
"underscore-contrib": "~0.3.0"
}
@ -497,12 +546,12 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cross-fetch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz",
"integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.0.tgz",
"integrity": "sha512-P8HyKlMwT1ed9LqEWlJu+zfcxfn0KI4Nl4nxyvu1a8sg4vgtHdwhElZOgSNzoar44zQMdliZcve4QG/04AUi9Q==",
"requires": {
"node-fetch": "2.1.2",
"whatwg-fetch": "2.0.4"
"node-fetch": "2.3.0",
"whatwg-fetch": "3.0.0"
}
},
"cross-spawn": {
@ -614,11 +663,6 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"detect-node": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
},
"diagnostics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz",
@ -735,7 +779,8 @@
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"esprima": {
"version": "2.7.3",
@ -954,20 +999,8 @@
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
"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"
}
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
"growl": {
"version": "1.10.5",
@ -1430,6 +1463,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
"dev": true,
"requires": {
"xmlcreate": "^1.0.1"
}
@ -1445,6 +1479,7 @@
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
"integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
"dev": true,
"requires": {
"babylon": "7.0.0-beta.19",
"bluebird": "~3.5.0",
@ -1507,6 +1542,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
"integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.9"
}
@ -1519,17 +1555,6 @@
"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",
@ -1624,7 +1649,8 @@
"marked": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
"integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
"integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
"dev": true
},
"mem": {
"version": "1.1.0",
@ -1660,11 +1686,6 @@
}
}
},
"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",
@ -1742,38 +1763,182 @@
}
},
"multi-rpc": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/multi-rpc/-/multi-rpc-1.0.4.tgz",
"integrity": "sha512-EG+AI/9X6AjYfWY6cFGEMCTmfLe7JvlF+MBU9HukZSnEl5cu9jHJBobQXVLEm5TqjtsdGzXDD0/zFixvREGPKw==",
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/multi-rpc/-/multi-rpc-1.5.5.tgz",
"integrity": "sha512-JS6Pr0e9Rk4jFKAnyJD4qVzahlkreHH0cA76cua9pqiYnJhrb+pqGDNFxcSBfLvLhNpnY+dCOaBlsuRPahkzQA==",
"requires": {
"@types/acorn": "^4.0.3",
"@types/detect-node": "^2.0.0",
"@types/msgpack-lite": "^0.1.6",
"@types/text-encoding": "0.0.33",
"multi-rpc-common": "^2.2.6",
"multi-rpc-core": "^1.0.3",
"multi-rpc-http-client-side-transport": "^1.0.5",
"multi-rpc-http-transport": "^1.0.4",
"multi-rpc-json-serializer": "^1.0.5",
"multi-rpc-msgpack-serializer": "^1.0.5",
"multi-rpc-tcp-transport": "^1.1.3",
"multi-rpc-websocket-client-side-transport": "^1.2.7",
"multi-rpc-websocket-transport": "^1.2.5"
}
},
"multi-rpc-common": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/multi-rpc-common/-/multi-rpc-common-2.2.6.tgz",
"integrity": "sha512-TEN63Sd2GYFbPJtCGh+7uwWk2N+W+Q6AZkPwAGsVPesFg9VptP34wBKlPSjyT0S5+OmjhDtcuCMUk664nfqNpg==",
"requires": {
"@types/lodash": "^4.14.119",
"@types/serialize-error": "^2.1.0",
"@types/uuid": "^3.4.4",
"@types/websocket": "0.0.40",
"acorn": "^6.0.1",
"cross-fetch": "^2.2.2",
"detect-node": "^2.0.4",
"eventemitter2": "^5.0.1",
"msgpack-lite": "^0.1.26",
"parse-function": "^5.2.10",
"text-encoding": "^0.6.4",
"uuid": "^3.3.2",
"websocket": "^1.0.28"
"lodash": "^4.17.11",
"serialize-error": "^3.0.0",
"uuid": "^3.3.2"
},
"dependencies": {
"eventemitter2": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz",
"integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI="
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
}
}
},
"multi-rpc-core": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/multi-rpc-core/-/multi-rpc-core-1.0.3.tgz",
"integrity": "sha512-2CuqXaEBxaru2sDG0ng5EkM7F722RdYFv+GjQA8Ui/2QH5yMtb5EbwXM0S0LFrRkFWOzGaeHJLQ9n3pc15S0+Q==",
"requires": {
"@types/lodash": "^4.14.119",
"acorn": "^6.0.4",
"eventemitter2": "^5.0.1",
"lodash": "^4.17.11",
"multi-rpc-common": "^2.2.6",
"parse-function": "^5.2.11"
},
"dependencies": {
"eventemitter2": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz",
"integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI="
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
}
}
},
"multi-rpc-http-client-side-transport": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/multi-rpc-http-client-side-transport/-/multi-rpc-http-client-side-transport-1.0.5.tgz",
"integrity": "sha512-5+UXbN5V+BJrQwC09FJpv+4+B+ZjJaTeAfNorqQDjKhPEIFNnShxmvgUOfNghNph6H3hhHMnoM942kUA7rhb0w==",
"requires": {
"cross-fetch": "^3.0.0",
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-http-transport": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/multi-rpc-http-transport/-/multi-rpc-http-transport-1.0.4.tgz",
"integrity": "sha512-R4q+RrQjuk2t02aZtBze6yUDB/RZzklcx1HsZjT7lFBCzbPZWgZqhVeJLgbMlhLbo4/E6fG/nvW5MYZDdOLz3g==",
"requires": {
"multi-rpc-common": "^2.2.6",
"multi-rpc-http-client-side-transport": "^1.0.5"
}
},
"multi-rpc-json-serializer": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/multi-rpc-json-serializer/-/multi-rpc-json-serializer-1.0.5.tgz",
"integrity": "sha512-5OUU1+U4clAanrc9tn2XZ328OjeSxG+vmnb78tLyQkxfXgDJ3igZrODSnV2i5MoBC3qi99Tdp73oCkBU4rfkxg==",
"requires": {
"multi-rpc-common": "^2.2.6",
"text-encoding": "^0.7.0"
}
},
"multi-rpc-msgpack-serializer": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/multi-rpc-msgpack-serializer/-/multi-rpc-msgpack-serializer-1.0.5.tgz",
"integrity": "sha512-Sa+CjMjKICDQcTolS70PUbR61uKNBmFWNInQF5hpCkS1iICnjCK490+JaGio5OAXsB58VDzwMmBrzbZialS/IQ==",
"requires": {
"@types/msgpack-lite": "^0.1.6",
"msgpack-lite": "^0.1.26",
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-tcp-transport": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/multi-rpc-tcp-transport/-/multi-rpc-tcp-transport-1.1.3.tgz",
"integrity": "sha512-pcahuoXtKbWhVLJ/mi6Dd6r6JI+6RhpTkReWkXrI/AYsivdCYkn1TGNuj3Xpt9yJsLkYXchPHW2qF3mZcGGVWQ==",
"requires": {
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-websocket-client-side-transport": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/multi-rpc-websocket-client-side-transport/-/multi-rpc-websocket-client-side-transport-1.2.7.tgz",
"integrity": "sha512-VmzWFF+xSOmLOjlcA5AbqUfIs8T+2U/WpfMvU9pjzLb76VSOaRJ+6FWbwQRYiBClsM4gqj9aohP0XSvR9DyxEg==",
"requires": {
"@types/websocket": "0.0.40",
"lodash": "^4.17.11",
"multi-rpc-common": "^2.2.6",
"websocket": "^1.0.28"
},
"dependencies": {
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
}
}
},
"multi-rpc-websocket-transport": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/multi-rpc-websocket-transport/-/multi-rpc-websocket-transport-1.2.6.tgz",
"integrity": "sha512-dlr0NvRTWjNhqKNhQfHJ+a05qyoejr3+4ijaf/8R5hnS1lwCt6jhQXHJ2gAoNNPSp28hqyMBEX0QvwrEMPChtA==",
"requires": {
"@types/websocket": "0.0.40",
"multi-rpc-common": "^2.2.6",
"multi-rpc-websocket-client-side-transport": "^1.2.7",
"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.11.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw=="
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
"integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="
},
"nanoid": {
"version": "1.2.3",
@ -1785,7 +1950,7 @@
"from": "git+https://github.com/znetstar/node-dns.git#336f1d3027b2a3da719b5cd65380219267901aeb",
"requires": {
"ipaddr.js": "~0.1.3",
"native-dns-cache": "git+https://github.com/znetstar/native-dns-cache.git#7743c19bd1b70d0ec32a364aadc77fbcfd5a67ad",
"native-dns-cache": "git+https://github.com/znetstar/native-dns-cache.git",
"native-dns-packet": "~0.1.1"
}
},
@ -1895,8 +2060,7 @@
"ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
"optional": true
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M="
},
"nice-try": {
"version": "1.0.5",
@ -1905,9 +2069,9 @@
"dev": true
},
"node-fetch": {
"version": "2.1.2",
"resolved": "http://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
"integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
"integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA=="
},
"nopt": {
"version": "3.0.6",
@ -2022,15 +2186,20 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
},
"parse-function": {
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/parse-function/-/parse-function-5.2.10.tgz",
"integrity": "sha512-ImvYblMk0ieHcFRK3WSyEgxuawHPLyqweT7POZYLj8eMD9uG0IScE+G0QHTvFscsLDQRD5p0Rtwl3GrfBByQfg==",
"version": "5.2.11",
"resolved": "https://registry.npmjs.org/parse-function/-/parse-function-5.2.11.tgz",
"integrity": "sha512-2nQChgTKz80awFjQqs93ZzgQPOykT+BXomHUfwMdIben3PT2uohAPot+h5D+PNa0T+odzjuMZUMOoCyJfnej1Q==",
"requires": {
"arrify": "1.0.1",
"babylon": "7.0.0-beta.47",
"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",
@ -2139,6 +2308,11 @@
"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",
@ -2321,6 +2495,7 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
"integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
"dev": true,
"requires": {
"underscore": "~1.6.0"
},
@ -2328,7 +2503,8 @@
"underscore": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
"dev": true
}
}
},
@ -2366,6 +2542,11 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
},
"serialize-error": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz",
"integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A=="
},
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@ -2426,15 +2607,16 @@
}
},
"socksv5": {
"version": "git+https://github.com/znetstar/socksv5.git#431e541390314adbbe765650d8d810ec1df38d8a",
"from": "git+https://github.com/znetstar/socksv5.git#431e541390314adbbe765650d8d810ec1df38d8a",
"version": "git+https://github.com/znetstar/socksv5.git#1480422215cf1464fa06f5aec4a3e7f2117e3403",
"from": "git+https://github.com/znetstar/socksv5.git#1480422215cf1464fa06f5aec4a3e7f2117e3403",
"requires": {
"ipv6": "*"
},
"dependencies": {
"ipv6": {
"version": "3.1.1",
"bundled": true,
"resolved": false,
"integrity": "sha1-RtoOJgrzb9m+tBKXyYe3whotnhw=",
"requires": {
"cli": "0.4.x",
"cliff": "0.1.x",
@ -2443,7 +2625,8 @@
"dependencies": {
"sprintf": {
"version": "0.1.3",
"bundled": true
"resolved": false,
"integrity": "sha1-Uw/DFAXUdCL27bQPKb2vrFme3hE="
}
}
}
@ -2566,7 +2749,8 @@
"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="
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"supports-color": {
"version": "5.4.0",
@ -2580,7 +2764,8 @@
"taffydb": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
"integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg="
"integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=",
"dev": true
},
"temp": {
"version": "0.8.3",
@ -2592,9 +2777,9 @@
}
},
"text-encoding": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
"integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk="
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
"integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA=="
},
"text-hex": {
"version": "0.0.0",
@ -2654,12 +2839,14 @@
"underscore": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
"dev": true
},
"underscore-contrib": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
"integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
"dev": true,
"requires": {
"underscore": "1.6.0"
},
@ -2667,7 +2854,8 @@
"underscore": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
"dev": true
}
}
},
@ -2733,9 +2921,9 @@
}
},
"whatwg-fetch": {
"version": "2.0.4",
"resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
},
"when": {
"version": "3.7.8",
@ -2831,7 +3019,8 @@
"xmlcreate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8="
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
"dev": true
},
"y18n": {
"version": "3.2.1",

View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.4",
"version": "4.0.13",
"main": "src/index.js",
"repository": "git@github.com:znetstar/tor-router.git",
"author": "Zachary Boyd <zachary@zacharyboyd.nyc>",
@ -31,19 +31,21 @@
"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.0.4",
"multi-rpc": "^1.5.5",
"nanoid": "^1.2.3",
"native-dns": "git+https://github.com/znetstar/node-dns.git#336f1d3027b2a3da719b5cd65380219267901aeb",
"nconf": "^0.10.0",
"shelljs": "^0.8.2",
"socksv5": "git+https://github.com/znetstar/socksv5.git#431e541390314adbbe765650d8d810ec1df38d8a",
"socksv5": "git+https://github.com/znetstar/socksv5.git#1480422215cf1464fa06f5aec4a3e7f2117e3403",
"temp": "^0.8.3",
"winston": "^3.0.0-rc5",
"yargs": "^11.0.0"

View file

@ -147,6 +147,12 @@ class HTTPServer extends Server {
let buffer = [];
const onError = (err) => {
this.logger.error("[http-proxy]: an error occured: "+err.message);
res.writeHead(500);
res.end();
}
function onIncomingData(chunk) {
buffer.push(chunk);
}
@ -157,26 +163,26 @@ class HTTPServer extends Server {
req.on('data', onIncomingData);
req.on('end', preConnectClosed);
req.on('error', function (err) {
this.logger.error("[http-proxy]: an error occured: "+err.message);
});
req.on('error', onError);
let connect = (tor_instance) => {
let source = { hostname: req.connection.remoteAddress, port: req.connection.remotePort, proto: 'http', by_name: Boolean(instance) };
let socks_port = tor_instance.socks_port;
const agent = socks.HttpAgent({
proxyHost: '127.0.0.1',
proxyPort: socks_port,
auths: [ socks.auth.None() ],
localDNS: false
});
let proxy_req = http.request({
method: req.method,
hostname: url.hostname,
port: url.port,
path: url.path,
headers: req.headers,
agent: socks.HttpAgent({
proxyHost: '127.0.0.1',
proxyPort: socks_port,
auths: [ socks.auth.None() ],
localDNS: false
})
agent
}, (proxy_res) => {
/**
* Fires when the proxy has made a connection through an instance using HTTP or HTTP-Connect.
@ -199,6 +205,8 @@ class HTTPServer extends Server {
res.writeHead(proxy_res.statusCode, proxy_res.headers);
});
proxy_req.on("error", onError);
req.removeListener('data', onIncomingData);
req.on('data', (chunk) => {
@ -271,7 +279,7 @@ class HTTPServer extends Server {
inbound_socket.on('error', onClose);
inbound_socket.on('close', onClose);
socks.connect({
const client = socks.connect({
host: hostname,
port: port,
proxyHost: '127.0.0.1',
@ -292,6 +300,8 @@ class HTTPServer extends Server {
outbound_socket.pipe(inbound_socket);
inbound_socket.pipe(outbound_socket);
});
client.on('error', onClose);
};
if (instance) {

View file

@ -146,7 +146,7 @@ class SOCKSServer extends Server{
let source = { hostname: info.srcAddr, port: info.srcPort, proto: 'socks', by_name: Boolean(instance) };
let socks_port = tor_instance.socks_port;
socks.connect({
let client = socks.connect({
host: info.dstAddr,
port: info.dstPort,
proxyHost: '127.0.0.1',
@ -182,6 +182,8 @@ class SOCKSServer extends Server{
outbound_socket.write(buffer.shift());
}
});
client.on('error', onClose);
};
if (instance) {

View file

@ -27,7 +27,9 @@ 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);
@ -462,6 +464,19 @@ 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('granax');
const { TorController } = require('@deadcanaries/granax');
const nanoid = require("nanoid");
const winston = require('winston');
Promise.promisifyAll(temp);
@ -52,6 +52,7 @@ class TorProcess extends EventEmitter {
definition.Config = definition.Config || {};
this._definition = definition;
this._ports = definition.ports || {};
/**
* Path to the Tor executable.
@ -263,10 +264,12 @@ class TorProcess extends EventEmitter {
* @returns {Promise<ChildProcess>} - The process that has been created.
*/
async create() {
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();
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}`);
Object.freeze(this._ports);
let options = {
@ -403,7 +406,7 @@ class TorProcess extends EventEmitter {
* @returns {Error}
*/
this.emit('error', new Error(msg));
this.logger.error(`[tor-${this.instance_name}]: ${msg}`);
this.logger.error(`[tor-${this.instance_name}]: ${text}`);
}
else if (text.indexOf('[notice]') !== -1) {

View file

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

View file

@ -132,7 +132,7 @@ async function main(nconf, logger) {
}
if (error instanceof Error) {
logger.error(`[global]: error shutting down: ${error.message}`);
logger.error(`[global]: ${error.stack || 'An unknown error occured'}`);
} else {
error = 0;
}
@ -148,6 +148,7 @@ async function main(nconf, logger) {
process.on('exit', cleanUp);
process.on('SIGINT', cleanUp);
process.on('SIGTERM', cleanUp);
process.on('uncaughtException', cleanUp.bind({ handleError: true }));
}