In Node.js è semplice generare una password robusta ma facile da ricordare.
A partire da un file contenente tutte le parole di un dizionario a scelta, genereremo una password che:
- ha almeno un carattere speciale
- ha una sequenza numerica
- ha una o due parole
- ha almeno una lettera maiuscola
La soluzione è la seguente:
'use strict';
module.exports = {
password: () => {
const fs = require('fs');
return new Promise((resolve, reject) => {
fs.readFile(__dirname + '/words', 'UTF-8', (err, words) => {
if(err) {
reject(err);
} else {
let wds = words.split(/\n/);
let specialChars = '@,-,_,$,%,&,(,),[,],{,},*,!,?'.split(',');
let randInt = Math.floor(Math.random() * 10000);
let specialCharsIndex = Math.floor(Math.random() * specialChars.length);
let specialChar = specialChars[specialCharsIndex];
let prefix = wds[Math.floor(Math.random() * wds.length)];
let suffix = wds[Math.floor(Math.random() * wds.length)];
let pwd = '';
if(randInt % 2 === 0) {
let pref = prefix.charAt(0).toUpperCase() + prefix.substr(1);
pwd = pref + randInt.toString() + specialChar + suffix;
} else {
let suff = suffix.charAt(0).toUpperCase() + suffix.substr(1);
pwd = prefix + randInt.toString() + specialChar + suff;
}
resolve(pwd);
}
});
});
}
};