UNPKG

maskdata

Version:

Node module to mask various kinds of data in the required formats

52 lines (48 loc) 2.04 kB
'use strict'; const MaskHelper = require('../helpers/MaskHelper'); const Constants = require('../helpers/Constants'); class PasswordMask { static maskPassword(password, options) { if (!password || typeof password === 'object') return password; password = password + ''; if (options) { options = MaskHelper.mapWithDefaultValues(options, Constants.defaultPasswordMaskOptions); MaskHelper.validatePasswordOptions(options); } else { options = Constants.defaultPasswordMaskOptions; } let maskPasswordLength = password.length; if (options.fixedOutputLength !== undefined && options.fixedOutputLength >= 0) { maskPasswordLength = options.fixedOutputLength; if (password.length < options.fixedOutputLength) { password = password + `${options.maskWith}`.repeat(options.fixedOutputLength - password.length); } } if (password.length > options.maxMaskedCharacters) { maskPasswordLength = parseInt(options.maxMaskedCharacters); } const maskingCharacters = maskPasswordLength - options.unmaskedStartCharacters - options.unmaskedEndCharacters; if (maskingCharacters < 0) { if (maskPasswordLength <= options.unmaskedStartCharacters) { return password.substring(0, maskPasswordLength); } else { let maskedPassword = password.substring(0, options.unmaskedStartCharacters); const remainingChars = maskPasswordLength - options.unmaskedStartCharacters; for (let i = password.length - remainingChars; i < password.length; i++) { maskedPassword += password[i]; } return maskedPassword; } } let maskedPassword = ''; maskedPassword = password.substring(0, options.unmaskedStartCharacters); maskedPassword += `${options.maskWith}`.repeat(maskingCharacters); for (let i = password.length - options.unmaskedEndCharacters; i < password.length; i++) { maskedPassword += password[i]; } return maskedPassword; } } module.exports = PasswordMask;