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);
return Promise.resolve();
}).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) {

View file

@ -164,6 +164,30 @@ class TorPool extends EventEmitter {
}
/* 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;

View file

@ -68,12 +68,21 @@ class TorProcess extends EventEmitter {
return this._controller || null;
}
getConfig(callback) {
/* Passthrough to granax */
get_config(keyword, callback) {
if (!this.controller) {
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) {