diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c193ae0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.py] +indent_size = 4 diff --git a/cli.js b/cli.js index d273f40..13f26e0 100755 --- a/cli.js +++ b/cli.js @@ -42,51 +42,51 @@ const helpMessage = ` 75837019`; const cli = meow(helpMessage, { - alias: {L: 'length', c: 'counter', C: 'clipboard'}, - boolean: ['l', 'u', 'd', 's', 'C', 'clipboard'] + alias: {L: 'length', c: 'counter', C: 'clipboard'}, + boolean: ['l', 'u', 'd', 's', 'C', 'clipboard'] }); function calcPassword(site, login, masterPassword, passwordProfile) { - LessPass.generatePassword(site, login, masterPassword, passwordProfile) - .then(function (generatedPassword) { - if (passwordProfile.clipboard) { - clipboardy.write(generatedPassword) - .then(() => { - console.log('Copied to clipboard'); - process.exit(); - }).catch(err => { - console.error(chalk.red('Copy failed.')); - console.error(err.message); - process.exit(1); - }); - } else { - console.log(generatedPassword); - process.exit(); - } + LessPass.generatePassword(site, login, masterPassword, passwordProfile) + .then(function(generatedPassword) { + if (passwordProfile.clipboard) { + clipboardy.write(generatedPassword) + .then(() => { + console.log('Copied to clipboard'); + process.exit(); + }).catch(err => { + console.error(chalk.red('Copy failed.')); + console.error(err.message); + process.exit(1); }); + } else { + console.log(generatedPassword); + process.exit(); + } + }); } function hasNoShortOption(options) { - let hasShortOption = false; - ['l', 'u', 'd', 's'].forEach(function (shortOption) { - if (typeof options[shortOption] !== 'undefined' && options[shortOption]) { - hasShortOption = true; - } - }); - return !hasShortOption; + let hasShortOption = false; + ['l', 'u', 'd', 's'].forEach(function(shortOption) { + if (typeof options[shortOption] !== 'undefined' && options[shortOption]) { + hasShortOption = true; + } + }); + return !hasShortOption; } function getOptionBoolean(options, optionString) { - let shortOption = optionString.substring(0, 1); - if (options[shortOption]) { - return true; - } - if (typeof options[optionString] === 'undefined') { - return hasNoShortOption(options); - } - return options[optionString] + let shortOption = optionString.substring(0, 1); + if (options[shortOption]) { + return true; + } + if (typeof options[optionString] === 'undefined') { + return hasNoShortOption(options); + } + return options[optionString] } const lowercase = getOptionBoolean(cli.flags, 'lowercase'); @@ -95,30 +95,30 @@ const symbols = getOptionBoolean(cli.flags, 'symbols'); const digits = getOptionBoolean(cli.flags, 'digits'); const passwordProfile = { - lowercase: lowercase, - uppercase: uppercase, - symbols: symbols, - numbers: digits, - clipboard: cli.flags.clipboard || false, - length: cli.flags.length || 16, - counter: cli.flags.counter || 1 + lowercase: lowercase, + uppercase: uppercase, + symbols: symbols, + numbers: digits, + clipboard: cli.flags.clipboard || false, + length: cli.flags.length || 16, + counter: cli.flags.counter || 1 }; const site = cli.input[0]; const login = cli.input[1]; if (typeof site === 'undefined' && typeof login === 'undefined') { - console.log(chalk.red('site or login cannot be empty')); - console.log('type lesspass --help'); - process.exit(-1); + console.log(chalk.red('site or login cannot be empty')); + console.log('type lesspass --help'); + process.exit(-1); } if (cli.input.length === 3) { - const masterPassword = cli.input[2]; - calcPassword(site, login, masterPassword, passwordProfile) + const masterPassword = cli.input[2]; + calcPassword(site, login, masterPassword, passwordProfile) } else { - read({prompt: 'master password: ', silent: true}, function (er, password) { - calcPassword(site, login, password, passwordProfile) - }); + read({prompt: 'master password: ', silent: true}, function(er, password) { + calcPassword(site, login, password, passwordProfile) + }); } diff --git a/test.js b/test.js index 3e27097..264b378 100644 --- a/test.js +++ b/test.js @@ -2,136 +2,136 @@ import test from 'ava'; import execa from 'execa'; test('default options', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, '\\g-A1-.OHEwrXjT#'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, '\\g-A1-.OHEwrXjT#'); }); test('options can be before parameters', async t => { - const {stdout} = await execa('./cli.js', ['-C', 'lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, 'Copied to clipboard'); + const {stdout} = await execa('./cli.js', ['-C', 'lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, 'Copied to clipboard'); }); test('long options can be before parameters', async t => { - const {stdout} = await execa('./cli.js', ['--clipboard', 'lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, 'Copied to clipboard'); + const {stdout} = await execa('./cli.js', ['--clipboard', 'lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, 'Copied to clipboard'); }); test('length', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--length=14']); - t.is(stdout, '=0\\A-.OHEKvwrX'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--length=14']); + t.is(stdout, '=0\\A-.OHEKvwrX'); }); test('length shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-L=14']); - t.is(stdout, '=0\\A-.OHEKvwrX'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-L=14']); + t.is(stdout, '=0\\A-.OHEKvwrX'); }); test('counter', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--counter=2']); - t.is(stdout, 'Vf:F1\'!I`8Y2`GBE'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--counter=2']); + t.is(stdout, 'Vf:F1\'!I`8Y2`GBE'); }); test('counter shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-c=2']); - t.is(stdout, 'Vf:F1\'!I`8Y2`GBE'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-c=2']); + t.is(stdout, 'Vf:F1\'!I`8Y2`GBE'); }); test('no lowercase', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-lowercase']); - t.is(stdout, 'JBG\\`3{+0[\"(E\\JJ'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-lowercase']); + t.is(stdout, 'JBG\\`3{+0[\"(E\\JJ'); }); test('no lowercase shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-uds']); - t.is(stdout, 'JBG\\`3{+0[\"(E\\JJ'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-uds']); + t.is(stdout, 'JBG\\`3{+0[\"(E\\JJ'); }); test('only lowercase', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-l']); - t.is(stdout, 'fmnujoqgcxmpffyh'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-l']); + t.is(stdout, 'fmnujoqgcxmpffyh'); }); test('no uppercase', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-uppercase']); - t.is(stdout, 'jbg\\`3{+0[\"(e\\jj'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-uppercase']); + t.is(stdout, 'jbg\\`3{+0[\"(e\\jj'); }); test('no uppercase shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lds']); - t.is(stdout, 'jbg\\`3{+0[\"(e\\jj'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lds']); + t.is(stdout, 'jbg\\`3{+0[\"(e\\jj'); }); test('only uppercase', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-u']); - t.is(stdout, 'FMNUJOQGCXMPFFYH'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-u']); + t.is(stdout, 'FMNUJOQGCXMPFFYH'); }); test('no digits', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-digits']); - t.is(stdout, ';zkB#m]mNF$;J_Ej'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-digits']); + t.is(stdout, ';zkB#m]mNF$;J_Ej'); }); test('no digits shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lus']); - t.is(stdout, ';zkB#m]mNF$;J_Ej'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lus']); + t.is(stdout, ';zkB#m]mNF$;J_Ej'); }); test('only digits', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-d']); - t.is(stdout, '7587019305478072'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-d']); + t.is(stdout, '7587019305478072'); }); test('no symbols', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-symbols']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-symbols']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('no symbols shortcut', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lud']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lud']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('only symbols', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-s']); - t.is(stdout, '<"]|\'`%};\'`>-\'[,'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-s']); + t.is(stdout, '<"]|\'`%};\'`>-\'[,'); }); test('test space in password', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'my Master Password']); - t.is(stdout, 'D1PBB34\\#fh!LY={'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'my Master Password']); + t.is(stdout, 'D1PBB34\\#fh!LY={'); }); test('doc 1', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-symbols']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '--no-symbols']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('doc 1 options before', async t => { - const {stdout} = await execa('./cli.js', ['--no-symbols', 'lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['--no-symbols', 'lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('doc 2', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lud']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-lud']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('doc 2 options before', async t => { - const {stdout} = await execa('./cli.js', ['-lud', 'lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, 'OlfK63bmUhqrGODR'); + const {stdout} = await execa('./cli.js', ['-lud', 'lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, 'OlfK63bmUhqrGODR'); }); test('doc 3', async t => { - const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-d', '-L8']); - t.is(stdout, '75837019'); + const {stdout} = await execa('./cli.js', ['lesspass.com', 'contact@lesspass.com', 'password', '-d', '-L8']); + t.is(stdout, '75837019'); }); test('doc 3 options before', async t => { - const {stdout} = await execa('./cli.js', ['-d', '-L8', 'lesspass.com', 'contact@lesspass.com', 'password']); - t.is(stdout, '75837019'); + const {stdout} = await execa('./cli.js', ['-d', '-L8', 'lesspass.com', 'contact@lesspass.com', 'password']); + t.is(stdout, '75837019'); }); test('doc 3 options before and after', async t => { - const {stdout} = await execa('./cli.js', ['-d', 'lesspass.com', 'contact@lesspass.com', 'password', '-L8']); - t.is(stdout, '75837019'); -}); \ No newline at end of file + const {stdout} = await execa('./cli.js', ['-d', 'lesspass.com', 'contact@lesspass.com', 'password', '-L8']); + t.is(stdout, '75837019'); +});