Compare commits

...

14 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
13 changed files with 234 additions and 107 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,5 +1,23 @@
# 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.

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,

262
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.9",
"version": "4.0.13",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -10,6 +10,61 @@
"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",
@ -62,9 +117,9 @@
"dev": true
},
"acorn": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
"integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg=="
"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",
@ -149,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",
@ -181,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",
@ -942,19 +1002,6 @@
"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",
@ -1508,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",
@ -1650,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",
@ -1732,25 +1763,25 @@
}
},
"multi-rpc": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/multi-rpc/-/multi-rpc-1.4.0.tgz",
"integrity": "sha512-A73Ux1mUiRw1LT8uvdxm+MbmxVZCCtV3nVHS1ksYIx+zuXsjc86VoK7Ck7SFW0OLxhMROnsOEhU9rPhR1Gywww==",
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/multi-rpc/-/multi-rpc-1.5.5.tgz",
"integrity": "sha512-JS6Pr0e9Rk4jFKAnyJD4qVzahlkreHH0cA76cua9pqiYnJhrb+pqGDNFxcSBfLvLhNpnY+dCOaBlsuRPahkzQA==",
"requires": {
"multi-rpc-common": "^2.1.0",
"multi-rpc-core": "^1.0.1",
"multi-rpc-http-client-side-transport": "^1.0.4",
"multi-rpc-http-transport": "^1.0.3",
"multi-rpc-json-serializer": "^1.0.4",
"multi-rpc-msgpack-serializer": "^1.0.4",
"multi-rpc-tcp-transport": "^1.1.0",
"multi-rpc-websocket-client-side-transport": "^1.2.1",
"multi-rpc-websocket-transport": "^1.2.1"
"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.1.0",
"resolved": "https://registry.npmjs.org/multi-rpc-common/-/multi-rpc-common-2.1.0.tgz",
"integrity": "sha512-retoFduGmmijF9XgBTJPKMWSXGXkf44N3nSBkSXznYtjA2YC25C8MCEaZmvwE43+Oe7HPpuEcPWQkvE23psb5w==",
"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",
@ -1774,15 +1805,15 @@
}
},
"multi-rpc-core": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/multi-rpc-core/-/multi-rpc-core-1.0.1.tgz",
"integrity": "sha512-9Pdjs15reJqM8nbEOTN81SedR6MH3QVThx7LmxRgzvWVvq4gyrN/J6HQ9Q4uj7EQ6DR6O/Ureb8npqEf7xYESQ==",
"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.1.0",
"multi-rpc-common": "^2.2.6",
"parse-function": "^5.2.11"
},
"dependencies": {
@ -1799,71 +1830,111 @@
}
},
"multi-rpc-http-client-side-transport": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/multi-rpc-http-client-side-transport/-/multi-rpc-http-client-side-transport-1.0.4.tgz",
"integrity": "sha512-QjjA1F5GAERhn0aCsfOjNzaFrRyf7pU4pQLM/BnH1jyX7C/Mrh0YXHwCQKUKWzLygTD7AXEkSGGPyoTl1Wh0xw==",
"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.1.0"
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-http-transport": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/multi-rpc-http-transport/-/multi-rpc-http-transport-1.0.3.tgz",
"integrity": "sha512-Qvuxkuc4UB+F13goGz4rXP0wl2prVga0rn+eLJdwaDGfTDLgkWlh7H5iXb4jZEcdOyKqDjcZqcY1pVTfl7KeCg==",
"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.1.0",
"multi-rpc-http-client-side-transport": "^1.0.4"
"multi-rpc-common": "^2.2.6",
"multi-rpc-http-client-side-transport": "^1.0.5"
}
},
"multi-rpc-json-serializer": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/multi-rpc-json-serializer/-/multi-rpc-json-serializer-1.0.4.tgz",
"integrity": "sha512-0b+r728HPCCW8S41x62gHxOITHy1QutL08pCuSufmnre3tjOmljXyTN8EUEHs2xu9Gu6WXriWxlb5EKGPJc7BA==",
"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.1.0",
"multi-rpc-common": "^2.2.6",
"text-encoding": "^0.7.0"
}
},
"multi-rpc-msgpack-serializer": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/multi-rpc-msgpack-serializer/-/multi-rpc-msgpack-serializer-1.0.4.tgz",
"integrity": "sha512-8gy6GsZSQvKAWqiGaUG2MhUPcWu2ErDkbT2fsUdlxieO6llotrT9gTB6F5NaQKo/mUjpvShNHqCAmyGPos5erQ==",
"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.1.0"
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-tcp-transport": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/multi-rpc-tcp-transport/-/multi-rpc-tcp-transport-1.1.0.tgz",
"integrity": "sha512-H4EbNMjDlGmgvBKrmxZ7XVtAYhXluivfiOGDMqlGYerPdiu3IdLKqD+x6IzYfFgoTa3ljRGlKhz5ipAnTnvBxw==",
"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.1.0"
"multi-rpc-common": "^2.2.6"
}
},
"multi-rpc-websocket-client-side-transport": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/multi-rpc-websocket-client-side-transport/-/multi-rpc-websocket-client-side-transport-1.2.1.tgz",
"integrity": "sha512-uCQMpAJ271eVNngZiepQKNrEICoDhdRc+jFWHM474TxL0qBAw2aMctjhNnME/qUtj1Oal3CpUsTcytJD7kMrdA==",
"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",
"multi-rpc-common": "^2.1.0",
"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.1",
"resolved": "https://registry.npmjs.org/multi-rpc-websocket-transport/-/multi-rpc-websocket-transport-1.2.1.tgz",
"integrity": "sha512-4jrWeHCK1TJZX1I3Np0qATWP2TjkV8y12QtgTZFUJ+7Owr4/or2aiAwUeiq7vt1P8MMwB2mgTq5CEW8jphyWvA==",
"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.1.0",
"multi-rpc-websocket-client-side-transport": "^1.2.1",
"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.12.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
@ -1879,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"
}
},
@ -1989,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",
@ -2125,6 +2195,11 @@
"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",
@ -2233,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",
@ -2535,7 +2615,8 @@
"dependencies": {
"ipv6": {
"version": "3.1.1",
"bundled": true,
"resolved": false,
"integrity": "sha1-RtoOJgrzb9m+tBKXyYe3whotnhw=",
"requires": {
"cli": "0.4.x",
"cliff": "0.1.x",
@ -2544,7 +2625,8 @@
"dependencies": {
"sprintf": {
"version": "0.1.3",
"bundled": true
"resolved": false,
"integrity": "sha1-Uw/DFAXUdCL27bQPKb2vrFme3hE="
}
}
}

View file

@ -1,6 +1,6 @@
{
"name": "tor-router",
"version": "4.0.9",
"version": "4.0.13",
"main": "src/index.js",
"repository": "git@github.com:znetstar/tor-router.git",
"author": "Zachary Boyd <zachary@zacharyboyd.nyc>",
@ -31,14 +31,16 @@
"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.4.0",
"multi-rpc": "^1.5.5",
"nanoid": "^1.2.3",
"native-dns": "git+https://github.com/znetstar/node-dns.git#336f1d3027b2a3da719b5cd65380219267901aeb",
"nconf": "^0.10.0",

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

@ -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 }));
}