//Modules used within Archer
var httpRequest = require('request');
var xPath = require('xpath');
var xmlDOM = require('xmldom');
var parser = require('xml2js');
//Archer Stuff
/*********************************************************** */
//DataFeed Parameters
var params = (typeof context !== "undefined") ? [Link] : {
BaseURI: "[Link]
Instance: "Entwicklung",
User: "A2A_Delete_SCC_Records",
Password: "***"
};
//DataFeed Token
var tokens = (typeof context !== "undefined") ? [Link] : {
LastRunDate: '2018-06-19T[Link]Z',
PreviousRunContext: "XYZ"
}
function callback_archer(myJSON) {
//FINALIZE THE DATA SETS
//--As a String
myDataString = jsonToXml(myJSON).toString();
//--As a Byte Array
myDataByteArray = new Buffer(myDataString);
myDataSet = myDataByteArray || myDataString || "";
//Callback to Archer only in Archer environment
if (typeof callback === "function") {
callback(null, {
//Return the data to RSA Archer
output: myDataSet,
previousRunContext: script_start_timestamp.toISOString()
});
}
else {
[Link](myDataString);
}
}
/*********************************************************** */
//XML Functions
/*********************************************************** */
function jsonToXml(jsonData) {
var bldrOpts = {
headless: true,
rootName: "ROOT",
renderOpts: {
'pretty': true,
'indent': ' ',
'newline': '\r\n',
'cdata': true
}
}
var responseBuilder = new [Link](bldrOpts);
myResponse = [Link](jsonData).toString();
//Fix XML Tags
myResponse = [Link](new RegExp("<.*?>", 'g'), removeSpaces);
myResponse = [Link](new RegExp("<.*?>", 'g'), removeDashes);
myResponse = [Link](new RegExp("<.*?>", 'g'), fixLeadingDigits);
//Fix Timezone
myResponse = [Link](new RegExp("<state_time>.*?<\/state_time>",
'g'), fixTimeZone);
return myResponse;
}
function removeSpaces(source) {
return [Link](new RegExp(" ", 'g'), "_");
}
function removeDashes(source) {
return [Link](new RegExp("-", 'g'), "_");
}
function fixLeadingDigits(source) {
//End Tag
if([Link](1) == '/' && ['0', '1', '2', '3', '4', '5', '6', '7', '8',
'9'].indexOf([Link](2)) != -1) {
return '</_' + [Link](2);
}
//Start Tag
if(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].indexOf([Link](1))
!= -1) {
return '<_' + [Link](1);
}
return source;
}
function fixTimeZone(source) {
//create a Date object from source data and return an ISO String
myDateString = [Link]([Link](">")+1, [Link]("</"));
isoString = new Date(myDateString).toISOString();
tagName = [Link]([Link]("<") + 1, [Link](">"));
return "<" + tagName + ">" + isoString + "</" + tagName + ">";
}
function escapeXml(unsafe) {
return [Link](/[<>&'"]/g, function (c) {
switch (c) {
case '<': return '<';
case '>': return '>';
case '&': return '&';
case '\'': return ''';
case '"': return '"';
}
});
}
/*********************************************************** */
//Global Variables
var script_start_timestamp = new Date();
var archerSessionToken = "";
//Requests
var request_1_login = {
method: "POST",
url: [Link] + "/ws/[Link]",
rejectUnauthorized: false,
headers: {
SOAPAction: "[Link]
[Link]/webservices/CreateUserSessionFromInstance",
'Content-Type': "text/xml; charset=utf-8"
},
body: '<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:xsi="[Link]
xmlns:xsd="[Link]
xmlns:soap="[Link] +
'<soap:Body>' +
'<CreateUserSessionFromInstance xmlns="[Link]
[Link]/webservices/">' +
'<userName>' + escapeXml([Link]) + '</userName>' +
'<instanceName>' + escapeXml([Link]) +
'</instanceName>' +
'<password>' + escapeXml([Link]) + '</password>' +
'</CreateUserSessionFromInstance>' +
'</soap:Body>' +
'</soap:Envelope>'
}
//Let's start our work in callback hell ;-)
//==========================================
//Step 1: xyz
httpRequest(request_1_login, function handleResponse(error1, response1, body1) {
if (typeof response1 !== "undefined" && [Link] == 200) {
myParser1 = new [Link]({explicitArray : false});
[Link](body1, function(err, result) {
archerSessionToken = result['soap:Envelope']
['soap:Body'].[Link]
sult;
//[Link]("archerSessionToken: "+archerSessionToken);
callback_archer({ergebnis:'Login erfolgt', token: archerSessionToken});
});
}
else {
throw new Error("The request did not return a 200 (OK) status.\r\nThe
returned error was:\r\n" + error1 + response1 + body1);
}
});