xkpasswd
Advanced tools
Comparing version 0.0.6 to 0.0.7
106
generate.js
@@ -1,63 +0,69 @@ | ||
var _ = require('lodash'); | ||
var randomWord = require('random-words'); | ||
var wordList = require('word-list-json'); | ||
/** | ||
* Patterns can consist of any combination of the following: | ||
* w: words | ||
* d: digits | ||
* s: separators | ||
*/ | ||
// define helpers | ||
var h = { | ||
random: function (min, max) { | ||
// Returns a random integer between min (included) and max (included) | ||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random | ||
return Math.floor(Math.random() * (max - min + 1)) + min; | ||
}, | ||
/** | ||
* Parse options to generate a pattern | ||
*/ | ||
var processOpts = function (opts) { | ||
// define defaults | ||
if (!opts.complexity) opts.complexity = 3; | ||
var defaultSeparators = '#.-=+'; | ||
var rtn = {}; | ||
getRandomWord: function () { | ||
return wordList[h.random(0, wordList.length - 1)]; | ||
}, | ||
// check for complexity level | ||
// TODO: Add some sensible patterns | ||
if (opts.complexity === 1) rtn.pattern = 'wsw'; | ||
if (opts.complexity === 2) rtn.pattern = 'wswsdd'; | ||
if (opts.complexity === 3) rtn.pattern = 'wswswsdd'; | ||
if (opts.complexity === 4) rtn.pattern = 'swswswswswsdd'; | ||
resolveComplexity: function (complexity) { | ||
// Patterns can consist of any combination of the following: (w)ords, (d)igits, (s)eparators | ||
var rtn = {}; | ||
rtn.separators = '#.-=+'; | ||
if (complexity < 1) complexity = 1; | ||
if (complexity > 6) complexity = 6; | ||
if (opts.complexity === 5) { | ||
rtn.pattern = 'swswswswswsdd' | ||
defaultSeparators = '#!@$*+:|~?'; | ||
}; | ||
if (complexity === 1) rtn.pattern = 'wsw'; | ||
if (complexity === 2) rtn.pattern = 'wswsdd'; | ||
if (complexity === 3) rtn.pattern = 'wswswsdd'; | ||
if (complexity === 4) rtn.pattern = 'swswswswswsdd'; | ||
if (opts.complexity === 6) { | ||
rtn.pattern = 'ddswswswswswsdd'; | ||
rtn.transform = 'alternate'; | ||
defaultSeparators = '!@$%^&*-_+=:|~?.;'; | ||
if (complexity === 5) { | ||
rtn.pattern = 'swswswswswsdd' | ||
rtn.separators = '#!@$*+:|~?'; | ||
}; | ||
if (complexity === 6) { | ||
rtn.pattern = 'ddswswswswswsdd'; | ||
rtn.transform = 'alternate'; | ||
rtn.separators = '!@$%^&*-_+=:|~?.;'; | ||
} | ||
return rtn; | ||
}, | ||
processOpts: function (opts) { | ||
if (!opts.complexity) opts.complexity = 3; | ||
var predefined = h.resolveComplexity(opts.complexity); | ||
var separators = (opts.separators || predefined.separators); | ||
var rtn = {}; | ||
rtn.pattern = (opts.pattern || predefined.pattern); | ||
rtn.separator = separators.split('')[h.random(0, separators.length - 1)]; | ||
if (predefined.transform) rtn.transform = predefined.transform; | ||
return rtn; | ||
} | ||
// Pick a random separator from supplied list | ||
separators = (opts.separators || defaultSeparators); | ||
rtn.separator = separators.split('')[_.random(0, separators.length - 1)]; | ||
return rtn; | ||
} | ||
/** | ||
* Put the password together | ||
*/ | ||
var generate = function (opts) { | ||
opts = processOpts(opts); | ||
var pattern = opts.pattern; | ||
var separator = opts.separator; | ||
var uppercase = (opts.transform && opts.transform == 'uppercase'); | ||
module.exports = function (opts) { | ||
o = h.processOpts(opts); | ||
var pattern = o.pattern.split(''); | ||
var uppercase = (o.transform && o.transform == 'uppercase'); | ||
var password = []; | ||
_.forEach(pattern, function (type) { | ||
pattern.forEach(function (type) { | ||
var value; | ||
if (type === 'd') value = _.random(0, 9); | ||
if (type === 's') value = separator; | ||
if (type === 'd') value = h.random(0, 9); | ||
if (type === 's') value = o.separator; | ||
if (type === 'w') { | ||
value = randomWord(); | ||
if (opts.transform && opts.transform == 'alternate') uppercase = !uppercase; | ||
value = h.getRandomWord(); | ||
if (o.transform && o.transform == 'alternate') uppercase = !uppercase; | ||
if (uppercase) { | ||
@@ -75,3 +81,1 @@ value.toUpperCase(); | ||
}; | ||
module.exports = generate; |
{ | ||
"name": "xkpasswd", | ||
"version": "0.0.6", | ||
"version": "0.0.7", | ||
"description": "Memorable password generator, inspired by a PERL module powering xkpasswd.net/s/", | ||
@@ -24,6 +24,5 @@ "main": "index.js", | ||
"dependencies": { | ||
"lodash": "^3.9.3", | ||
"nomnom": "^1.8.1", | ||
"random-words": "0.0.1" | ||
"word-list-json": "^0.2.0" | ||
} | ||
} |
@@ -52,2 +52,11 @@ *Memorable password generator, inspired by a PERL module powering xkpasswd.net/s/* | ||
**EXAMPLE** Specify custom pattern | ||
``` | ||
$ xkp -p wdwd | ||
adjective3solar6 | ||
``` | ||
**EXAMPLE** Specify complexity, custom separators and number of passwords | ||
@@ -70,2 +79,10 @@ | ||
## Release notes | ||
v0.0.7 | ||
- replaced random-words module with a more custom solution using word-list-json module | ||
- cleaned up a bit and made code slightly more modular and extensible | ||
## Issues and requests | ||
@@ -77,2 +94,2 @@ | ||
<br> | ||
<br> |
5867
2
111
93
+ Addedword-list-json@^0.2.0
+ Addedword-list-json@0.2.0(transitive)
- Removedlodash@^3.9.3
- Removedrandom-words@0.0.1
- Removedlodash@3.10.1(transitive)
- Removedrandom-words@0.0.1(transitive)