mask-json-path
Version:
Mask values from given JSON (objects / arrays). Useful in protecting confidential data, mask it before sending it to third party applications.
46 lines (41 loc) • 1.49 kB
JavaScript
let REPLACEMENT = '***';
const maskValuesFromArray = ({maskedPayload, currentKey, index, keysArray}) => {
const key = currentKey.substr(0, currentKey.length - 2);
const arrayObject = key === '' ? maskedPayload : maskedPayload[key];
if (arrayObject) {
arrayObject.map(element => {
maskValue(element, keysArray.slice(index + 1).join('.'))
});
}
keysArray.splice(1);
}
const maskValueFromObject = ({maskedPayload, currentKey, index, keysArray}) => {
if (!maskedPayload || !Object.prototype.hasOwnProperty.call(maskedPayload, currentKey)) {
keysArray.splice(1);
} else {
if (keysArray.length - 1 === index) {
maskedPayload[currentKey] = REPLACEMENT;
}
return maskedPayload[currentKey];
}
}
const maskValue = (payload, pathToBeMasked) => {
const keys = pathToBeMasked.split('.')
keys.reduce((maskedPayload, currentKey, index, arr) => {
if (currentKey.endsWith('[]')) {
return maskValuesFromArray({maskedPayload, currentKey, index, keysArray: arr})
}
return maskValueFromObject({maskedPayload, currentKey, index, keysArray: arr})
}, payload);
return payload;
}
const maskValues = (payload, pathsToBeMasked) => {
pathsToBeMasked.map((pathToBeMasked) => {
maskValue(payload, pathToBeMasked)
})
return payload;
}
module.exports = (replacement) => {
REPLACEMENT = replacement || REPLACEMENT;
return maskValues;
}