UNPKG

maskdata

Version:

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

885 lines (838 loc) 36 kB
'use strict'; const expect = require('chai').expect; const maskData = require('../index'); const Constants = require('../lib/helpers/Constants'); const jsonInput = { credit: '1234-5678-8765-1234', debit: '0000-1111-2222-3333', primaryEmail: 'primary@Email.com', secondaryEmail: 'secondary@Email.com', password: 'dummyPassword', homePhone: '+1 1234567890', workPhone: '+1 9876543210', addressLine1: 'This is my addressline 1. This is my home', addressLine2: 'AddressLine 2', uuid1: '123e4567-e89b-12d3-a456-426614174000', randomString: 'This is a random string' }; describe('JSON mask2', function () { describe('Mask with default options and no fields', function () { let testData = [ { title: 'test json masking with default options and no fields', input: JSON.parse(JSON.stringify(jsonInput)), outputCredit: '1234-5678-8765-1234', outputDebit: '0000-1111-2222-3333', outputPrimaryEmail: 'primary@Email.com', outputSecondaryEmail: 'secondary@Email.com', outputPassword: 'dummyPassword', outputHomePhone: '+1 1234567890', outputWorkPhone: '+1 9876543210', outputAddressLine1: 'This is my addressline 1. This is my home', outputAddressLine2: 'AddressLine 2', outputUuid: '123e4567-e89b-12d3-a456-426614174000', outputRandomString: 'This is a random string' } ]; testData.forEach( ({ title, input, outputCredit, outputDebit, outputPrimaryEmail, outputSecondaryEmail, outputPassword, outputHomePhone, outputWorkPhone, outputAddressLine1, outputAddressLine2, outputUuid, outputRandomString }) => { it(`${title}`, function () { const masked = maskData.maskJSON2(input, Constants.defaultjsonMask2Configs); expect(masked['credit']).to.equal(outputCredit); expect(masked['debit']).to.equal(outputDebit); expect(masked['primaryEmail']).to.equal(outputPrimaryEmail); expect(masked['secondaryEmail']).to.equal(outputSecondaryEmail); expect(masked['password']).to.equal(outputPassword); expect(masked['homePhone']).to.equal(outputHomePhone); expect(masked['workPhone']).to.equal(outputWorkPhone); expect(masked['addressLine1']).to.equal(outputAddressLine1); expect(masked['addressLine2']).to.equal(outputAddressLine2); expect(masked['uuid1']).to.equal(outputUuid); expect(masked['randomString']).to.equal(outputRandomString); }); } ); }); describe('Mask all fields with no config', function () { let testData = [ { title: 'test json masking with no config but all types of fields', input: JSON.parse(JSON.stringify(jsonInput)) } ]; testData.forEach(({ title, input }) => { it(`${title}`, function () { const masked = maskData.maskJSON2(input); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); expect(masked['uuid1']).to.equal(input['uuid1']); expect(masked['randomString']).to.equal(input['randomString']); }); }); }); describe('Mask all fields with default options', function () { let testData = [ { title: 'test json masking with default options and all types of fields', input: JSON.parse(JSON.stringify(jsonInput)), outputCredit: '1234-****-****-***4', outputDebit: '0000-****-****-***3', outputPrimaryEmail: 'pri****@*******om', outputSecondaryEmail: 'sec******@*******om', outputPassword: '*************', outputHomePhone: '+1 1********0', outputWorkPhone: '+1 9********0', outputAddressLine1: 'This is my addressline 1. This is my home', outputAddressLine2: 'AddressLine 2', outputUuid: '********-****-****-****-************', outputRandonString: '***********************' } ]; testData.forEach( ({ title, input, outputCredit, outputDebit, outputPrimaryEmail, outputSecondaryEmail, outputPassword, outputHomePhone, outputWorkPhone, outputAddressLine1, outputAddressLine2, outputUuid, outputRandonString }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); jsonMaskConfig['cardFields'] = ['credit', 'debit']; jsonMaskConfig['emailFields'] = ['primaryEmail', 'secondaryEmail']; jsonMaskConfig['passwordFields'] = ['password']; jsonMaskConfig['phoneFields'] = ['homePhone', 'workPhone']; jsonMaskConfig['stringFields'] = ['addressLine1', 'addressLine2']; jsonMaskConfig['uuidFields'] = ['uuid1']; jsonMaskConfig['genericStrings'] = [{ fields: ['randomString'] }]; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(outputCredit); expect(masked['debit']).to.equal(outputDebit); expect(masked['primaryEmail']).to.equal(outputPrimaryEmail); expect(masked['secondaryEmail']).to.equal(outputSecondaryEmail); expect(masked['password']).to.equal(outputPassword); expect(masked['homePhone']).to.equal(outputHomePhone); expect(masked['workPhone']).to.equal(outputWorkPhone); expect(masked['addressLine1']).to.equal(outputAddressLine1); expect(masked['addressLine2']).to.equal(outputAddressLine2); expect(masked['uuid1']).to.equal(outputUuid); expect(masked['randomString']).to.equal(outputRandonString); }); } ); }); describe('Mask all nested fields with default options', function () { const jsonInput2 = { cards: { creditCards: ['1234-5678-8765-1234', '1111-2222-1111-2222'], debitCards: ['0000-1111-2222-3333', '2222-1111-3333-4444'] }, emails: { primaryEmail: 'primary@Email.com', secondaryEmail: 'secondary@Email.com' }, password: 'dummyPasswordANDdummyPassword', phones: { homePhone: '+1 1234567890', workPhone: '+1 9876543210' }, address: { addressLine1: 'This is my addressline 1. This is my home', addressLine2: 'AddressLine 2' }, uuids: { uuid1: '123e4567-e89b-12d3-a456-426614174000' }, jwts: { token1: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c', token2: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJsb2wiLCJuYW1lIjoiVGVzdCIsImlhdCI6ImxvbCJ9.XNDxZcBWWEKYkCiu6XFGmAeuPF7iFnI7Sdv91gVZJMU', token3List: [ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiVGVzdDEifQ.TvKsZHhAgnZeplD4YdkKAgjdhdtFSQn-xZJ7HiiS1ok', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiVGVzdDIifQ.ekZkXoeOb4SE_YLlc0Iv8V3wm17xS1B7TzhtYHvIYl0', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiVGVzdDMifQ.CNiJIr7TZgsVGS0dbFFwdPtG6v1wwSor9jFoVeUkrJ0' ] }, drivingLicense: { license1: 'XX1234 YY', motorLicenses: ['ABCD1234', 'EFGH5678'] } }; let testData = [ { title: 'test json masking with default options and all types of fields', input: jsonInput2, outputCredit: '1234-****-****-***4', outputDebit: '0000-****-****-***3', outputPrimaryEmail: 'pri****@*******om', outputSecondaryEmail: 'sec******@*******om', outputPassword: '****************', outputHomePhone: '+1 1********0', outputWorkPhone: '+1 9********0', outputAddressLine1: 'This is my addressline 1. This is my home', outputAddressLine2: 'AddressLine 2', outputUuid: '********-****-****-****-************', outputJwt1: '***********************************************************************************************************************************************************', outputJwt2: '*************************************************************************************************************************************' } ]; testData.forEach( ({ title, input, outputCredit, outputDebit, outputPrimaryEmail, outputSecondaryEmail, outputPassword, outputHomePhone, outputWorkPhone, outputAddressLine1, outputAddressLine2, outputUuid, outputJwt1, outputJwt2 }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); jsonMaskConfig['cardFields'] = [ 'cards.creditCards[0]', 'cards.creditCards[1]', 'cards.debitCards[0]', 'cards.debitCards[1]' ]; jsonMaskConfig['emailFields'] = ['emails.primaryEmail', 'emails.secondaryEmail']; jsonMaskConfig['passwordFields'] = ['password']; jsonMaskConfig['phoneFields'] = ['phones.homePhone', 'phones.workPhone']; jsonMaskConfig['stringFields'] = ['address.addressLine1', 'address.addressLine2']; jsonMaskConfig['uuidFields'] = ['uuids.uuid1']; jsonMaskConfig['jwtFields'] = ['jwts.token1', 'jwts.token2']; jsonMaskConfig['genericStrings'] = [ { fields: ['drivingLicense.license1', 'drivingLicense.motorLicenses.*'] } ]; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['cards']['creditCards'][0]).to.equal(outputCredit); expect(masked['cards']['creditCards'][1]).to.equal('1111-****-****-***2'); expect(masked['cards']['debitCards'][0]).to.equal(outputDebit); expect(masked['cards']['debitCards'][1]).to.equal('2222-****-****-***4'); expect(masked['emails']['primaryEmail']).to.equal(outputPrimaryEmail); expect(masked['emails']['secondaryEmail']).to.equal(outputSecondaryEmail); expect(masked['password']).to.equal(outputPassword); expect(masked['phones']['homePhone']).to.equal(outputHomePhone); expect(masked['phones']['workPhone']).to.equal(outputWorkPhone); expect(masked['address']['addressLine1']).to.equal(outputAddressLine1); expect(masked['address']['addressLine2']).to.equal(outputAddressLine2); expect(masked['uuids']['uuid1']).to.equal(outputUuid); expect(masked['jwts']['token1']).to.equal(outputJwt1); expect(masked['jwts']['token2']).to.equal(outputJwt2); expect(masked['drivingLicense']['license1']).to.equal('*********'); expect(masked['drivingLicense']['motorLicenses'][0]).to.equal('********'); expect(masked['drivingLicense']['motorLicenses'][1]).to.equal('********'); }); it('Test masking improper JSON', function () { const notAJson = 'Not a JSON. Just a String'; const masked = maskData.maskJSON2(notAJson, jsonMaskConfig); expect(masked).to.equal(notAJson); }); } ); }); describe('Mask fields with custom options', function () { let input = JSON.parse(JSON.stringify(jsonInput)); input['randomStrings'] = {}; input['randomStrings']['row1'] = 'This is row 1 random string'; input['randomStrings']['row2'] = ['Entry1', 'Entry2', 'Entry3']; input['randomStrings']['row3'] = { key1: 'Row3 Object 1', key2: 'Row3 Object 2', key3: ['Entry1', 'Entry2', 'Entry3'] }; let testData = [ { title: 'Mask card fields with custom options', input: input, outputCredit: 'XXXX-XXXX-XXXX-1234', outputDebit: 'XXXX-XXXX-XXXX-3333' } ]; testData.forEach(({ title, input, outputCredit, outputDebit }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const cardMaskOptions = JSON.parse(JSON.stringify(Constants.defaultCardMaskOptions)); cardMaskOptions['maskWith'] = 'X'; cardMaskOptions['unmaskedStartDigits'] = 0; cardMaskOptions['unmaskedEndDigits'] = 4; jsonMaskConfig['cardFields'] = ['credit', 'debit']; jsonMaskConfig['cardMaskOptions'] = cardMaskOptions; jsonMaskConfig['genericStrings'] = [ { fields: ['randomString'], config: { maskWith: '?', unmaskedStartCharacters: 2, unmaskedEndCharacters: 3, maxMaskedCharacters: 8 } }, { fields: ['randomStrings.row1'], config: { maskWith: '*', unmaskedStartCharacters: 2, unmaskedEndCharacters: 3, maxMaskedCharacters: 8 } }, { fields: ['randomStrings.row2.*'], config: { maskWith: 'X', unmaskedEndCharacters: 1 } }, { fields: ['randomStrings.row3.key1'] }, { fields: ['randomStrings.row3.key3.*'], config: { maskWith: '@', unmaskedEndCharacters: 1 } }, { fields: ['unknownField'], config: { maskWith: '@', unmaskedEndCharacters: 1 } }, { config: { maskWith: '@', unmaskedEndCharacters: 1 } } ]; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(outputCredit); expect(masked['debit']).to.equal(outputDebit); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); expect(masked['randomString']).to.equal('Th???ing'); expect(masked['randomStrings']['row1']).to.equal('Th***ing'); expect(masked['randomStrings']['row2'][0]).to.equal('XXXXX1'); expect(masked['randomStrings']['row2'][1]).to.equal('XXXXX2'); expect(masked['randomStrings']['row2'][2]).to.equal('XXXXX3'); expect(masked['randomStrings']['row3']['key1']).to.equal('*************'); expect(masked['randomStrings']['row3']['key2']).to.equal('Row3 Object 2'); expect(masked['randomStrings']['row3']['key3'][0]).to.equal('@@@@@1'); expect(masked['randomStrings']['row3']['key3'][1]).to.equal('@@@@@2'); expect(masked['randomStrings']['row3']['key3'][2]).to.equal('@@@@@3'); expect(masked['unknownField']).to.equal(undefined); }); }); }); describe('Test recursive masking', function () { let input = JSON.parse(JSON.stringify(jsonInput)); input['cards'] = [ { number: '1234-5678-1234-5678' }, { number: '2222-3333-4444-5555' }, { number: '5555-6666-7777-8888' }, { number: '1111-3333-5555-7777' }, { number1: '0000-0000-0000-0000' } ]; input['randomStrings'] = {}; input['randomStrings']['key1'] = 'This is row 1 random string'; input['randomStrings']['row2'] = ['Entry1', 'Entry2', 'Entry3']; input['randomStrings']['row3'] = { key1: 'Row3 Object 1', key2: 'Row3 Object 2', key3: ['Entry1', 'Entry2', 'Entry3', { key1: 'mask me also' }] }; input['randomStrings']['row4'] = [ { key1: 'mask me also1' }, { key1: 'mask me also2' }, { key1: 'mask me also3' }, { key1: 'mask me also4' } ]; let testData = [ { title: 'Mask generic string fields with *', input: input, outputCredit: 'XXXX-XXXX-XXXX-1234', outputDebit: 'XXXX-XXXX-XXXX-3333' } ]; testData.forEach(({ title, input, outputCredit, outputDebit }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const cardMaskOptions = JSON.parse(JSON.stringify(Constants.defaultCardMaskOptions)); cardMaskOptions['maskWith'] = 'X'; cardMaskOptions['unmaskedStartDigits'] = 0; cardMaskOptions['unmaskedEndDigits'] = 4; jsonMaskConfig['cardFields'] = ['credit', 'debit', '*number']; jsonMaskConfig['cardMaskOptions'] = cardMaskOptions; jsonMaskConfig['genericStrings'] = [ { fields: ['randomString'], config: { maskWith: '?', unmaskedStartCharacters: 2, unmaskedEndCharacters: 3, maxMaskedCharacters: 8 } }, { fields: ['*key1'], config: { maskWith: '*', unmaskedStartCharacters: 2, unmaskedEndCharacters: 3, maxMaskedCharacters: 8 } }, { fields: ['*key10'], config: { maskWith: '*', unmaskedStartCharacters: 2, unmaskedEndCharacters: 3, maxMaskedCharacters: 8 } }, { fields: ['randomStrings.row2.*'], config: { maskWith: 'X', unmaskedEndCharacters: 1 } } ]; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(outputCredit); expect(masked['debit']).to.equal(outputDebit); expect(masked['cards'][0]['number']).to.equal('XXXX-XXXX-XXXX-5678'); expect(masked['cards'][1]['number']).to.equal('XXXX-XXXX-XXXX-5555'); expect(masked['cards'][2]['number']).to.equal('XXXX-XXXX-XXXX-8888'); expect(masked['cards'][3]['number']).to.equal('XXXX-XXXX-XXXX-7777'); expect(masked['cards'][4]['number1']).to.equal('0000-0000-0000-0000'); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); expect(masked['randomString']).to.equal('Th???ing'); expect(masked['randomStrings']['key1']).to.equal('Th***ing'); expect(masked['randomStrings']['row2'][0]).to.equal('XXXXX1'); expect(masked['randomStrings']['row2'][1]).to.equal('XXXXX2'); expect(masked['randomStrings']['row2'][2]).to.equal('XXXXX3'); expect(masked['randomStrings']['row3']['key3'][0]).to.equal('Entry1'); expect(masked['randomStrings']['row3']['key3'][1]).to.equal('Entry2'); expect(masked['randomStrings']['row3']['key3'][2]).to.equal('Entry3'); expect(masked['randomStrings']['row3']['key3'][3]['key1']).to.equal('ma***lso'); expect(masked['randomStrings']['row4'][0]['key1']).to.equal('ma***so1'); expect(masked['randomStrings']['row4'][1]['key1']).to.equal('ma***so2'); expect(masked['randomStrings']['row4'][2]['key1']).to.equal('ma***so3'); expect(masked['randomStrings']['row4'][3]['key1']).to.equal('ma***so4'); expect(masked['unknownField']).to.equal(undefined); }); it(`Recursive masking negative test cases; Do not mask`, function () { const inputJson = { cards: { number: '1234-5678-0123-0000', deeper: { number: '0000-0000-0000-0000' } }, cards2: [ { number: '1111-2222-3333-4444' }, { number: '2222-4444-6666-8888' } ] }; const jsonMaskConfig = { cardMaskOptions: { maskWith: '*', unmaskedStartDigits: 4, unmaskedEndDigits: 1 }, cardFields: ['*cards.number'] }; const masked = maskData.maskJSON2(inputJson, jsonMaskConfig); expect(masked['cards']['number']).to.equal('1234-5678-0123-0000'); expect(masked['cards']['deeper']['number']).to.equal('0000-0000-0000-0000'); expect(masked['cards2'][0]['number']).to.equal('1111-2222-3333-4444'); expect(masked['cards2'][1]['number']).to.equal('2222-4444-6666-8888'); }); }); }); describe('Mask email fields with custom options', function () { let testData = [ { title: 'Mask email fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputPrimaryEmail: 'prim...@........m', outputSecondaryEmail: 'seco.....@........m' } ]; testData.forEach(({ title, input, outputPrimaryEmail, outputSecondaryEmail }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const emailMaskOptions = JSON.parse(JSON.stringify(Constants.defaultEmailMask2Options)); // const defaultEmailMask2Options = { // maskWith: "*", // unmaskedStartCharactersBeforeAt: 3, // unmaskedEndCharactersAfterAt: 2, // maskAtTheRate: false // }; emailMaskOptions['maskWith'] = '.'; emailMaskOptions['unmaskedStartCharactersBeforeAt'] = 4; emailMaskOptions['unmaskedEndCharactersAfterAt'] = 1; jsonMaskConfig['emailFields'] = ['primaryEmail', 'secondaryEmail']; jsonMaskConfig['emailMaskOptions'] = emailMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(outputPrimaryEmail); expect(masked['secondaryEmail']).to.equal(outputSecondaryEmail); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); }); }); }); describe('Mask password fields with custom options', function () { let testData = [ { title: 'Mask password fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputPassword: 'd????d' } ]; testData.forEach(({ title, input, outputPassword }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const passwordMaskOptions = JSON.parse(JSON.stringify(Constants.defaultPasswordMaskOptions)); // const defaultPasswordMaskOptions = { // maskWith: "*", // maxMaskedCharacters: 16, // unmaskedStartCharacters: 0, // unmaskedEndCharacters: 0 // }; passwordMaskOptions['maskWith'] = '?'; passwordMaskOptions['maxMaskedCharacters'] = 6; passwordMaskOptions['unmaskedStartCharacters'] = 1; passwordMaskOptions['unmaskedEndCharacters'] = 1; jsonMaskConfig['passwordFields'] = ['password']; jsonMaskConfig['passwordMaskOptions'] = passwordMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(outputPassword); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); }); }); }); describe('Mask phone fields with custom options', function () { let testData = [ { title: 'Mask phone fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputHomePhone: '+1 #######890', outputWorkPhone: '+1 #######210' } ]; testData.forEach(({ title, input, outputHomePhone, outputWorkPhone }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const phoneMaskOptions = JSON.parse(JSON.stringify(Constants.defaultPhoneMaskOptions)); // const defaultPhoneMaskOptions = { // maskWith: "*", // unmaskedStartDigits: 4, // unmaskedEndDigits: 1 // }; phoneMaskOptions['maskWith'] = '#'; phoneMaskOptions['unmaskedStartDigits'] = 3; phoneMaskOptions['unmaskedEndDigits'] = 3; jsonMaskConfig['phoneFields'] = ['homePhone', 'workPhone']; jsonMaskConfig['phoneMaskOptions'] = phoneMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(outputHomePhone); expect(masked['workPhone']).to.equal(outputWorkPhone); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); }); }); }); describe('Mask String fields with custom options', function () { let testData = [ { title: 'Mask String fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputAddressLine1: 'XXXX is my addressline 1. This is my home', outputAddressLine2: 'AddressLine 2' } ]; testData.forEach(({ title, input, outputAddressLine1, outputAddressLine2 }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const stringMaskOptions = JSON.parse(JSON.stringify(Constants.defaultStringMaskOptions)); // const defaultStringMaskOptions = { // maskWith: "*", // maskOnlyFirstOccurance: false, // values: [], // maskAll: false, // maskSpace: true // }; stringMaskOptions['maskWith'] = 'X'; stringMaskOptions['maskOnlyFirstOccurance'] = true; stringMaskOptions['values'] = ['This']; jsonMaskConfig['stringFields'] = ['addressLine1', 'addressLine2']; jsonMaskConfig['stringMaskOptions'] = stringMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(outputAddressLine1); expect(masked['addressLine2']).to.equal(outputAddressLine2); }); }); }); describe('Mask UUID fields with custom options', function () { let testData = [ { title: 'Mask UUID fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputUuid: '123e4567-XXXX-XXXX-XXXX-426614174000' } ]; testData.forEach(({ title, input, outputUuid }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const uuidMaskOptions = JSON.parse(JSON.stringify(Constants.defaultUuidMaskOptions)); // const defaultUuidMaskOptions = { // maskWith: "*", // unmaskedStartCharacters: 0, // unmaskedEndCharacters: 0 // }; uuidMaskOptions['maskWith'] = 'X'; uuidMaskOptions['unmaskedStartCharacters'] = 8; uuidMaskOptions['unmaskedEndCharacters'] = 12; jsonMaskConfig['uuidFields'] = ['uuid1']; jsonMaskConfig['uuidMaskOptions'] = uuidMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); expect(masked['uuid1']).to.equal(outputUuid); }); }); }); describe('Mask UUID fields with invalid options', function () { let testData = [ { title: 'Mask UUID fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), outputUuid: '123e4567-e89b-12d3-a456-426614174000' } ]; testData.forEach(({ title, input, outputUuid }) => { const jsonMaskConfig = JSON.parse(JSON.stringify(Constants.defaultjsonMask2Configs)); const uuidMaskOptions = JSON.parse(JSON.stringify(Constants.defaultUuidMaskOptions)); // const defaultUuidMaskOptions = { // maskWith: "*", // unmaskedStartCharacters: 0, // unmaskedEndCharacters: 0 // }; uuidMaskOptions['maskWith'] = 'X'; uuidMaskOptions['unmaskedStartCharacters'] = 8; uuidMaskOptions['unmaskedEndCharacters'] = 12; jsonMaskConfig['uuidFields'] = ['uuid1.*.invalidField']; jsonMaskConfig['uuidMaskOptions'] = uuidMaskOptions; it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['credit']).to.equal(input['credit']); expect(masked['debit']).to.equal(input['debit']); expect(masked['primaryEmail']).to.equal(input['primaryEmail']); expect(masked['secondaryEmail']).to.equal(input['secondaryEmail']); expect(masked['password']).to.equal(input['password']); expect(masked['homePhone']).to.equal(input['homePhone']); expect(masked['workPhone']).to.equal(input['workPhone']); expect(masked['addressLine1']).to.equal(input['addressLine1']); expect(masked['addressLine2']).to.equal(input['addressLine2']); expect(masked['uuid1']).to.equal(outputUuid); }); }); }); describe('Test Json mask with .* and [*].', function () { const jsonInput = { cards: [ { number: '1234-5678-8765-1234' }, { number: '1111-2222-1111-2222' }, { number: '0000-1111-2222-3333' }, { name: 'No card number here' } ], emails: { primaryEmail: 'primary@Email.com', secondaryEmail: 'secondary@Email.com', moreEmails: [ 'email1@email.com', 'email2@email.com', 'email3@email.com', { childEmail: 'child@child.com', secondChild: { nestedkid: 'hello@hello.com' } } ] }, array: ['element1', 'element22', 'element333'], jwt: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJsb2wiLCJuYW1lIjoiVGVzdCIsImlhdCI6ImxvbCJ9.XNDxZcBWWEKYkCiu6XFGmAeuPF7iFnI7Sdv91gVZJMU' }; let testData = [ { title: 'Mask UUID fields with custom options', input: JSON.parse(JSON.stringify(jsonInput)), output: { cards: [ { number: 'XXXX-XXXX-XXXX-XXXX' }, { number: 'XXXX-XXXX-XXXX-XXXX' }, { number: 'XXXX-XXXX-XXXX-XXXX' }, { name: 'No card number here' } ], emails: { primaryEmail: '*******@*********', secondaryEmail: '*********@*********', moreEmails: [ '******@*********', '******@*********', '******@*********', { childEmail: '*****@*********', secondChild: { nestedkid: '*****@*********' } } ] }, array: ['????????', '?????????', '??????????'], jwt: '************.**********.**********' } } ]; const jsonMaskConfig = { cardMaskOptions: { maskWith: 'X', unmaskedStartDigits: 0, unmaskedEndDigits: 0 }, emailMaskOptions: { maskWith: '*', unmaskedStartCharactersBeforeAt: 0, unmaskedEndCharactersAfterAt: 0, maskAtTheRate: false }, stringMaskOptions: { maskWith: '?', maskOnlyFirstOccurance: false, values: [], maskAll: true, maskSpace: false }, jwtMaskOptions: { maskWith: '*', maxMaskedCharacters: 32, maskDot: false, maskHeader: true, maskPayload: true, maskSignature: true }, cardFields: ['cards[*].number'], emailFields: ['emails.*'], stringFields: ['array.*'], jwtFields: ['jwt'] }; testData.forEach(({ title, input, output }) => { it(`${title}`, function () { const masked = maskData.maskJSON2(input, jsonMaskConfig); expect(masked['cards'][0].number).to.equal(output['cards'][0].number); expect(masked['cards'][1].number).to.equal(output['cards'][1].number); expect(masked['cards'][2].number).to.equal(output['cards'][2].number); expect(masked['cards'][3].number).to.equal(undefined); expect(masked['emails'].primaryEmail).to.equal(output['emails'].primaryEmail); expect(masked['emails'].secondaryEmail).to.equal(output['emails'].secondaryEmail); expect(masked['emails'].moreEmails[0]).to.equal(output['emails'].moreEmails[0]); expect(masked['emails'].moreEmails[1]).to.equal(output['emails'].moreEmails[1]); expect(masked['emails'].moreEmails[2]).to.equal(output['emails'].moreEmails[2]); expect(masked['emails'].moreEmails[3].childEmail).to.equal( output['emails'].moreEmails[3].childEmail ); expect(masked['emails'].moreEmails[3].secondChild.nestedkid).to.equal( output['emails'].moreEmails[3].secondChild.nestedkid ); expect(masked['array'][0]).to.equal(output['array'][0]); expect(masked['array'][1]).to.equal(output['array'][1]); expect(masked['array'][2]).to.equal(output['array'][2]); expect(masked['jwt']).to.equal(output['jwt']); }); }); }); });