Advertisement
Guest User

Untitled

a guest
Jul 14th, 2017
598
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     createESLPackage: function (req, res) {
  2.         // Copié de requestSignatories
  3.         var docId = req.body.doc_id;
  4.         var users = req.body.selected;
  5.         var self = this;
  6.         var fileG = null;
  7.         var usersG = null;
  8.         var clientdocusign = null;
  9.         var userExtToCreate = [];
  10.         var userExtKnown = [];
  11.         var uids = [];
  12.         // Fin de copie
  13.  
  14.         // Copié de https://www.esignlive.com/blog/esignlive-how-to-creating-a-simple-node-js-web-application/
  15.         var request = require('request');
  16.         var formidable = require('formidable');
  17.         var http = require('http');
  18.         var token;
  19.         var packageid;
  20.         var api_key = 'Z1A2Rzl4ZzJSdklIOlpSRk9LenVrUzhZMw=='; // clef Lionel
  21.         // Fin de copie
  22.  
  23.         var jsonPayload = '{ "roles": [ { "id": "Signer1", "type": "SIGNER", "signers": [ { "firstName": "' + 'lionel'+ '", "lastName": "' + 'jamaigne' + '", "email": "' + 'lionel.jam@docunify.com' + '", "id": "Signer1" } ] }, { "id": "Sender1", "type": "SIGNER", "signers": [ { "firstName": "Haris", "lastName": "Haidary", "email": "sender@example.com", "id": "Sender1" } ] } ], "documents": [ { "fields": [ { "value": "' + 'lionel'+ '", "name": "first_name" }, { "value": "' + 'jamaigne' + '", "name": "last_name" }, { "value": "' + 'rue du truc' + '", "name": "address" }, { "value": "' + 'martelange' + '", "name": "city" }, { "value": "' + '8832' + '", "name": "zip" }, { "value": "' + 'saipas' + '", "name": "state" }, { "value": "' + 'belgique' + '", "name": "country" }, { "value": "' + '32499463127' + '", "name": "phone_number" }, { "value": "' + 'lionel.jamaigne@docunify.com' + '", "name": "email" }, { "value": "' + 'docunify sa' + '", "name": "company" }, { "value": "' + '44' + '", "name": "policy_number" } ], "name": "Sample Contract", "id" : "contract", "extract": true } ], "name": "NodeJS Example", "type": "PACKAGE", "status": "SENT" }';
  24.  
  25.         // Je cherche un document sur base de l'id client
  26.         Q.fcall(function () {
  27.             var query = {
  28.                 _id: docId,
  29.                 type: 'Upload',
  30.                 idClient: req.params._idclient,
  31.                 safe: false
  32.             };
  33.             return self.model.findOne(query).exec();
  34.         })
  35.             // Je récupère le document
  36.             .then(function (document) {
  37.                 console.log('get users');
  38.                 if (!document) {
  39.                     throw new Error(res.i18n('Document not found'));
  40.                 }
  41.                 if (document.contentType != 'application/pdf') {
  42.                     throw new Error('Only pdf');
  43.                 }
  44.                 if (!utils.checkPermissionsFolders(req.userInfo.clients, document.idClient, document.folderId)) {
  45.                     throw new Error(res.i18n('Not authorized'));
  46.                 }
  47.                 if (document.signatories.length > 0) {
  48.                     throw new Error(res.i18n('Already request for signatories'));
  49.                 }
  50.                 fileG = document;
  51.                 var query = User.find({
  52.                     _id: {
  53.                         $in: users
  54.                     },
  55.                     active: true,
  56.                     clients: {
  57.                         $elemMatch: {
  58.                             _id: document.idClient,
  59.                             active: true
  60.                         }
  61.                     }
  62.                 });
  63.                 query.select('_id firstname lastname email notifications mobile prefix phoneType language');
  64.                 return query.exec();
  65.             })
  66.             // Je recupère les utilisateurs
  67.             .then(function (users) {
  68.                 console.log('get users 2');
  69.                 var userClientEmail = [];
  70.                 var already = [];
  71.  
  72.                 usersG = users;
  73.                 usersG.forEach(function (user) {
  74.                     userClientEmail.push(user.email);
  75.                 });
  76.                 if (req.body.extuser_select.length > 0) {
  77.                     req.body.extuser_select.forEach(function (user) {
  78.                         if (userClientEmail.indexOf(user.email) === -1 && already.indexOf(user.email) === -1) {
  79.                             already.push(user.email);
  80.                             if (user.known) {
  81.                                 userExtKnown.push(user.email);
  82.                             } else {
  83.                                 userExtToCreate.push(user);
  84.                             }
  85.                         }
  86.                     });
  87.                 }
  88.                 return Q.fcall(function () {
  89.                     return null
  90.                 });
  91.             })
  92.  
  93.             .then(function () {
  94.                 console.log('get externals known');
  95.                 var prom = Q.fcall(function () {
  96.                     return []
  97.                 });
  98.  
  99.                 if (userExtKnown.length > 0) {
  100.                     var q = Q.defer();
  101.                     User.find({
  102.                         email: {
  103.                             $in: userExtKnown
  104.                         }
  105.                     }, function (err, users) {
  106.                         q.resolve(users);
  107.  
  108.                     })
  109.                     prom = q.promise;
  110.                 }
  111.                 return prom;
  112.             })
  113.  
  114.             .then(function (users) {
  115.                 console.log('get externals unknown');
  116.                 users.forEach(function (user) {
  117.                     user.external = true;
  118.                     usersG.push(user);
  119.                 });
  120.                 var all_promises = [];
  121.                 if (userExtToCreate.length > 0 && userExtToCreate.length < 10) {
  122.                     userExtToCreate.forEach(function (user) {
  123.                         var q = Q.defer();
  124.                         authy.register_user(user.email, user.phone.replace(/[^0-9]/g, ''), user.phoneprefix.replace(/[^0-9]/g, ''), function (err, res) {
  125.                             if (err) throw new Error(err);
  126.                             user.authyId = res.user.id;
  127.                             return q.resolve(user);
  128.                         });
  129.                         all_promises.push(q.promise);
  130.                     });
  131.                     return Q.all(all_promises);
  132.                 } else {
  133.                     return Q.fcall(function () {
  134.                         return []
  135.                     });
  136.                 }
  137.  
  138.             })
  139.  
  140.             .then(function (users) {
  141.                 var all_promises = [];
  142.                 if (users.length > 0 && users.length < 10) {
  143.                     console.log('create users');
  144.                     users.forEach(function (user) {
  145.                         var q = Q.defer();
  146.                         var toCreate = {
  147.                             firstname: user.firstname,
  148.                             lastname: user.name,
  149.                             email: user.email.toLowerCase(),
  150.                             prefix: user.phoneprefix.replace(/[^0-9]/g, ''),
  151.                             mobile: user.phone.replace(/[^0-9]/g, ''),
  152.                             phoneType: user.phoneType,
  153.                             createdby: req.userInfo._id,
  154.                             firstActivation: true,
  155.                             tokenActivation: crypto.randomBytes(32).toString('hex').slice(0, 20),
  156.                             password: utils.genPassword(),
  157.                             active: false,
  158.                             clients: [],
  159.                             authyId: user.authyId
  160.                         };
  161.                         User.create(toCreate, function (err, newuser) {
  162.                             q.resolve(newuser);
  163.                         });
  164.                         all_promises.push(q.promise);
  165.                     });
  166.                     return Q.all(all_promises);
  167.                 } else {
  168.                     return Q.fcall(function () {
  169.                         return []
  170.                     });
  171.                 }
  172.  
  173.             })
  174.  
  175.             .then(function (users) {
  176.                 console.log('users');
  177.                 users.forEach(function (user) {
  178.                     user.external = true;
  179.                     user.newuser = true;
  180.                     usersG.push(user);
  181.                 });
  182.                 var q = Q.defer();
  183.  
  184.                 gfs.findOne({
  185.                     _id: fileG.fileId
  186.                 }, function (err, file) {
  187.                     if (err) throw new Error(res.i18n('Doc not found'));
  188.                     if (!file) throw new Error(res.i18n('File not found'));
  189.                     return q.resolve(file);
  190.                 });
  191.                 return q.promise;
  192.             })
  193.  
  194.             .then(function (file) {
  195.                 console.log('get file');
  196.                 var cipher = crypto.createDecipher('aes-256-cbc', file.metadata.privateKey + config.secrets.salt_token);
  197.                 var stream = gfs.createReadStream({
  198.                     _id: fileG.fileId
  199.                 }).pipe(cipher);
  200.  
  201.                 var buffers = [];
  202.                 var q = Q.defer();
  203.                 stream.on('data', function (buffer) {
  204.                     buffers.push(buffer);
  205.                 });
  206.                 stream.on('end', function () {
  207.                     var buffer = Buffer.concat(buffers);
  208.                     q.resolve(buffer);
  209.                 });
  210.                 return [q.promise, file];
  211.             })
  212.  
  213.             .spread(function(document, fichier){
  214.                 console.log('creation du package');
  215.  
  216.                 var options =
  217.                         {
  218.                             method: 'POST',
  219.                             url: 'https://sandbox.esignlive.com/api/packages',
  220.                             headers: {
  221.                                 accept: 'application/json',
  222.                                 authorization: 'Basic ' + api_key,
  223.                                 'content-type': 'multipart/form-data; boundary=---011000010111000001101001'
  224.                             },
  225.                             formData: {
  226.                                 file: {
  227.                                     value: document,
  228.                                     options: {filename: fichier.filename, contentType: null}
  229.                                 },
  230.                                 payload: jsonPayload
  231.                             }
  232.                     };
  233.  
  234.                 request(options, function (error, response, body)
  235.                 {
  236.                     console.log('callback request');
  237.                     if (error) throw new Error(error);
  238.  
  239.                     var tmp = JSON.parse(body);
  240.                     packageid = tmp['id'];
  241.                     console.log('temp:' + tmp);
  242.                     console.log("The package id is: " + packageid);
  243.                     //eslFunctions.getSignerToken(res);
  244.  
  245.                 });
  246.             })
  247.  
  248.             .catch(function (error) {
  249.                 res.handleError(error.message);
  250.             })
  251.  
  252.  
  253.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement