Advertisement
Guest User

Untitled

a guest
Jul 18th, 2017
532
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.  
  19.         // Fin de copie
  20.  
  21.         var jsonPayload =
  22.         {
  23.             "documents": [
  24.                 {
  25.                     "approvals": [
  26.                         {
  27.                             "id": "ExampleSignatureId",
  28.                             "role": "Signer1",
  29.                             "fields": [
  30.                                 {
  31.                                     "page": 0,
  32.                                     "top": 200,
  33.                                     "subtype": "LABEL",
  34.                                     "height": 50,
  35.                                     "binding": "{approval.signed}",
  36.                                     "left": 100,
  37.                                     "width": 200,
  38.                                     "id": "myLabelField",
  39.                                     "type": "INPUT",
  40.                                     "value": "10/10/2000"
  41.                                 },
  42.                                 {
  43.                                     "page": 0,
  44.                                     "top": 100,
  45.                                     "subtype": "FULLNAME",
  46.                                     "height": 50,
  47.                                     "left": 100,
  48.                                     "width": 200,
  49.                                     "type": "SIGNATURE",
  50.                                     "name": "ExampleSignatureId"
  51.                                 }
  52.                             ],
  53.                             "name": ""
  54.                         }
  55.                     ],
  56.                     "id": "sample-contract",
  57.                     "name": "Test Document"
  58.                 }
  59.             ],
  60.             "status": "SENT",
  61.             "type": "PACKAGE",
  62.             "roles": [
  63.                 {
  64.                     "id": "Signer1",
  65.                     "type": "SIGNER",
  66.                     "signers": [
  67.                         {
  68.                             "email": "lionel.jamaigne@docunify.com",
  69.                             "firstName": "John",
  70.                             "lastName": "Smith",
  71.                             "id": "Signer1"
  72.                         }
  73.                     ],
  74.                     "name": "Signer1"
  75.                 }
  76.             ],
  77.             "name": "Example Package"
  78.         }
  79.  
  80.         // Je cherche un document sur base de l'id client
  81.         Q.fcall(function () {
  82.             var query = {
  83.                 _id: docId,
  84.                 type: 'Upload',
  85.                 idClient: req.params._idclient,
  86.                 safe: false
  87.             };
  88.             return self.model.findOne(query).exec();
  89.         })
  90.             // Je récupère le document
  91.             .then(function (document) {
  92.                 console.log('get users');
  93.                 if (!document) {
  94.                     throw new Error(res.i18n('Document not found'));
  95.                 }
  96.                 if (document.contentType != 'application/pdf') {
  97.                     throw new Error('Only pdf');
  98.                 }
  99.                 if (!utils.checkPermissionsFolders(req.userInfo.clients, document.idClient, document.folderId)) {
  100.                     throw new Error(res.i18n('Not authorized'));
  101.                 }
  102.                 if (document.signatories.length > 0) {
  103.                     throw new Error(res.i18n('Already request for signatories'));
  104.                 }
  105.                 fileG = document;
  106.                 var query = User.find({
  107.                     _id: {
  108.                         $in: users
  109.                     },
  110.                     active: true,
  111.                     clients: {
  112.                         $elemMatch: {
  113.                             _id: document.idClient,
  114.                             active: true
  115.                         }
  116.                     }
  117.                 });
  118.                 query.select('_id firstname lastname email notifications mobile prefix phoneType language');
  119.                 return query.exec();
  120.             })
  121.             // Je recupère les utilisateurs
  122.             .then(function (users) {
  123.                 console.log('get users 2');
  124.                 var userClientEmail = [];
  125.                 var already = [];
  126.  
  127.                 usersG = users;
  128.                 usersG.forEach(function (user) {
  129.                     userClientEmail.push(user.email);
  130.                 });
  131.                 if (req.body.extuser_select.length > 0) {
  132.                     req.body.extuser_select.forEach(function (user) {
  133.                         if (userClientEmail.indexOf(user.email) === -1 && already.indexOf(user.email) === -1) {
  134.                             already.push(user.email);
  135.                             if (user.known) {
  136.                                 userExtKnown.push(user.email);
  137.                             } else {
  138.                                 userExtToCreate.push(user);
  139.                             }
  140.                         }
  141.                     });
  142.                 }
  143.                 return Q.fcall(function () {
  144.                     return null
  145.                 });
  146.             })
  147.  
  148.             .then(function () {
  149.                 console.log('get externals known');
  150.                 var prom = Q.fcall(function () {
  151.                     return []
  152.                 });
  153.  
  154.                 if (userExtKnown.length > 0) {
  155.                     var q = Q.defer();
  156.                     User.find({
  157.                         email: {
  158.                             $in: userExtKnown
  159.                         }
  160.                     }, function (err, users) {
  161.                         q.resolve(users);
  162.  
  163.                     })
  164.                     prom = q.promise;
  165.                 }
  166.                 return prom;
  167.             })
  168.  
  169.             .then(function (users) {
  170.                 console.log('get externals unknown');
  171.                 users.forEach(function (user) {
  172.                     user.external = true;
  173.                     usersG.push(user);
  174.                 });
  175.                 var all_promises = [];
  176.                 if (userExtToCreate.length > 0 && userExtToCreate.length < 10) {
  177.                     userExtToCreate.forEach(function (user) {
  178.                         var q = Q.defer();
  179.                         authy.register_user(user.email, user.phone.replace(/[^0-9]/g, ''), user.phoneprefix.replace(/[^0-9]/g, ''), function (err, res) {
  180.                             if (err) throw new Error(err);
  181.                             user.authyId = res.user.id;
  182.                             return q.resolve(user);
  183.                         });
  184.                         all_promises.push(q.promise);
  185.                     });
  186.                     return Q.all(all_promises);
  187.                 } else {
  188.                     return Q.fcall(function () {
  189.                         return []
  190.                     });
  191.                 }
  192.  
  193.             })
  194.  
  195.             .then(function (users) {
  196.                 var all_promises = [];
  197.                 if (users.length > 0 && users.length < 10) {
  198.                     console.log('create users');
  199.                     users.forEach(function (user) {
  200.                         var q = Q.defer();
  201.                         var toCreate = {
  202.                             firstname: user.firstname,
  203.                             lastname: user.name,
  204.                             email: user.email.toLowerCase(),
  205.                             prefix: user.phoneprefix.replace(/[^0-9]/g, ''),
  206.                             mobile: user.phone.replace(/[^0-9]/g, ''),
  207.                             phoneType: user.phoneType,
  208.                             createdby: req.userInfo._id,
  209.                             firstActivation: true,
  210.                             tokenActivation: crypto.randomBytes(32).toString('hex').slice(0, 20),
  211.                             password: utils.genPassword(),
  212.                             active: false,
  213.                             clients: [],
  214.                             authyId: user.authyId
  215.                         };
  216.                         User.create(toCreate, function (err, newuser) {
  217.                             q.resolve(newuser);
  218.                         });
  219.                         all_promises.push(q.promise);
  220.                     });
  221.                     return Q.all(all_promises);
  222.                 } else {
  223.                     return Q.fcall(function () {
  224.                         return []
  225.                     });
  226.                 }
  227.  
  228.             })
  229.  
  230.             .then(function (users) {
  231.                 console.log('users');
  232.                 users.forEach(function (user) {
  233.                     user.external = true;
  234.                     user.newuser = true;
  235.                     usersG.push(user);
  236.                 });
  237.                 var q = Q.defer();
  238.  
  239.                 gfs.findOne({
  240.                     _id: fileG.fileId
  241.                 }, function (err, file) {
  242.                     if (err) throw new Error(res.i18n('Doc not found'));
  243.                     if (!file) throw new Error(res.i18n('File not found'));
  244.                     return q.resolve(file);
  245.                 });
  246.                 return q.promise;
  247.             })
  248.  
  249.             .then(function (file) {
  250.                 console.log('get file');
  251.                 var cipher = crypto.createDecipher('aes-256-cbc', file.metadata.privateKey + config.secrets.salt_token);
  252.                 var stream = gfs.createReadStream({
  253.                     _id: fileG.fileId
  254.                 }).pipe(cipher);
  255.  
  256.                 var buffers = [];
  257.                 var q = Q.defer();
  258.                 stream.on('data', function (buffer) {
  259.                     buffers.push(buffer);
  260.                 });
  261.                 stream.on('end', function () {
  262.                     var buffer = Buffer.concat(buffers);
  263.                     q.resolve(buffer);
  264.                 });
  265.                 return [q.promise, file];
  266.             })
  267.  
  268.             .spread(function(document, fichier){
  269.                 console.log('récupération du package');
  270.  
  271.                 var options =
  272.                         {
  273.                             method: 'POST',
  274.                             url: 'https://sandbox.esignlive.com/api/packages',
  275.                             // PROD: https://apps.esignlive.com/api
  276.                             headers: {
  277.                                 accept: 'application/json; esl-api-version=11.0',
  278.                                 authorization: 'Basic ' + api_key,
  279.                                 'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
  280.                             },
  281.                             formData: {
  282.                                 file: {
  283.                                     value: document,
  284.                                     options: {filename: fichier.filename, contentType: null}
  285.                                 },
  286.                                 payload: JSON.stringify(jsonPayload)
  287.                             }
  288.                     };
  289.  
  290.                 request(options, function (error, response, body)
  291.                 {
  292.                     if (error) throw new Error(error);
  293.  
  294.                     var tmp = JSON.parse(body);
  295.                     packageid = tmp['id'];
  296.                     getSignerToken();
  297.                     console.log('1');
  298.                 });
  299.                 console.log('2');
  300.                 //return 'https://sandbox.esignlive.com/auth?authenticationToken={' + token + '}&target=https://sandbox.esignlive.com/designer/{' + packageid + '}';
  301.             }).done();
  302.             /*.fail(function (error) {
  303.                 res.handleError(error);
  304.             }).done();*/
  305.             console.log('je renvoie');
  306.             return 'https://sandbox.esignlive.com/auth?authenticationToken={' + token + '}&target=https://sandbox.esignlive.com/designer/{' + packageid + '}';
  307.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement