Select Git revision
test_servo.py
-
Christian Darsow-Fromm authoredChristian Darsow-Fromm authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
handleSchemes.js 2.05 KiB
/**
* get confidential fields from given schema based on attribute select: false
*
* @param {model} model model to compute
*
* @return {array} matching field names
*/
export const getConfidentialFields = (model) => {
performance.mark('getConfidentialFields:start');
const schema = Object.entries(model.schema.paths);
const confidentialFields = schema.filter(function (field) {
return field[1].selected === false;
});
performance.mark('getConfidentialFields:end');
return confidentialFields.map(field => field[0]);
};
/**
* remove fields from given object that are stated as confidential
*
* @param {model} model model to compute
* @param {object} object object to compute
*
* @return {object} cleansed object
*/
export const hideConfidentialFields = (model, record) => {
performance.mark('hideConfidentialFields:start');
// turn mongoose record into js object
const object = record.toObject();
// get confidential fields from model
const confidentialFields = getConfidentialFields(model);
// delete confidential fields from object
confidentialFields.forEach(field => delete object[field]);
performance.mark('hideConfidentialFields:end');
return object;
};
/**
* get array of all field names from a given model
*
* @param {model} model model to compute
*
* @return {array} all found field names
*/
const getAllFieldnames = (model) => {
return Object.keys(model.schema.paths);
};
/**
* get an object with key:value pairs
* wipe out all fields, not corresponding with given model
*
* @param {model} model model to compute
* @param {object} object object, contains key:value
*
* @return {object} object with key:values only for fields, found in schema
*/
export const prefillDocumentObject = (model, object) => {
const allowedFields = getAllFieldnames(model);
let result = Object.fromEntries(allowedFields.map((field) => {
if (Object.hasOwnProperty.bind(object)(field)) {
return [field, object[field]];
}
}).filter(field => field));
return result;
};