@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
134 lines (133 loc) • 5.5 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.maskObject = exports.maskSensitiveInfo = exports.mask = exports.isMasked = exports.basicUserFields = void 0;
const lodash_1 = __importStar(require("lodash"));
exports.basicUserFields = ["_id", "id", "name", "slug", "verified", "image", "createdAt", "updatedAt"];
function isMasked(value) {
return value === "***";
}
exports.isMasked = isMasked;
const mask = (str, leftUnmaskLength = 0, rightUnmaskLength, options = { char: "*" }) => {
const { char } = options;
if (rightUnmaskLength && rightUnmaskLength > str.length - leftUnmaskLength)
rightUnmaskLength = str.length - leftUnmaskLength;
const unmaskedFirst = leftUnmaskLength ? str.substring(0, leftUnmaskLength) : "";
const unmaskedLast = rightUnmaskLength ? str.substring(str.length - rightUnmaskLength) : "";
const toBeMaskedStr = str.substring(leftUnmaskLength, str.length - rightUnmaskLength);
let maskedStr = "";
for (let i = 0; i < toBeMaskedStr.length; i++) {
maskedStr += char;
}
return `${unmaskedFirst}${maskedStr}${unmaskedLast}`;
};
exports.mask = mask;
const maskSensitiveInfo = (data, user, role, route) => {
// console.log("[mask-sensitive-info] typeof data :>> ", typeof data);
// console.log("[mask-sensitive-info] route :>> ", route);
var _a;
// exclude masking data for some specific routes
const skipMaskingRoutes = ["/api_key"];
if (skipMaskingRoutes.some((skipRoute) => (route === null || route === void 0 ? void 0 : route.indexOf(skipRoute)) > -1))
return data;
// skip and return data as is if it's a boolean, number, or string
if (typeof data === "boolean" || typeof data === "number" || typeof data === "string")
return data;
// console.log("[mask-sensitive-info] user :>> ", user);
// console.log("[mask-sensitive-info] user.name :>> ", user.name);
// console.log("[mask-sensitive-info] user.activeRole :>> ", user.activeRole);
if ((_a = user === null || user === void 0 ? void 0 : user.activeRole) === null || _a === void 0 ? void 0 : _a._id)
role = user.activeRole;
// console.log("[mask-sensitive-info] role :>> ", role);
if (!role)
return;
const maskedFields = (role === null || role === void 0 ? void 0 : role.maskedFields) || [];
// console.log("[mask-sensitive-info] maskedFields :>> ", maskedFields);
// mask fields
if ((0, lodash_1.isArray)(data)) {
data = data.map((item) => {
/**
* ONLY Mask fields for NOT-owned items
*/
// if (!isOwned(item, user)) {
// maskedFields.map((maskedField) => {
// if (_.has(item, maskedField)) item = _.set(item, maskedField, "");
// });
// }
/**
* Mask all fields
*/
maskedFields.map((maskedField) => {
if (lodash_1.default.has(item, maskedField))
item = lodash_1.default.set(item, maskedField, "");
});
return item;
});
}
else {
/**
* ONLY Mask fields for NOT-owned items
*/
// if (!isOwned(data, user))
// maskedFields.map((maskedField) => {
// if (_.has(data, maskedField)) data = _.set(data, maskedField, "");
// });
/**
* Mask all fields
*/
maskedFields.map((maskedField) => {
if (lodash_1.default.has(data, maskedField))
data = lodash_1.default.set(data, maskedField, "");
});
}
return data;
};
exports.maskSensitiveInfo = maskSensitiveInfo;
/**
* Mask fields of an object
* @param data - The object to mask
* @param options - The options
* @returns The masked object
*/
const maskObject = (data, options) => {
const { fields, char = "***" } = options;
if ((0, lodash_1.isArray)(data)) {
data = data.map((item) => {
fields.map((maskedField) => {
if (lodash_1.default.has(item, maskedField))
item = lodash_1.default.set(item, maskedField, char);
});
return item;
});
}
else {
fields.map((maskedField) => {
if (lodash_1.default.has(data, maskedField))
data = lodash_1.default.set(data, maskedField, char);
});
}
return data;
};
exports.maskObject = maskObject;