Name

global.PwdVerifySMSProcessor

Description

Extension for SMS verification of user input on the second page.

Script

var PwdVerifySMSProcessor = Class.create();

PwdVerifySMSProcessor.prototype = {
  category: 'password_reset.extension.verification_form_processor', // DO NOT REMOVE THIS LINE!

  /**********
   * Initialization stuff here...
   **********/
  initialize: function() {},

  /**********
   * Process the verification form request, and return whether the user was successfully verified
   * 
   * @param params.resetRequestId The sys-id of the current password-reset request (table: pwd_reset_request)
   * @param params.userId         The sys-id of the user trying to be verified (table: sys_user)
   * @param params.verificationId The sys-id of the verification to be processed (table: pwd_verification)
   * @param request               The form request object. fields in the form can be accessed using: request.getParameter('<element-id>')
   * @return boolean telling whether the user is successfully verified
   **********/
  processForm: function(params, request) {
      var isVerified = false;
      try {
          isVerified = this.verify(params.resetRequestId, params.userId, params.verificationId, request);
      } catch (scriptErr) {
          gs.logError("[PwdVerifySMSProcessor.processForm]: '" + scriptErr + "'");
          isVerified = false;
      }
      return isVerified;
  },

  /*********
   * verify - returns true/false whether the user is verified for this verification method.
   *
   * Params:
   * @reset_request_id - Password Reset Request Id or a Context id
   * @enrolled_user_id
   * @verification_id
   * @request - the request object that was submitted by the user in the verification form
   *********/
  verify: function(reset_request_id, enrolled_user_id, verification_id, request) {
      var LOG_ID = '[PwdVerifySMSProcessor.verify] ';
      // If request is password reset request or a context
      var requestExists = new SNC.PwdTrackingManager().requestExists(reset_request_id);
      var requestId = reset_request_id;
      var contextId = reset_request_id;
      if (!requestExists)
          requestId = '';

      var mode = request.getParameter('sysparm_sms_verification_mode');
      var answer = request.getParameter('sysparm_answer_sms_code').trim();
      gs.log(LOG_ID + "request_id: '" + reset_request_id + "', answer: '" + answer + "'");

      var result = false;
      var smsMgr = new PwdSMSNotificationManager();
      if (mode == 'subscription' || mode == 'mobile')
          result = smsMgr.verifyResetCode(reset_request_id, verification_id, answer);
      else
          gs.logError(LOG_ID + " unknown operation requested. request_id: '" + reset_request_id + "'");

      var status = result ? 'verified' : 'not_verified';
      var reqVerGr = new GlideRecord('pwd_map_request_to_verification');
      reqVerGr.addQuery('verification', verification_id);
      reqVerGr.addQuery('context_id', contextId);
      reqVerGr.query();
  	
      var recordExists = reqVerGr.next();
      if (recordExists && reqVerGr.getValue('status') == 'verified')
           return true;

      var passwordResetUtil = new global.PasswordResetUtil();
      passwordResetUtil.updateVerificationResult(enrolled_user_id, verification_id, contextId, status, requestId);

      return result;
  },

  type: 'PwdVerifySMSProcessor'
};

Sys ID

d7d80d78eb6001006a668c505206fe31

Offical Documentation

Official Docs: