UNPKG

@alexisanzieu/passense

Version:

SOLID password to ensure robust security

44 lines (34 loc) 1.25 kB
import { Validator } from './Validator'; const defaultConfig = { minimum: 1, iteration: 0, } interface config { minimum?: number; } export default class UpperCaseValidator extends Validator { private minimum: number; private iteration: number; constructor(config?: config) { super(); const mergedConfig = this.mergeConfig(config, defaultConfig); this.minimum = this.ensureTyping(mergedConfig.minimum, 'number'); this.iteration = this.ensureTyping(mergedConfig.iteration, 'number'); } public isValid(password: string): boolean { if (!this.isStringUpperCased(password)) { throw new Error(`You must to include at least ${this.minimum} uppercase letter`); } return true; } private isStringUpperCased(s: string): boolean { for (let i = 0; i < s.length; i++) { if (this.isCharUpperCase(s[i])) { if (++this.iteration === this.minimum) { return true; } } } return false; } private isCharUpperCase(s: string): boolean { // number and unexpected characters are not allowed return s === s.toUpperCase() && s != s.toLowerCase(); } }