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

Offical Documentation

Official Docs: