5tarl0rd

Current Path : /home/tiporg/.trash/include/
Upload File :
Current File : /home/tiporg/.trash/include/postMessagesUtils.js

"use strict";

/*************************************************************************************************
 * This library provides all the necessary methods to create a PostMessage library. In case you have to add new messages,
 * don't forget to add them in the confluence page and in the respective validation array (Outgoing or Incoming) with the ID
 * of the message, and the length. Remember for Outgoing messages follow the Standardization (minimum Id and Payload is required).
 *************************************************************************************************/

var availableIdsOutgoingMsgsAndLength =
[
    ['fontSizeChangeRequest', 9],
    ['provideTrxmApiToken', 2],
    ['returnTrxmApiToken', 2],
    ['returnTrxmContext', 2],
    ['app2AppPhotoTanResponseTan', 4],
    ['isApp2AppPhotoTanAvailableResponse', 3],
    ['esafeUserRegistrationEmailResponse', 2],
    ['esafeTokenPairResponse', 2],
    ['esafeSSOTicketResponse', 3],
    ['postProcessCustomerRegistrationResponse', 2],
    ['chatContentRequest', 1],
    ['userCentricsContextResponse', 2]
];

var availableIdsIncomingMsgsAndLength =
[
    ['heartbeat', 2],
    ['resize', 2],
    ['loadURL', 2],
    ['scrollFrame', 2],
    ['openGvo', 2],
    ['provideTrxmApiToken', 2],
    ['requestTrxmApiToken', 2],
    ['requestTrxmContext', 2],
    ['app2AppPhotoTanRequestTAN', 2],
    ['isApp2AppPhotoTanAvailableRequest', 2],
    ['esafeUserRegistrationEmailRequest', 2],
    ['esafeTokenPairRequest', 2],
    ['esafeSSOTicketRequest', 2],
    ['postProcessCustomerRegistrationRequest', 2],
    ['chatContextResponse', 3]
];

var consoleLog = function(msg, module){
    if(typeof console != "undefined") {
        console.log(module + ': ' + msg);
    }
};

function parseIncomingMsg(msg, logger){
    var parsedJSONIncMsg = undefined;

    try {
        parsedJSONIncMsg = JSON.parse(msg);
    }
    catch(err) {
        consoleLog('ERROR: Unable to parse Incoming Post Message as JSON: "' + msg + '"!', logger);
        consoleLog('Error stack trace: ' + err.stack, logger);
        return undefined;
    }
    if (!validIncomingMsgs(parsedJSONIncMsg,logger)) {
        return undefined;
    }
    return parsedJSONIncMsg;
}

function answerPostMessage(event, answer, logger){
    event.source.postMessage(answer, event.origin);
 	consoleLog('TRXM sent: "' + answer + '"', logger);
}

function buildOutgoingMsg(args, logger){
     if (validateMsgs(args, availableIdsOutgoingMsgsAndLength)) {
        return JSON.stringify({
            'id':args[0],
            'payload':args[1],
            'status':args[2],
            'error': args[3]
            }
        );
     } else {
        consoleLog('Unsupported outgoing message: "' + args + '"!', logger);
        return undefined;
     }
}

function validIncomingMsgs(incomingJSON, logger){
    if(incomingJSON == undefined){
         consoleLog('Unsupported incoming message structure: "' + incomingJSON, logger);
         return false;
    }
    var args = Object.keys(incomingJSON).map(function(k) { return incomingJSON[k] });
	if (!validateMsgs(args, availableIdsIncomingMsgsAndLength)) {
         consoleLog('Unsupported incoming message: "' + args + '"!', logger);
         return false;
	}
	return true;
}

function validateMsgs(args, validationArray){
	for(var i = 0; i < validationArray.length; i++) {
		var message = validationArray[i];
		/***********************************************
		 * The Validation of length (expected structure:
		 * id, payload, status, error) will be added when
		 * plain text messages are deprecated.
		 ***********************************************/
		if (message[0] == args[0]) {// && message[1] == args.length) {
			return true;
		}
	}
    return false;
}

function validOriginUrl(originUrl, event, logger){
    if(event.origin !== originUrl){
        consoleLog('Ignoring message from unauthorized host: "' + event.origin + '"...', logger);
        return false;
    }
    return true;
}

function dispatchRequestMessage(args, logger){
    if (validateMsgs(args, availableIdsOutgoingMsgsAndLength)) {
       const request = JSON.stringify({
           'id':args[0]
        });

        window.postMessage(request);
    } else {
       consoleLog('Unsupported outgoing message: "' + args + '"!', logger);
    }
}

5tarL0rd By 5tarl0rd Being Anonymous