UNPKG

modi-cli

Version:

Console application for provisioning, displaying or destroying virtual machines in MODI

147 lines (111 loc) 5.39 kB
var security = require('./Lib/CryptoLib.js'); var hidden = require('./Lib/HidePassword.js'); var definitions = require('./Lib/Define.js'); var httpntlm = require('httpntlm'); var fs = require('fs'); var readline = require('readline'); var rl_interface = readline.createInterface({ input: process.stdin, output: process.stdout }); var osversion = process.platform; var homePath; var modiSettingsPath = '.modisettings'; switch(osversion) { case 'win32': homePath = process.env.USERPROFILE; modiSettingsPath = homePath + '\\.modisettings'; break; case 'linux': homePath = process.env.HOME; modiSettingsPath = homePath + '/.modisettings'; break; case 'darwin': homePath = process.env.HOME; modiSettingsPath = homePath + '/.modisettings'; break; } exports.login = function (callback, args1, args2, args3){ //there are 3 arguments for the Provsioning request: provrequestxml, machineName, saveCredentials rl_interface.question('Enter your domain name:', function (answerDomain) { rl_interface.question('Enter your user name:', function (answerUserName) { hidden(rl_interface, 'Enter your password: ', function (inputPassword) { //test the credentials before saving //web api call if (callback == undefined) { httpntlm.get({ url: definitions.testUrl, username: answerUserName, password: inputPassword, workstation: '', domain: answerDomain }, function(err, res) { if (err) { process.stdout.write(''); //a control command.seems to cut some remaining text in the console console.log('There was an authentication error. Error is ' + err); deleteExistingLogin(); process.exit(0); } if (res != undefined && res != null && res.body != null && res.body != undefined) { if (res.body.indexOf(definitions.AccessDeniedMessage) > 0) { process.stdout.write(''); //a control command.seems to cut some remaining text in the console console.log(definitions.WrongCredentialsMessage); deleteExistingLogin(); process.exit(0); } else { storeExistingLogin(answerDomain, answerUserName, inputPassword); var loginData = []; loginData.UserName = answerUserName; loginData.Password = inputPassword; loginData.UserDomain = answerDomain; return loginData; } } else { console.log(definitions.DefaultStatusErrorMessage); deleteExistingLogin(); process.exit(0); } }); } else{ if (args1 == undefined) { callback(answerUserName, inputPassword, answerDomain); } else { callback(answerUserName, inputPassword, answerDomain, args1, args2, args3); } } }); }); }); } exports.loadExistingLogin = function () { if (fs.existsSync(modiSettingsPath)) { var encryptedLoginData = fs.readFileSync(modiSettingsPath).toString(); try { var jsonLoginData = security.Decrypt(encryptedLoginData); //Json format var loginData = JSON.parse(jsonLoginData); return loginData; } catch (e) { console.log('Unable to load the previously used credentials. Redirecting to login...'); return null; } } else return null; } storeExistingLogin = function (userDomain, userName, password) { var jsonLoginData = { 'UserDomain': userDomain, 'UserName': userName, 'Password': password }; var stringLoginData = JSON.stringify(jsonLoginData); var encryptedLoginData = security.Encrypt(stringLoginData); fs.writeFileSync(modiSettingsPath, encryptedLoginData); }; exports.storeExistingLogin = storeExistingLogin; deleteExistingLogin = function() { if (fs.existsSync(modiSettingsPath)) { fs.unlinkSync(modiSettingsPath); } }