Allows Tor configuration to be modified at runtime via the rpc interface

This commit is contained in:
Zachary Boyd 2018-05-10 22:25:26 -07:00
parent 38bf4d7c6a
commit 48373e3c71
3 changed files with 68 additions and 1 deletions

View file

@ -146,6 +146,40 @@ class ControlServer {
this.nconf.set('loadBalanceMethod', loadBalanceMethod); this.nconf.set('loadBalanceMethod', loadBalanceMethod);
return Promise.resolve(); return Promise.resolve();
}).bind(this)); }).bind(this));
server.expose('getInstanceConfigByName', (function (name, keyword) {
return new Promise((resolve, reject) => {
this.torPool.get_config_by_name(name, keyword, (error, value) => {
if (error) reject(error);
else resolve(value);
});
});
}).bind(this));
server.expose('getInstanceConfigAt', (function (index, keyword) {
return new Promise((resolve, reject) => {
this.torPool.get_config_at(index, keyword, (error, value) => {
if (error) reject(error);
else resolve(value);
});
});
}).bind(this));
server.expose('setInstanceConfigByName', (function (name, keyword, value) {
return new Promise((resolve, reject) => {
this.torPool.set_config_by_name(name, keyword, value, (error) => {
if (error) reject(error);
});
});
}).bind(this));
server.expose('setInstanceConfigAt', (function (index, keyword, value) {
return new Promise((resolve, reject) => {
this.torPool.set_config_at(index, keyword, value, (error) => {
if (error) reject(error);
});
});
}).bind(this));
} }
listen(port, callback) { listen(port, callback) {

View file

@ -164,6 +164,30 @@ class TorPool extends EventEmitter {
} }
/* End Deprecated */ /* End Deprecated */
get_config_by_name(name, keyword, callback) {
let instance = this.instance_by_name(name);
if (!instance) return callback && callback(new Error(`Instance "${name}" not found`));
instance.get_config(keyword, callback);
}
set_config_by_name(name, keyword, value, callback) {
let instance = this.instance_by_name(name);
if (!instance) return callback && callback(new Error(`Instance "${name}" not found`));
instance.set_config(keyword, value, callback);
}
get_config_at(index, keyword, callback) {
let instance = this.instances[index];
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
instance.get_config(keyword, callback);
}
set_config_at(index, keyword, value, callback) {
let instance = this.instances[index];
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
instance.set_config(keyword, value, callback);
}
}; };
TorPool.LoadBalanceMethods = load_balance_methods; TorPool.LoadBalanceMethods = load_balance_methods;

View file

@ -68,12 +68,21 @@ class TorProcess extends EventEmitter {
return this._controller || null; return this._controller || null;
} }
getConfig(callback) { /* Passthrough to granax */
get_config(keyword, callback) {
if (!this.controller) { if (!this.controller) {
return callback(new Error(`Controller is not connected`)); return callback(new Error(`Controller is not connected`));
} }
this.controller.getConfig(keyword, callback);
}
set_config(keyword, value, callback) {
if (!this.controller) {
return callback(new Error(`Controller is not connected`));
}
this.controller.setConfig(keyword, value, callback);
} }
create(callback) { create(callback) {