@codecafe/password-checker

A class that can be instantiated as a password checker by pass some check options in, and we can use this checker to check our password, or rate it.

Usage no npm install needed!

<script type="module">
  import codecafePasswordChecker from 'https://cdn.skypack.dev/@codecafe/password-checker';
</script>

README

CodeCafe Password Checker

A class that can be instantiated as a password checker by pass some check options in, and we can use this checker to check our password, or rate it.

Installing

For the latest stable version:

Using npm:

npm install --save @codecafe/password-checker

or simply using this:

npm i @codecafe/password-checker

or using yarn:

yarn add @codecafe/password-checker

Instantiation

To use password checker, you need to import @codecafe/password-checker to your project first, and then instantiated it with the options parameter.

For example:

import PasswordChecker from '@codecafe/password-checker';

const pwc = new PasswordChecker({
    allowedSymbols: ['_', '-', '!', '@', '#', '

, '%', '^', '&', '*', '?'],
    lengthRange: [8, 18],
    letterRange: ['a', 'z'],
    LetterRange: ['A', 'Z'],
    numberRange: ['0', '9'],
    repetitionLength: 3,
    numberConsecutionLength: 3,
    letterConsecutionLength: 4,
});

we call the options parameter interface IPasswordCheckerOptions:

interface IPasswordCheckerOptions {
    // all allowed non-alphanumeric symbols list
    allowedSymbols: string[];
    // range of allowed numbers, [start, end]
    numberRange: [string, string];
    // range of allowed lowercase letters, [start, end]
    letterRange: [string, string];
    // range of allowed capital letters, [start, end]
    LetterRange: [string, string];
    // range of the allowed password length, [min, max]
    lengthRange: [number, number];
    // maximum allowable length of the character repetition(not include the max value)
    repetitionLength: number;
    // maximum allowable length of the consecution of the number characters(not include the max value)
    numberConsecutionLength: number;
    // maximum allowable length of the consecution of the letters(not include the max value)
    letterConsecutionLength: number;
}

we supported an instantiated implementation of this interface as the default options object:

const defaultPasswordCheckerOptions: IPasswordCheckerOptions = {
    allowedSymbols: ['_', '-', '!', '@', '#', '

, '%', '^', '&', '*', '?'],
    lengthRange: [8, 18],
    letterRange: ['a', 'z'],
    LetterRange: ['A', 'Z'],
    numberRange: ['0', '9'],
    repetitionLength: 3,
    numberConsecutionLength: 3,
    letterConsecutionLength: 4,
}

so that you can just pass in the modified part of all the properties of this interface, or even pass none:

const pwc = new PasswordChecker({
    allowedSymbols: ['_', '-', '!', '@', '#', '

, '%', '^', '&', '*', '?'],
    lengthRange: [8, 18],
});
const pwc = new PasswordChecker();

we will fill the rest properties from the object defaultPasswordCheckerOptions in.

After the object has been instantiated, we could get the regular of this checker:

class PasswordChecker {
    // the regular for checking the characters set and length
    charsAndLengthPattern: RegExp

    // the regulars for checking charecter types
    classifiedCharsPatterns: RegExp[]

    ...
}

this two properties are readonly, you can not change it after the object has been instantiated.

Checking your password

There are 4 check methods to check your password, they are:

checkLength, which can check whether your password length is out of the legal length, and return the length of out part:

checkLength(password: string): number;

checkCharsSetAndLength, which is used to check whether the characters set and length of your password are all legal:

checkCharsSetAndLength(password: string): boolean;

checkRepetition, which to be used in checking if there are one or more repetitions of same character in your password:

checkRepetition(password: string): boolean;

checkCharConsecution, which to be used in checking if there are one or more consecutions of the consecutive numbers or letters in your password:

checkCharConsecution(password: string): boolean;

Rating youe password

You can use the getLevel method to get the level of your password:

getLevel(password: string): number

for example:

const level = pwc.getLevel('aabbcc1122!!CCBBAA');

console.log(level) // print 4

Rating details

You must be wondering why your password get such a rate level, everyone has such a doubt, and we got it. We designed a class PasswordLevelCheckDetails to show you the level details of your password. you can't instantiated it by self, but you can get the instance of it after each time you called the getLevel method, here is the codes:

const level = pwc.getLevel('aabbcc1122!!CCBBAA', details);
const details = pwc.lastLevelDetails;

console.log(details)
/*
print PasswordLevelCheckDetails {
    legal: true,
    outOfLength: 0,
    charTypesCount: 4,
    hasRepetition: false,
    hasCharConsecution: false,
}
*/

class PasswordLevelCheckDetails is a implementation of interface ILevelDetails:

interface ILevelDetails {
    // is the password legal in characters set and length
    legal: boolean
    // the length of out part
    // if the actual length is grater then the legal length, it will be a positive integer, which is the actual length subtracts the max vlaue of the legal length range,
    // or if the actual length is less then the legal length, it will be a negative integer, which is the actual length subtracts the min vlaue of the legal length range,
    // or it will be zero
    outOfLength: number
    // how many char types the password has?
    // there are four types in all,
    // they are numbers, lowercase letters, capital letters and other symbols
    charTypesCount?: number
    // if the password has one or more repetitions of same character
    hasRepetition?: boolean
    // if the password has one or more consecutions of the consecutive numbers or letters
    hasCharConsecution?: boolean
}