Name
sn_risk_advanced.LicensingUtils
Description
No description available
Script
var LicensingUtils = Class.create();
LicensingUtils.prototype = {
initialize: function() {
this.restrictMap = {
'sn_risk_advanced_event': {
restrictedInEntitlement: ['irm_professional_access','ara_limited_access'],
allowedInEntitlement: ['irm_enterprise_access']
},
'sn_risk_advanced_risk_identification,sn_risk_advanced_risk_identification_configuration': {
restrictedInEntitlement: ['ara_limited_access'],
allowedInEntitlement: ['irm_professional_access', 'irm_enterprise_access']
},
'sn_risk_advanced_automated_query_factor,sn_risk_advanced_automated_scripted_factor,sn_risk_advanced_base_automated_factor': {
restrictedInEntitlement: ['irm_professional_access'],
allowedInEntitlement: ['ara_limited_access', 'irm_enterprise_access']
}
};
},
hasEntitlement: function(entitlement) {
return this._hasEntitlement(entitlement);
},
handleModulesBasedOnLicense: function(property) {
return this._handleModulesBasedOnLicense(property);
},
hasLicense: function(tableName, logIllegalAccess) {
return this._hasLicense(tableName, logIllegalAccess);
},
_handleModulesBasedOnLicense: function(property) {
/** hide modules under risks events application, but handle orx and basel line modules with their property**/
if (sn_lef.GlideEntitlement.hasLicenseEntitlementForApp('sn_risk_advanced', 'irm_enterprise_access'))
this._clearLicenseTracking();
if (!this._hasLicense('sn_risk_advanced_event', false))
this._enableorDisableRiskEventModules('application=20bc51877373230055e9d8b0caf6a7f5^ORsys_id=445b0e5a536233001be2ddeeff7b1277^ORsys_id=e39d249db75233002a279e98ee11a95b^ORsys_id=a0900ba153c010100b39ddeeff7b125c', false);
else
this._enableorDisableRiskEventModules('application=20bc51877373230055e9d8b0caf6a7f5^ORsys_id=445b0e5a536233001be2ddeeff7b1277^ORsys_id=e39d249db75233002a279e98ee11a95b^ORsys_id=a0900ba153c010100b39ddeeff7b125c', true);
//Hide Automated factors if IRM professional entitlement is present
if (!this._hasLicense('sn_risk_advanced_base_automated_factor', false))
this._enableorDisableModules('sys_id=169aabbe0f530010bad14bb768767eec^ORsys_id=2ebe6bfe771300102a272f589a106109', false);
else
this._enableorDisableModules('sys_id=169aabbe0f530010bad14bb768767eec^ORsys_id=2ebe6bfe771300102a272f589a106109', true);
//Hide the risk identification modules if ARA Limited entitlement is present
if (!this._hasLicense('sn_risk_advanced_risk_identification', false))
this._enableorDisableModules('titleLIKErisk identification^ORnameSTARTSWITHsn_risk_advanced_risk_identification^ORsys_id=9bdb5752532210101bfbddeeff7b12a5', false);
else
this._enableorDisableModules('titleLIKErisk identification^ORnameSTARTSWITHsn_risk_advanced_risk_identification^ORsys_id=9bdb5752532210101bfbddeeff7b12a5', true);
/* below is to hide the module the in service portal under GRC module*/
gr = new GlideRecord('sp_rectangle_menu_item');
gr.get('fcaa30e5872a33003058d1a936cb0bac');
gr.active = this.hasLicense('sn_risk_advanced_event');
gr.update();
},
_enableorDisableRiskEventModules: function(query, activeFlagValue) {
var baselDashBoards = gs.getProperty('sn_risk_advanced.show_basel_attr_reports');
var orxDashBoard = gs.getProperty('sn_risk_advanced.show_orx_events');
var orxModule = 'e3a62c87b7d533002a279e98ee11a90c';
var baseLModules = ['a5cf0747537233001be2ddeeff7b125d', '445b0e5a536233001be2ddeeff7b1277', 'e39d249db75233002a279e98ee11a95b'];
function needToEnable(moduleId, enableModules) {
if (moduleId == orxModule) {
return enableModules && orxDashBoard == 'true';
} else if (baseLModules.indexOf(moduleId) != -1) {
return enableModules && baselDashBoards == 'true';
} else {
return enableModules;
}
}
var gr = new GlideRecord('sys_app_module');
gr.addEncodedQuery(query);
gr.query();
while (gr.next()) {
gr.active = needToEnable(gr.getUniqueValue(), activeFlagValue);
gr.update();
}
},
_enableorDisableModules: function(query, activeFlagValue) {
var gr = new GlideRecord('sys_app_module');
gr.addEncodedQuery(query);
gr.query();
while (gr.next()) {
gr.active = activeFlagValue;
gr.update();
}
},
_hasLicense: function(tableName, logIllegalAccess) {
try {
for (var key in this.restrictMap) {
//Check if tableName is part of which key in restrict map and get its license values
if (key.indexOf(tableName) != -1) {
var allLicenses = this.restrictMap[key];
var allowedLicenses = allLicenses.allowedInEntitlement;
var restrictedLicenses = allLicenses.restrictedInEntitlement;
//Check if customer has any license part of allowed licenses, if yes customer has license
var customerHasALlowedLicense = allowedLicenses.some(function(license) {
if (sn_lef.GlideEntitlement.hasLicenseEntitlementForApp('sn_risk_advanced', license))
return true;
});
if (customerHasALlowedLicense)
return true;
//Check if customer has any license part of restricted licenses, if yes customer does not license
var customerHasRestrictedLicense = restrictedLicenses.filter(function(license) {
if (sn_lef.GlideEntitlement.hasLicenseEntitlementForApp('sn_risk_advanced', license))
return true;
});
if (customerHasRestrictedLicense.length > 0) {
if (logIllegalAccess)
this._logLicensingInfo(tableName, '1');
return false;
}
return true;
}
}
} catch (err) {
if (tableName)
this._logLicensingInfo(tableName, '2');
return true;
}
return true;
},
verifyLicenseWithoutLogging: function(tableName) {
return this._hasLicense(tableName, false);
},
_logLicensingInfo: function(table, message) {
var trackingTable = new GlideRecord('sn_risk_advanced_license_tracking');
trackingTable.addQuery('table', table);
trackingTable.addQuery('message', message);
trackingTable.query();
if (trackingTable.next()) {
trackingTable.access_count = trackingTable.access_count + 1;
trackingTable.update();
} else {
trackingTable.initialize();
trackingTable.message = message;
trackingTable.table = table;
trackingTable.access_count = 1;
trackingTable.insert();
}
},
_clearLicenseTracking: function() {
var trackingTable = new GlideRecord('sn_risk_advanced_license_tracking');
trackingTable.deleteMultiple();
},
_clearRiskIdentificationLicenseTracking: function() {
var trackingTable = new GlideRecord('sn_risk_advanced_license_tracking');
trackingTable.addQuery('table', 'IN', 'sn_risk_advanced_risk_identification,sn_risk_advanced_risk_identification_configuration');
trackingTable.query();
trackingTable.deleteMultiple();
},
_hasEntitlement: function(entitlement) {
return sn_lef.GlideEntitlement.hasLicenseEntitlementForApp('sn_risk_advanced', entitlement);
},
type: 'LicensingUtils'
};
Sys ID
a2ae7ddc73630010ec95d11ee2f6a706