Skip to content

Instantly share code, notes, and snippets.

@andrewjmead
Created December 6, 2015 16:36
Show Gist options
  • Save andrewjmead/fa0c94e5e11e558b0c53 to your computer and use it in GitHub Desktop.
Save andrewjmead/fa0c94e5e11e558b0c53 to your computer and use it in GitHub Desktop.
Password Manage With Master Password Error Message
console.log('starting password manager');
var crypto = require('crypto-js')
var storage = require('node-persist');
storage.initSync();
var argv = require('yargs')
.command('create', 'Create a new account', function (yargs) {
yargs.options({
name: {
demand: true,
alias: 'n',
description: 'Account name (eg: Twitter, Facebook)',
type: 'string'
},
username: {
demand: true,
alias: 'u',
description: 'Account username or email',
type: 'string'
},
password: {
demand: true,
alias: 'p',
description: 'Account password',
type: 'string'
},
masterPassword: {
demand: true,
alias: 'm',
description: 'Master password',
type: 'string'
}
}).help('help');
})
.command('get', 'Get an existing account', function (yargs) {
yargs.options({
name: {
demand: true,
alias: 'n',
description: 'Account name (eg: Twitter, Facebook)',
type: 'string'
},
masterPassword: {
demand: true,
alias: 'm',
description: 'Master password',
type: 'string'
}
}).help('help');
})
.help('help')
.argv;
var command = argv._[0];
// create
// --name
// --username
// --password
// get
// --name
// account.name Facebook
// account.username User12!
// account.password Password123!
function getAccounts (masterPassword) {
// use getItemSync to fetch accounts
var encryptedAccount = storage.getItemSync('accounts');
var accounts = [];
try {
// decrypt
if (typeof encryptedAccount !== 'undefined') {
var bytes = crypto.AES.decrypt(encryptedAccount, masterPassword);
accounts = JSON.parse(bytes.toString(crypto.enc.Utf8));
}
} catch (e) {
console.log('Invalid master password');
process.exit(1);
}
// return accounts array
return accounts;
}
function saveAccounts (accounts, masterPassword) {
// encrypt accounts
var encryptedAccounts = crypto.AES.encrypt(JSON.stringify(accounts), masterPassword);
// setItemSync
storage.setItemSync('accounts', encryptedAccounts.toString());
// return accounts
return accounts;
}
function createAccount (account, masterPassword) {
var accounts = getAccounts(masterPassword);
accounts.push(account);
saveAccounts(accounts, masterPassword);
return account;
}
function getAccount (accountName, masterPassword) {
var accounts = getAccounts(masterPassword)
var matchedAccount;
accounts.forEach(function (account) {
if (account.name === accountName) {
matchedAccount = account;
}
});
return matchedAccount;
}
if (command === 'create') {
var createdAccount = createAccount({
name: argv.name,
username: argv.username,
password: argv.password
}, argv.masterPassword);
console.log('Account created!');
console.log(createdAccount);
} else if (command === 'get') {
var fetchedAccount = getAccount(argv.name, argv.masterPassword);
if (typeof fetchedAccount === 'undefined') {
console.log('Account not found');
} else {
console.log('Account found!');
console.log(fetchedAccount);
}
}
@hari2111
Copy link

hari2111 commented May 22, 2016

Sir,can you explain the code in 100th line??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment