5tarl0rd
"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