Name

global.UninstallVALineMessengerCustomBot

Description

Script class to facilitate uninstallation of Line Messenger custom bot.

Script

var UninstallVALineMessengerCustomBot = Class.create();


var PROVIDER_TABLE = 'sys_cs_provider';
var PROVIDER_APPLICATION_TABLE = 'sys_cs_provider_application';
var HASH_MESSAGE_VERIFICATION_TABLE = 'hash_message_verification';
var TOKEN_VERIFICATION_TABLE = 'token_verification';
var MESSAGE_AUTH_TABLE = 'message_auth';

var LINE_MESSENGER_PROVIDER_ID = '6958b90bc3f250106b4653a3a840dde2';

UninstallVALineMessengerCustomBot.prototype = {
  initialize: function() {},

  unInstallVALineMessengerCustomBot: function(botName) {
      /*
       * Currently Line can have only one integration per instance and hence has only one Line provider app record. Hence botName is not necessarily a required param
       * Note that botName is used only in responses and not in CRUD logic.
       */

      var result = {
          'error': false,
          'message': gs.getMessage('You have successfully uninstalled the Line Messenger Custom Bot - {0}', botName)
      };

      if (!this.validateInputs([botName])) {
          result.error = true;
          result.message = gs.getMessage('Bot Configuration parameters are invalid.');
          return result;
      }

      /*
       * Verify that OOTB Provider Application record exists
       */
      var lineProviderAppQuery = 'provider=' + LINE_MESSENGER_PROVIDER_ID;
      var providerApplicationRecord = this.getRecords(PROVIDER_APPLICATION_TABLE, lineProviderAppQuery);

      if (!providerApplicationRecord.next()) {
          gs.error(gs.getMessage('UninstallVALineMessengerCustomBot:unInstallVALineMessengerCustomBot - OOTB Provider Application record for Line does not exist -  {0}', inboundId));
          result.error = true;
          result.message = gs.getMessage('Provider Application record for Line does not exist');
      } else {
          var messageAuthRecordSysId = providerApplicationRecord.message_auth;
          var tokenRecordSysId = providerApplicationRecord.message_auth.outbound_message_creation;
          var hashRecordSysId = providerApplicationRecord.message_auth.inbound_message_verification;

          result = this.removeCustomBotConfiguration(botName, providerApplicationRecord.sys_id, messageAuthRecordSysId, hashRecordSysId, tokenRecordSysId);
      }
      return result;
  },

  removeCustomBotConfiguration: function(botName, providerAppRecordSysId, messageAuthRecordSysId, hashRecordSysId, tokenRecordSysId) {
      var result = {
          'error': false,
          'message': gs.getMessage('You have successfully uninstalled the Custom bot for Line Messenger - {0}', botName)
      };

      if (!this.validateInputs([providerAppRecordSysId, messageAuthRecordSysId, hashRecordSysId, tokenRecordSysId])) {
          var _configurationRecords = {
              'message_auth': messageAuthRecordSysId,
              'hash_message_verification': hashRecordSysId,
              'token_verification': tokenRecordSysId,
              'sys_cs_provider_application': providerAppRecordSysId
          };
          gs.error(gs.getMessage('UninstallVALineMessengerCustomBot:unInstallVALineMessengerCustomBot - One or more configuration records does not exist for Line custom bot : {0}', [JSON.stringify(_configurationRecords)]));
          result.error = true;
          result.message = gs.getMessage('One or more configuration records does not exist for -  {0}', botName);
      }

      //delete hash message verification record
      var hmDeletionStatus = this.deleteRecordBySysId(HASH_MESSAGE_VERIFICATION_TABLE, hashRecordSysId);
      if (!hmDeletionStatus) {
          result.error = true;
          result.message = gs.getMessage('Failed to delete Hash Message Verifications record for -  {0}.', botName);
          //return result;
      }

      //delete token verification record
      var tokenDeletionStatus = this.deleteRecordBySysId(TOKEN_VERIFICATION_TABLE, tokenRecordSysId);
      if (!tokenDeletionStatus) {
          result.error = true;
          result.message = gs.getMessage('Failed to delete Token Verification record for -  {0}.', botName);
          //return result;
      }

      //delete message auth record
      var authDeletionStatus = this.deleteRecordBySysId(MESSAGE_AUTH_TABLE, messageAuthRecordSysId);
      if (!authDeletionStatus) {
          result.error = true;
          result.message = gs.getMessage('Failed to delete Message Auth record for -  {0}.', botName);
  		gs.error(gs.getMessage('Failed to delete Message Auth record for -  {0}.', botName));
          //return result;
      }

      //update OOTB provider app record - rest name and clear message_auth field.
      var providerAppResetStatus = this.updateRecordBySysId(PROVIDER_APPLICATION_TABLE, providerAppRecordSysId, {
          'name': 'Line',
          'message_auth': null
      });

      if (!providerAppResetStatus) {
          result.error = true;
          result.message = gs.getMessage('Failed to reset Provider Channel Identity record for -  {0}.', botName);
      }

  	gs.info(gs.getMessage('You have successfully uninstalled the Custom bot for Line Messenger - {0}', botName));

      return result;
  },


  deleteRecordBySysId: function(tableName, sysId) {

      try {
          var _delGR = new GlideRecord(tableName);
          _delGR.get(sysId);
          _delGR.query();
          if (_delGR.next()) {
              _delGR.deleteRecord();

              return true;
          }

          return false;

      } catch (error) {
          gs.error("UninstallVALineMessengerCustomBot:deleteRecordBySysId - Failed to delete record in {0}:{1} - {2}" + [tableName, sysId, error.message]);
          return false;
      }
  },

  validateInputs: function(params) {
      /* not null or empty */
      return params.every(function(i) {
          return i !== null && i !== undefined && i !== '';
      });
  },

  getRecords: function(tableName, encodedQString) {
      var _getGR = new GlideRecord(tableName);
      _getGR.addEncodedQuery(encodedQString);
      _getGR.query();

      return _getGR;

  },

  updateRecordBySysId: function(tableName, sysId, fieldValueMap) {

      try {
          var _upGR = new GlideRecord(tableName);
          _upGR.get(sysId);

          for (var fieldName in fieldValueMap) {
              var fieldVal = fieldValueMap[fieldName];
              _upGR.setValue(fieldName, fieldVal);
          }
          var _sysId = _upGR.update();
          return _sysId;

      } catch (error) {
          gs.error("UninstallVALineMessengerCustomBot::updateRecordBySysId - Failed to update record:" + error.message);
          return -1;
      }

  },

  type: 'UninstallVALineMessengerCustomBot'
};

Sys ID

d95f6e4153302110dff1ddeeff7b128e

Offical Documentation

Official Docs: