Name

global.PwdVerificationSelectionHelper

Description

This script include holds the login into verification selection for password reset

Script

var PwdVerificationSelectionHelper = Class.create();

/*Main function with all the login for retrieving the relevant verification 
    from the given rules:
    1. If no verification selection was give return result {verification_selection :false , mandatory:{ids},optional:null}
    2. If there is a verification selection but min <  mandatory, result :
    {verification_selection:false, mandatory:{ids},optional:null}
    3. otherwise : {verification_selection:true, mandatory:{ids},optional:{ids}}
  */
PwdVerificationSelectionHelper.getVerificationSelection =  function(pwdProcessId, userId, requestId) {	

  var processMgr = new SNC.PwdProcessManager();
  var result = { 
  	verification_selection : false, 
  	mandatory : null, 
  	optional : null, 
  	min_selections : 0, 
  	email_password_reset_url : null
  };
  
  var processGr = new GlideRecord("pwd_process");
  processGr.get(pwdProcessId);

  var trackingMgr = new SNC.PwdTrackingManager();
  var isRequestInvalid = trackingMgr.isRequestInvalid(requestId);

  var allowVer = processGr.allow_verification_choice;
  var minSelection = processGr.min_verifications;
  result.min_selections = minSelection;
  result.email_password_reset_url = processGr.email_password_reset_url;
  
  var mandatoryVerifications = processMgr.getProcessVerificationIdsByMandatoryFlag(pwdProcessId, true);

  var mandatory = [];
  
  //need to change it from a java array to javascript
  for (var i = 0; i != mandatoryVerifications.size(); ++i)
  	mandatory.push(mandatoryVerifications.get(i));
  result.mandatory = mandatory;
  	
  if( minSelection <=  mandatory.length){
  	result.verification_selection = false;
  	result.optional = null;
  	return result;
  }

  var optionalVerifications = processMgr.getProcessVerificationIdsByMandatoryFlag(pwdProcessId, false);
  
  var enrollmentMgr = new SNC.PwdEnrollmentManager();
  
  var userRelevantVer = [];
  var verOptionalToAdd = allowVer ? optionalVerifications.size() : minSelection - mandatory.length;
  verOptionalToAdd = verOptionalToAdd > optionalVerifications.size() ? optionalVerifications.size() : verOptionalToAdd;
  var verOptionalAdded = 0;
  
  for (i = 0; i < optionalVerifications.size() && verOptionalAdded < verOptionalToAdd; ++i) {
  	if (isRequestInvalid || enrollmentMgr.isUserEnrolledByVerificationId(userId, optionalVerifications.get(i))) {
  		userRelevantVer.push(optionalVerifications.get(i));	
  		++verOptionalAdded;
  	}
  }
  
  if(userRelevantVer.length + mandatory.length <= minSelection) {
  	result.optional = userRelevantVer;
  	result.verification_selection = false;
  }
  else {
  	if(userRelevantVer.length + mandatory.length > minSelection) {
  		if(userRelevantVer.length > 0) {
  			result.optional = userRelevantVer;
  			result.verification_selection = true;
  		}
  		else 
  			result.verification_selection = false;
  	}
  	else { 
  		throw 'To complete this process, you must enroll for additional verifications (methods to verify your identity)';
  	}
  }

  return result;
};

Sys ID

1b3da98f13a772000bc8bccf3244b011

Offical Documentation

Official Docs: