UNPKG

rpg-b

Version:

Simple Random password generator

124 lines (98 loc) 3.87 kB
const randomNumber = require("./grn"); const shuffleString = require("./string"); const generatePassword = (options) => { var pswd = ""; var pswdLength = 0; var index = 0; var minChar = ""; let { LENGTH, ALLOW_ALPHABETS_LOWERCASE, ALLOW_ALPHABETS_UPPERCASE, ALLOW_NUMBERS, ALLOW_SPECIAL_CHARACTERS, FIRST_CHARACTER_LOWERCASE, FIRST_CHARACTER_UPPERCASE, FIRST_CHARACTER_NUMBER, FIRST_CHARACTER_SPECIAL_CHARACTER, MIN_ALPHABETS_LOWERCASE, MIN_ALPHABETS_UPPERCASE, MIN_NUMBERS, MIN_SPECIAL_CHARACTERS, EXCEPTIONS, } = options; var lowercaseChar = "abcdefghijklmnopqrstuvwxyz"; lowercaseChar = removeExceptions(lowercaseChar, EXCEPTIONS); var uppercaseChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; uppercaseChar = removeExceptions(uppercaseChar, EXCEPTIONS); var numbers = "0123456789"; numbers = removeExceptions(numbers, EXCEPTIONS); var specialChar = "!#$%&'()*+,-./:;<=>?@[]^_{|}~"; specialChar = removeExceptions(specialChar, EXCEPTIONS); //Generating the First Character Based on the User Option Selection. upperLimit = lowercaseChar.length; if (FIRST_CHARACTER_LOWERCASE) { pswd = pswd + lowercaseChar.charAt(randomNumber(upperLimit)); MIN_ALPHABETS_LOWERCASE = MIN_ALPHABETS_LOWERCASE - 1; } upperLimit = uppercaseChar.length; if (FIRST_CHARACTER_UPPERCASE) { pswd = pswd + uppercaseChar.charAt(randomNumber(upperLimit)); MIN_ALPHABETS_UPPERCASE = MIN_ALPHABETS_UPPERCASE - 1; } upperLimit = numbers.length; if (FIRST_CHARACTER_NUMBER) { pswd = pswd + numbers.charAt(randomNumber(upperLimit)); MIN_NUMBERS = MIN_NUMBERS - 1; } upperLimit = specialChar.length; if (FIRST_CHARACTER_SPECIAL_CHARACTER) { pswd = pswd + numbers.charAt(randomNumber(upperLimit)); MIN_SPECIAL_CHARACTERS = MIN_SPECIAL_CHARACTERS - 1; } // Generating a minChar string that holds minimum number of characters on the User Option Selection. //The minCHar variable will store the minimum number of characters for each type - lowercase, uppercase, //special characters, numbers. Then, the minChar variable is shuffled to make the password random. upperLimit = lowercaseChar.length; for (i = 0; i < MIN_ALPHABETS_LOWERCASE; i++) { minChar = minChar + lowercaseChar.charAt(randomNumber(upperLimit)); } upperLimit = uppercaseChar.length; for (i = 0; i < MIN_ALPHABETS_UPPERCASE; i++) { minChar = minChar + uppercaseChar.charAt(randomNumber(upperLimit)); } upperLimit = numbers.length; for (i = 0; i < MIN_NUMBERS; i++) { minChar = minChar + numbers.charAt(randomNumber(upperLimit)); } upperLimit = specialChar.length; for (i = 0; i < MIN_SPECIAL_CHARACTERS; i++) { minChar = minChar + specialChar.charAt(randomNumber(upperLimit)); } //Shuffling the minChar to generate a password that holds minimum criteria. pswd = pswd + shuffleString(minChar); characterString = ""; characterString = ALLOW_ALPHABETS_LOWERCASE ? characterString + lowercaseChar : characterString; characterString = ALLOW_ALPHABETS_UPPERCASE ? characterString + uppercaseChar : characterString; characterString = ALLOW_NUMBERS ? characterString + numbers : characterString; characterString = ALLOW_SPECIAL_CHARACTERS ? characterString + specialChar : characterString; remainingChar = options.LENGTH - pswd.length; upperLimit = characterString.length; for (i = 0; i < remainingChar; i++) { pswd = pswd + characterString.charAt(randomNumber(upperLimit)); } return pswd; }; const removeExceptions = (str, EXCEPTIONS) => { EXCEPTIONS.split("").forEach((char) => { str = str.replace(char, ""); }); return str; }; module.exports = generatePassword;