diff --git a/Dockerfile b/Dockerfile index dff0128..a9f01f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,12 @@ RUN npm install ADD . /app +RUN useradd -ms /bin/bash tor + +USER tor_router + +ENV HOME /home/tor_router + ENTRYPOINT [ "tor-router" ] CMD [ "-s", "-d", "-j", "1" ] \ No newline at end of file diff --git a/package.json b/package.json index 73441b5..6c5fccb 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ }, "scripts": { "start": "bin/tor-router -s -d -j 1", - "test": "mocha test/test.js" + "test": "mocha test/test.js", + "debug": "node --inspect-brk bin/tor-router" }, "devDependencies": { "mocha": "^3.2.0", diff --git a/src/ControlServer.js b/src/ControlServer.js index 7f076d3..9dbede4 100644 --- a/src/ControlServer.js +++ b/src/ControlServer.js @@ -6,7 +6,7 @@ const rpc = require('jrpc2'); class ControlServer { constructor(logger) { - var torPool = this.torPool = new TorPool(null, null, logger); + this.torPool = this.torPool = new TorPool(null, null, logger); this.logger = logger; let server = this.server = new rpc.Server(); @@ -15,47 +15,47 @@ class ControlServer { server.expose('createDNSServer', this.createDNSServer.bind(this)); server.expose('createHTTPServer', this.createHTTPServer.bind(this)); - server.expose('queryInstances', function () { + server.expose('queryInstances', (function () { return new Promise((resolve, reject) => { - if (!torPool) + if (!this.torPool) return reject({ message: 'No pool created' }); - resolve(torPool.instances.map((i) => ( { dns_port: i.dns_port, socks_port: i.socks_port, process_id: i.process.pid } )) ); + resolve(this.torPool.instances.map((i) => ( { dns_port: i.dns_port, socks_port: i.socks_port, process_id: i.process.pid } )) ); }); - }); + }).bind(this)); - server.expose('createInstances', function (instances) { + server.expose('createInstances', (function (instances) { return new Promise((resolve, reject) => { - torPool.create(instances, (error, instances) => { + this.torPool.create(instances, (error, instances) => { if (error) reject(error); else resolve(); }); }); - }); + }).bind(this) ); - server.expose('removeInstances', function (instances) { + server.expose('removeInstances', (function (instances) { return new Promise((resolve, reject) => { - torPool.remove(instances, (error) => { + this.torPool.remove(instances, (error) => { if (error) reject(error); else resolve(); }); }); - }); + }).bind(this) ); - server.expose('newIps', function () { - torPool.new_ips(); + server.expose('newIps', (function() { + this.torPool.new_ips(); return Promise.resolve(); - }); + }).bind(this) ); - server.expose('nextInstance', function () { - torPool.next(); + server.expose('nextInstance', (function () { + this.torPool.next(); return Promise.resolve(); - }); + }).bind(this) ); - server.expose('closeInstances', function () { - torPool.exit(); + server.expose('closeInstances', (function () { + this.torPool.exit(); return Promise.resolve(); - }); + }).bind(this) ); } diff --git a/src/TorPool.js b/src/TorPool.js index ffb6b8d..49b45d7 100644 --- a/src/TorPool.js +++ b/src/TorPool.js @@ -37,7 +37,9 @@ class TorPool extends EventEmitter { this.logger = logger; } - get instances() { return this._instances.filter((tor) => tor.ready).slice(0); } + get instances() { + return this._instances.filter((tor) => tor.ready).slice(0); + } create_instance(callback) { let config = _.extend({}, this.tor_config)