Name

global.CustomMapTokenUtil

Description

No description available

Script

var CustomMapTokenUtil = Class.create();
CustomMapTokenUtil.prototype = {
  initialize: function() {
  },

  type: 'CustomMapTokenUtil',
  getTokenHandler: function(process, request, response) {
  	function isValidParam(param) {
  		return !gs.nil(param) && !gs.nil(param[0]);
  	}

  	function getCustomMapScreen(documentId) {
  		var screenGR = new GlideRecord("sys_sg_screen");
  		if (!screenGR.isValid())
  			return null;
  		screenGR.get(documentId);
  		return screenGR;
  	}

  	function getCustomMapProvider(providerId) {
  		var customMapProviderGR = new GlideRecord("sys_sg_custom_map_provider");
  		if (!customMapProviderGR.isValid())
  			return null;
  		customMapProviderGR.get(providerId);
  		return customMapProviderGR;
  	}

  	function getMappedInCredentials(customMapProviderGR) {
  		var creds = {};

  		if (gs.nil(customMapProviderGR))
  			return creds;

  		creds['clientId'] = customMapProviderGR.getValue("map_provider_app_id");
  		var clientSecret = customMapProviderGR.getElement("map_provider_app_secret");
  		creds['clientSecret'] = gs.nil(clientSecret) ? null : clientSecret.getDecryptedValue();
  		return creds;
  	}

  	function isScreenAssociatedWithProvider(screenGR, providerId) {
  		if(screenGR.getValue("sys_class_name") === "sys_sg_parameter_screen") {
  			var customMapConfigAttribute = new GlideRecord("sys_sg_input_attribute");
  			customMapConfigAttribute.addQuery("name", "CustomMapConfigId");
  			customMapConfigAttribute.query();
  		
  			var sections = [];
  			
  			while(customMapConfigAttribute.next()) {
  				if (customMapConfigAttribute.input.parameter_screen.getValue() === screenGR.getUniqueValue())
  					return true;
  				else
  					sections.push(customMapConfigAttribute.input.parameter_section.getValue());
  			}
  			
  			if(sections.length === 0)
  				return false;
  			
  			var parameterSection = new GlideRecord("sys_sg_parameter_section_m2m");
  			parameterSection.addQuery("parameter_screen", screenGR.getUniqueValue());
  			parameterSection.addQuery("parameter_section", "IN", sections.join(","));
  			parameterSection.setLimit(1);
  			parameterSection.query();
  			
  			return parameterSection.next();					   
  		} else if(screenGR.getValue("sys_class_name") === "sys_sg_custom_map_screen") {
  			var customMapScreenGR = new GlideRecordUtil().getGR(screenGR.sys_class_name, screenGR.sys_id);
  			var defaultProviderId = customMapScreenGR.getValue("default_provider");
  			var providerList = customMapScreenGR.getValue("providers");
  			return providerId.equals(defaultProviderId) ||
  				(!gs.nil(providerList) && providerList.toString().includes(providerId));
  		}
  		return false;
  	}

  	function callMappedInService(externalId, creds, response) {
  		var mappedInUrl = "https://api-gateway.mappedin.com/exports/legacy/1/bundle?venue=" + externalId + "&version=1.0.0";
  		var httpRequest = new sn_ws.RESTMessageV2();
  		httpRequest.setEndpoint(mappedInUrl);
  		httpRequest.setHttpMethod('GET');
  		httpRequest.setBasicAuth(creds['clientId'], creds['clientSecret']);
  		var httpResponse = httpRequest.execute();
  		response.setStatus(httpResponse.getStatusCode());
  		if (httpResponse.getStatusCode().toString() !== '200')
  			response.setError(new sn_ws_err.BadRequestError('Api call to Mappedin failed. Error : ' + httpResponse.getErrorMessage()));
  		else
  			response.setBody(JSON.parse(httpResponse.getBody()));
  	}

  	var queryParams = request.queryParams;
  	if (gs.nil(queryParams) || !isValidParam(queryParams.externalId) || !isValidParam(queryParams.documentId) || !isValidParam(queryParams.providerId)) {
  		response.setStatus(400);
  		response.setError(new sn_ws_err.BadRequestError('Missing required parameter(s) externalId, documentId or providerId'));
  		return;
  	}

  	var documentId = queryParams.documentId[0];
  	var providerId = queryParams.providerId[0];
  	var externalId = queryParams.externalId[0];

  	var customMapScreenGR = getCustomMapScreen(documentId);
  	if (!customMapScreenGR.isValidRecord()) {
  		response.setStatus(400);
  		response.setError(new sn_ws_err.BadRequestError("Can't find custom map screen with documentId :" + documentId));
  		return;
  	}

  	if (!isScreenAssociatedWithProvider(customMapScreenGR, providerId)) {
  		response.setStatus(400);
  		response.setError(new sn_ws_err.BadRequestError("Invalid documentId :" + documentId + " providerId : " + providerId + " combination"));
  		return;
  	}

  	var customMapProviderGR = getCustomMapProvider(providerId);
  	if (!customMapProviderGR.isValidRecord()) {
  		response.setStatus(400);
  		response.setError(new sn_ws_err.BadRequestError("Can't find custom map screen provider with providerId: " + providerId));
  		return;
  	}

  	var creds = getMappedInCredentials(customMapProviderGR);
  	if (gs.nil(creds.clientId) || gs.nil(creds.clientSecret)) {		
  		response.setStatus(400);
  		response.setError(new sn_ws_err.BadRequestError('Mappedin credentials are not set'));
  		return;
  	}

  	callMappedInService(externalId, creds, response);
  },
};

Sys ID

6f29f4395ba320103738af151581c7fd

Offical Documentation

Official Docs: