Advertisement
Guest User

Untitled

a guest
Feb 13th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const xmlParser = require('./xmlParser');
  2. const utTemplate = require('ut-template');
  3. const UtCrypt = require('ut-core/crypt');
  4. let crypt;
  5.  
  6. function getCrypt(cryptKey) {
  7.     if (!crypt) {
  8.         crypt = new UtCrypt({cryptParams: {password: cryptKey}});
  9.     }
  10.     return crypt;
  11. }
  12.  
  13. function decryptPassword(encryptedPassword, cryptArgs, cryptKey) {
  14.     var cryptArgsObj = JSON.parse(cryptArgs);
  15.     cryptArgsObj.password = cryptKey;
  16.  
  17.     return crypt.decrypt(encryptedPassword, cryptArgsObj);
  18. }
  19.  
  20. let bus;
  21.  
  22. module.exports = {
  23.     id: 't24/malawi',
  24.     createPort: require('ut-port-http'),
  25.     headers: {
  26.         'content-type': 'text/xml',
  27.         'charset': 'utf-8'
  28.     },
  29.     method: 'POST',
  30.     parseResponse: false,
  31.     namespace: ['cbs'],
  32.     start: function() {
  33.         bus = this.bus;
  34.         getCrypt(this.bus.config.masterCryptKey);
  35.     },
  36.     receive: function(msg, $meta) {
  37.         const templateName = $meta.opcode;
  38.         const xml = msg.payload;
  39.  
  40.         console.log('<<<<<<<<<<RESPONSE>>>>>>>>>>>');
  41.         console.log(xml);
  42.         console.log('<<<<<<<<<<RESPONSE>>>>>>>>>>>');
  43.  
  44.         if ($meta.mtid === 'error') {
  45.             if (msg.cause && msg.cause.body) {
  46.                 return xmlParser.xml2js(msg.cause.body)
  47.                 .then(function(obj) {
  48.                     throw new Error('T24 Error: \n' + obj.Envelope.Body.Fault.faultstring._);
  49.                 });
  50.             } else {
  51.                 throw new Error('T24 Internal Server Error');
  52.             }
  53.         }
  54.  
  55.         return xmlParser.parse(templateName, xml)
  56.         .then(res => {
  57.             if (res.success === 'Success') {
  58.                 return res;
  59.             } else if (res.messages && typeof res.messages === 'string') {
  60.                 throw new Error('T24 Error: \n' + res.messages);
  61.             } else if (Array.isArray(res.messages) && res.messages.length) {
  62.                 throw new Error('T24 Error: \n' + res.messages.join('\n'));
  63.             }
  64.  
  65.             return res;
  66.         });
  67.     },
  68.     send: function(msg, $meta) {
  69.         msg.headers = msg.headers || {};
  70.         const isSuperAdmin = !$meta.auth || ($meta.auth.permission && $meta.auth.permission[0] && $meta.auth.permission[0].actionId === '%');
  71.         if (isSuperAdmin) {
  72.             msg.username = this.config.username;
  73.             msg.password = this.config.password;
  74.         }
  75.  
  76.         const externalCredentialsOverride = $meta && $meta.externalCredentialsOverride && $meta.externalCredentialsOverride[this.config.id];
  77.         if (externalCredentialsOverride) {
  78.             msg.username = externalCredentialsOverride.username;
  79.             msg.password = externalCredentialsOverride.password;
  80.         }
  81.  
  82.         const actorId = externalCredentialsOverride
  83.             ? externalCredentialsOverride.actorId
  84.             : $meta && $meta.auth && $meta.auth.actorId;
  85.         const promiseCredentials = actorId
  86.             ? bus.importMethod('user.externalCredential.get')({actorId, externalSystemName: this.config.id})
  87.             : Promise.resolve();
  88.  
  89.         return promiseCredentials
  90.         .then(res => {
  91.             const externalCredentials = res && Array.isArray(res.externalCredential) && res.externalCredential[0];
  92.             if (externalCredentials && externalCredentials.userName && externalCredentials.password && externalCredentials.cryptArgs) {
  93.                 msg.username = externalCredentialsOverride && externalCredentialsOverride.username
  94.                     ? externalCredentialsOverride.username
  95.                     : externalCredentials.userName;
  96.                 msg.password = externalCredentialsOverride && externalCredentialsOverride.password
  97.                     ? externalCredentialsOverride.password
  98.                     : decryptPassword(externalCredentials.password, externalCredentials.cryptArgs, bus.config.masterCryptKey);
  99.             }
  100.  
  101.             const template = utTemplate.load(
  102.                 require.resolve('./templates/send/' + $meta.opcode + '.xml.marko')
  103.             );
  104.  
  105.             return template.render(msg);
  106.         })
  107.         .then(function(response) {
  108.             msg.payload = response;
  109.  
  110.             console.log('<<<<<<<<<<REQUEST>>>>>>>>>>>');
  111.             console.log(response);
  112.             console.log('<<<<<<<<<<REQUEST>>>>>>>>>>>');
  113.  
  114.             $meta.opcode = msg.opcode || $meta.opcode;
  115.  
  116.             return msg;
  117.         });
  118.     }
  119. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement