Created
December 6, 2015 16:36
-
-
Save andrewjmead/fa0c94e5e11e558b0c53 to your computer and use it in GitHub Desktop.
Password Manage With Master Password Error Message
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sir,can you explain the code in 100th line??