Andrés Forero@sigh
Los argumentos spec (caracteres especiales), upp (mayusculas) y num (numeros) estan desactivados por defecto (0), cuando se llama la funcion con otro valor se agregan al string.
Sobre el buffer: El abecedario tiene 26 caracteres, la letra 'a' tiene el codigo ascii 97, por lo que hago un bucle que empiece en 0 y termine en 26 y en cada posicion del string le sumo i+97 (donde empieza 'a')
97+0 -> 97 (a)
97+1 -> 98 (b)
99+1 -> 100 (d)
Y por ultimo utilizo el metodo toString('ascii') para que sean caracteres.
const gen_password = (size=8, spec=0, upp=0, num=0) => {
const alph = Buffer.alloc(26);
for(let i=0; i<26; i++){
alph[i] = i+97;
}
let char = alph.toString('ascii');
if(!upp == 0) char+= char.toUpperCase();
if(!spec == 0) char+= `!@#$%^&*()-_=+`;
if(!num == 0) char+= '1234567890';
let password = '';
for(let i=0; i<size; i++) {
password+= char[Math.trunc(Math.random()*char.length)];
}
return password;
}
console.log(gen_password(12, 1, 1, 1));