Name
sn_dp_store_app.AppDataPrivacyValidator
Description
No description available
Script
var AppDataPrivacyValidator = Class.create();
AppDataPrivacyValidator.prototype = {
/**
* Pre-validate only Selective replace technique parameters.
* Validate all technique parameters using ScriptableValidator.java, except when both
* start_index and end_index are being edited.
* @return JSON with error, success or validationError.
* success.PRE_VALIDATION_SKIP to skip pre-validation
* success.PRE_VALIDATION_SUCCESS to skip validation
*/
preValidateTechniqueParams: function(technique, updateDiff) {
var gr = new GlideRecord('dp_technique_with_params');
if (!gr.get(technique)) {
return {
'error': 'Technique not found.'
};
}
if (gr.getValue('technique') !== 'aa46d2240f313010895c6b82ff767eea') {
return {
'success': 'PRE_VALIDATION_SKIP' // Skip technique other than Selective replace
};
}
// (sys_id <-> parameter) mapping of start_index and end_index from dp_technique_parameter.list
var indexIDs = {
'f6714d9173313010fb1d1f877bf6a7ed': 'end_index',
'12d00d9173313010fb1d1f877bf6a7b3': 'start_index'
};
var indexData = {};
var updateIDs = Object.keys(updateDiff);
var validatorApi = new global.DataProtectionValidator();
var failureResponse = {};
var savedParams = new GlideRecord('dp_technique_parameter_value');
savedParams.addQuery('sys_id', 'IN', updateIDs);
savedParams.query();
while (savedParams.next()) {
var parameterID = savedParams.getValue('sys_id');
var parameterName = savedParams.getValue('technique_parameter');
if (indexIDs.hasOwnProperty(parameterName)) {
indexData[indexIDs[parameterName]] = {
sysId: parameterID,
newValue: updateDiff[parameterID]
};
} else {
var result = validatorApi.validateParameterValues(parameterID, updateDiff[parameterID]);
if (result) {
failureResponse[parameterID] = result; // Continue loop to get all error messages
}
}
}
// If both start_index and end_index are edited, validate here, else use scriptable validator.
if (indexData.hasOwnProperty('start_index') && indexData.hasOwnProperty('end_index')) {
var hasValidStartIndex = false;
if (!indexData.start_index.newValue) {
// Mandatory field which defaults to 1. Ref. MaskTechniqueParameters.java
indexData.start_index.newValue = '1';
}
if (!this._isInteger(indexData.start_index.newValue)) {
failureResponse[indexData.start_index.sysId] =
gs.getMessage("'start_index' parameter must be configured with an integer value.");
} else {
hasValidStartIndex = parseInt(indexData.start_index.newValue) > 0;
if (!hasValidStartIndex) {
failureResponse[indexData.start_index.sysId] = gs.getMessage("Invalid start index.");
}
}
if (indexData.end_index.newValue) { // end_index is optional
if (!this._isInteger(indexData.end_index.newValue)) {
failureResponse[indexData.end_index.sysId] =
gs.getMessage("'end_index' parameter must be configured with an integer value.");
} else if (hasValidStartIndex) {
if (parseInt(indexData.start_index.newValue) > parseInt(indexData.end_index.newValue)) {
failureResponse[indexData.start_index.sysId] =
gs.getMessage("End index must be greater than or equal to start index.");
}
}
}
} else {
var apiResponse = null;
var errorId = null;
if (indexData.hasOwnProperty('start_index')) {
apiResponse = validatorApi.validateParameterValues(
indexData.start_index.sysId, indexData.start_index.newValue);
errorId = indexData.start_index.sysId;
}
if (indexData.hasOwnProperty('end_index')) {
apiResponse = validatorApi.validateParameterValues(
indexData.end_index.sysId, indexData.end_index.newValue);
errorId = indexData.end_index.sysId;
}
if (apiResponse) {
failureResponse[errorId] = apiResponse;
}
}
if (Object.keys(failureResponse).length > 0) {
return {
'validationError': failureResponse
};
}
return {
'success': "PRE_VALIDATION_SUCCESS"
};
},
_isInteger: function(value) {
var number = parseInt(value);
return !isNaN(number) && number >= -2147483648 && number <= 2147483647; // Java Integer range
},
type: 'AppDataPrivacyValidator'
};
Sys ID
af4f6b9b77231110840cac1d5b5a99c1