Name

global.RequestAuthSampleCustomSigner

Description

Its a sample script include to understand how to write custom signer

Script

var RequestAuthSampleCustomSigner = Class.create();
RequestAuthSampleCustomSigner.prototype = Object.extend(new RequestAuthInternal(), {
  
  initialize: function() {
      RequestAuthInternal.prototype.initialize.call(this);
  },

  /*Override generateAuth if you are writing your own custom signer.
  * It is a sample method to understand how to sign using custom authenticator.
  */
  generateAuth: function(authAPI) {
  	
  	//read the request data into instance variables
  	this.enableDebug(true);
  	this.readRequestData(authAPI);
  	
  	//sign the data
  	var encryptionUtil = new GlideCertificateEncryption();
  	// generateMac() will
      // 1. UTF-8 encode the input String
      // 2. Generate the Hash with the desired algoritham
      // 3. Base 64 enocde the generated hash and returns it
      var signedHeader =  encryptionUtil.generateMac(this.secret_key, "HmacSHA256", this.getStringToSign());
  	
  	//return HttpRequestAuthedData object.
  	var httpRequestSignedData = new sn_auth.HttpRequestAuthedData();
  	httpRequestSignedData.addHeader("authorization", signedHeader);
      httpRequestSignedData.setStatus("SUCCESS"); //avilable status values :SUCCESS, FAIL, SKIPPED;
      httpRequestSignedData.setDirective("HEADER"); //use QUERY if signed data needs to be sent in query parameters
      return httpRequestSignedData;
  },
  
  getStringToSign: function() {
      var stringToSign = "";
  	var headers = this.headerMap;
      var headerKeys =  Object.keys(headers);
  	var headerValue;
  	
  	headerKeys.forEach(function(key) {
          headerValue = headers[key];
  		if(headerValue){
  			stringToSign += key+":"+headerValue+ "\n"; //"\n" is random terminal
  			if(this.debugMode)
  				gs.info("Header Key:{0} Value:{1}",[key,headerValue]);
  		}
      }.bind(this));
  	
  	var queryParams = this.queryParamMap;
  	var qpKeys = Object.keys(queryParams);
  	var qpValue;
  	
  	qpKeys.forEach(function(key) {
          qpValue = queryParams[key];
  		if(qpValue){
  			stringToSign += key+":"+qpValue+ "\n"; //"\n" is random terminal
  	
  			if(this.debugMode)	
  				gs.info("Request Param Key:{0} Value:{1}",[key,qpValue]);
  		}
      }.bind(this));
  	
  	if(this.debugMode)
  		gs.info("String to Sign:"+stringToSign);
  		
      return stringToSign;
  },
  
  /*read request data into instance variables.
  * It is a sample method to understand how to read request data
  */
  readRequestData: function(authAPI){
  	var requestData = authAPI.getHttpRequestData();
      this.endpoint = requestData.getEndpoint();
      this.method = requestData.getHttpMethod().toUpperCase();
  	
  	if(this.debugMode){
  		gs.info("Method:{0} Endpoint:{1}",[this.method, this.endpoint]);
  	}
  
      this.queryParamMap = requestData.getQueryParamMap();
  	
  	this.headerMap = requestData.getHeaderMap();
  	
      this.payload = requestData.getContent();

      // get credential fields if needed, these attributes are different based on credential type
      var credential = authAPI.getAuthCredential();
     // this.consumer_key = credential.getAttribute("consumer_key");
     // this.access_token = credential.getAttribute("access_token");
     // this.access_token_secret = credential.getAttribute("access_token_secret");
  },
  
  debugMode : false,
  
  enableDebug: function(flag) {
  	this.debugMode = flag;
  },
  
  type: 'RequestAuthSampleCustomSigner'
});

Sys ID

1a5d6c73b7d33300dee3b891ee11a9fb

Offical Documentation

Official Docs: