censql
Version:
A NodeJS command line client for SAP HANA
81 lines (62 loc) • 2.26 kB
JavaScript
var crypto = require('crypto');
var path = require('path');
var osHomedir = require('os-homedir');
var fs = require("fs");
var SavedConnectionManager = function() {
this.configPath = path.join(osHomedir(), ".censql", "saved_connections");
this.load();
}
SavedConnectionManager.prototype.save = function() {
/**
* Write config to file
*/
fs.writeFileSync(this.configPath, new Buffer(JSON.stringify(this.contents, null, 4)).toString("base64"));
fs.chmodSync(this.configPath, "600");
}
SavedConnectionManager.prototype.load = function() {
try {
this.contents = JSON.parse(new Buffer(fs.readFileSync(this.configPath).toString(), 'base64'));
} catch (e) {
this.contents = {};
}
}
SavedConnectionManager.prototype.encryptPassword = function(connectionSettings) {
/**
* Encrypt password. (This is mainly to stop accidenatlly finding a password, rather than keeping passwords from attackers)
*/
var cipher = crypto.createCipher("aes256", new Buffer(connectionSettings.host + connectionSettings.user + connectionSettings.port).toString('base64'));
connectionSettings.pass = cipher.update(connectionSettings.pass, 'utf8', 'hex') + cipher.final('hex');
return connectionSettings;
}
SavedConnectionManager.prototype.add = function(connectionSettings, name) {
connectionSettings = this.encryptPassword(connectionSettings);
this.load();
/**
* Add to config
*/
this.contents[name] = connectionSettings;
this.save();
}
SavedConnectionManager.prototype.get = function(name) {
/**
* Could not load details for name
*/
if (Object.keys(this.contents).indexOf(name) === -1) {
return null;
}
/**
* Found it!
*/
var connDetails = this.contents[name];
/**
* Decrypt the password
*/
var decipher = crypto.createDecipher('aes256', new Buffer(connDetails.host + connDetails.user + connDetails.port).toString('base64'));
connDetails.pass = decipher.update(connDetails.pass, 'hex', 'utf8') + decipher.final('utf8');;
return connDetails;
}
SavedConnectionManager.prototype.getAll = function() {
this.load();
return this.contents
}
module.exports = SavedConnectionManager;