intermediate-component-sa 1.0.5-s → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,616 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var log4js = require("log4js");
4
+ var moment = require("moment");
5
+ var path = require("path");
6
+ var fs = require("fs");
7
+ var ncp = require("ncp");
8
+ var mkdirp = require("mkdirp");
9
+ var rimraf = require("rimraf");
10
+ var multer = require("multer");
11
+ var extract = require("extract-zip");
12
+ var child_process = require("child_process");
13
+ var fse = require('fs-extra');
14
+ var zipFolder = require('zip-folder');
15
+ var mv = require('mv');
16
+ var app_config_1 = require("../config/app.config");
17
+ var promises_shared_1 = require("./promises.shared");
18
+ var exec = child_process.exec;
19
+ var logger = log4js.getLogger('ServerScripts');
20
+ function PipeWriteFile(response, file) {
21
+ var Promise = require('bluebird');
22
+ var ended = false;
23
+ return new Promise(function (resolve, reject) {
24
+ response.pipe(file);
25
+ function nice_ending() {
26
+ if (!ended) {
27
+ ended = true;
28
+ resolve(true);
29
+ }
30
+ }
31
+ function error_ending() {
32
+ if (!ended) {
33
+ ended = true;
34
+ reject(false);
35
+ }
36
+ }
37
+ file.on('finish', nice_ending);
38
+ file.on('end', nice_ending);
39
+ file.on('error', error_ending);
40
+ file.on('close', error_ending);
41
+ }).finally(function () { return file.close(); });
42
+ }
43
+ exports.PipeWriteFile = PipeWriteFile;
44
+ function DeleteFileSync(file) {
45
+ var fs = require('fs');
46
+ fs.unlinkSync(file);
47
+ }
48
+ exports.DeleteFileSync = DeleteFileSync;
49
+ function FileProperty(filePath) {
50
+ return new Promise(function (resolve, reject) {
51
+ try {
52
+ var result = {};
53
+ if (fs.existsSync(filePath) && fs.lstatSync(filePath).isFile()) {
54
+ var fileStat = fs.lstatSync(filePath);
55
+ var creationDate = moment(fileStat.birthtime);
56
+ var updateDate = moment(fileStat.mtime);
57
+ result = {
58
+ path: filePath,
59
+ isFile: fileStat.isFile(),
60
+ creationDate: creationDate,
61
+ updateDate: updateDate
62
+ };
63
+ }
64
+ resolve(result);
65
+ }
66
+ catch (e) {
67
+ reject(e);
68
+ }
69
+ });
70
+ }
71
+ exports.FileProperty = FileProperty;
72
+ function ListFolderContent(folderPath) {
73
+ return new Promise(function (resolve, reject) {
74
+ try {
75
+ var result_1 = [];
76
+ if (fs.existsSync(folderPath) && fs.lstatSync(folderPath).isDirectory()) {
77
+ var files = fs.readdirSync(folderPath);
78
+ files.forEach(function (fileName) {
79
+ var filePath = path.join(folderPath, fileName);
80
+ var fileStat = fs.lstatSync(filePath);
81
+ var creationDate = moment(fileStat.birthtime);
82
+ var updateDate = moment(fileStat.mtime);
83
+ result_1.push({
84
+ name: fileName,
85
+ path: filePath,
86
+ isFolder: fileStat.isDirectory(),
87
+ creationDate: creationDate,
88
+ updateDate: updateDate,
89
+ });
90
+ });
91
+ }
92
+ resolve(result_1);
93
+ }
94
+ catch (e) {
95
+ reject(e);
96
+ }
97
+ });
98
+ }
99
+ exports.ListFolderContent = ListFolderContent;
100
+ function CreateFolder(folderName) {
101
+ return ExistInFileSystem(folderName)
102
+ .then(function (result) {
103
+ if (result)
104
+ return true;
105
+ return new Promise(function (resolve, reject) {
106
+ try {
107
+ mkdirp(folderName, function (err) {
108
+ resolve(err === null || err === undefined);
109
+ });
110
+ }
111
+ catch (e) {
112
+ reject(e);
113
+ }
114
+ });
115
+ });
116
+ }
117
+ exports.CreateFolder = CreateFolder;
118
+ function ExistInFileSystem(fileSystemPath) {
119
+ return new Promise(function (resolve, reject) {
120
+ try {
121
+ fs.stat(fileSystemPath, function (err, stat) {
122
+ resolve(err === null || err === undefined);
123
+ });
124
+ }
125
+ catch (e) {
126
+ reject(e);
127
+ }
128
+ });
129
+ }
130
+ exports.ExistInFileSystem = ExistInFileSystem;
131
+ function TouchPath(fileSystemPath) {
132
+ return new Promise(function (resolve, reject) {
133
+ try {
134
+ var now = moment().toDate();
135
+ fs.utimes(fileSystemPath, now, now, function (err) {
136
+ resolve(err === null || err === undefined);
137
+ });
138
+ }
139
+ catch (e) {
140
+ reject(e);
141
+ }
142
+ });
143
+ }
144
+ exports.TouchPath = TouchPath;
145
+ function CopyFile(sourcePath, targetPath) {
146
+ return new Promise(function (resolve, reject) {
147
+ try {
148
+ fse.copy(sourcePath, targetPath, function (err) {
149
+ resolve(err === null || err === undefined);
150
+ });
151
+ }
152
+ catch (e) {
153
+ reject(e);
154
+ }
155
+ });
156
+ }
157
+ exports.CopyFile = CopyFile;
158
+ function CopyFolder(sourcePath, targetPath) {
159
+ return new Promise(function (resolve, reject) {
160
+ try {
161
+ fs.stat(targetPath, function (err, stat) {
162
+ resolve(err === null || err === undefined);
163
+ });
164
+ }
165
+ catch (e) {
166
+ reject(e);
167
+ }
168
+ }).then(function (resultExists) {
169
+ if (resultExists)
170
+ return true;
171
+ return new Promise(function (resolve, reject) {
172
+ try {
173
+ mkdirp(targetPath, function (err) {
174
+ resolve(err === null || err === undefined);
175
+ });
176
+ }
177
+ catch (e) {
178
+ reject(e);
179
+ }
180
+ });
181
+ }).then(function (resultMkDir) {
182
+ return new Promise(function (resolve, reject) {
183
+ try {
184
+ ncp.ncp(sourcePath, targetPath, function (err) {
185
+ resolve(err === null || err === undefined);
186
+ });
187
+ }
188
+ catch (e) {
189
+ reject(e);
190
+ }
191
+ });
192
+ });
193
+ }
194
+ exports.CopyFolder = CopyFolder;
195
+ function MoveFolder(sourceFolder, destFolder) {
196
+ return ExistInFileSystem(sourceFolder)
197
+ .then(function (result) {
198
+ if (!result)
199
+ throw 'El directorio \'' + sourceFolder + '\' no existe';
200
+ return new Promise(function (resolve, reject) {
201
+ try {
202
+ fs.rename(sourceFolder, destFolder, function (err) {
203
+ resolve(err === null || err === undefined);
204
+ });
205
+ }
206
+ catch (e) {
207
+ reject(e);
208
+ }
209
+ });
210
+ });
211
+ }
212
+ exports.MoveFolder = MoveFolder;
213
+ function MoveFolderOtherDevice(sourceFolder, destFolder) {
214
+ return ExistInFileSystem(sourceFolder)
215
+ .then(function (result) {
216
+ if (!result)
217
+ throw 'El directorio \'' + sourceFolder + '\' no existe';
218
+ return new Promise(function (resolve, reject) {
219
+ try {
220
+ mv(sourceFolder, destFolder, function (err) {
221
+ resolve(err === null || err === undefined);
222
+ });
223
+ }
224
+ catch (e) {
225
+ reject(e);
226
+ }
227
+ });
228
+ });
229
+ }
230
+ exports.MoveFolderOtherDevice = MoveFolderOtherDevice;
231
+ function DeleteFolder(folderPath) {
232
+ return new Promise(function (resolve, reject) {
233
+ try {
234
+ rimraf(folderPath, function (err) {
235
+ resolve(err === null || err === undefined);
236
+ });
237
+ }
238
+ catch (e) {
239
+ reject(e);
240
+ }
241
+ });
242
+ }
243
+ exports.DeleteFolder = DeleteFolder;
244
+ function DeleteFile(filePath) {
245
+ return new Promise(function (resolve, reject) {
246
+ try {
247
+ fs.unlink(filePath, function (err) {
248
+ resolve(err === null || err === undefined);
249
+ });
250
+ }
251
+ catch (e) {
252
+ reject(e);
253
+ }
254
+ });
255
+ }
256
+ exports.DeleteFile = DeleteFile;
257
+ function ReadFileContent(fileName, encode, safe) {
258
+ logger.info('ReadFileContent: ', fileName);
259
+ return new Promise(function (resolve, reject) {
260
+ try {
261
+ fs.readFile(fileName, encode, function (err, data) {
262
+ if (err) {
263
+ if (safe) {
264
+ return resolve(null);
265
+ }
266
+ else {
267
+ return reject(err);
268
+ }
269
+ }
270
+ else {
271
+ return resolve(data);
272
+ }
273
+ });
274
+ }
275
+ catch (e) {
276
+ logger.info('ReadFileContent - error: ', e);
277
+ if (safe)
278
+ resolve(null);
279
+ else
280
+ reject(e);
281
+ }
282
+ });
283
+ }
284
+ exports.ReadFileContent = ReadFileContent;
285
+ function FileToBase64(file) {
286
+ return new Promise(function (resolve, reject) {
287
+ try {
288
+ var buffer = fs.readFileSync(file);
289
+ return resolve(new Buffer(buffer).toString('base64'));
290
+ }
291
+ catch (e) {
292
+ reject(e);
293
+ }
294
+ });
295
+ }
296
+ exports.FileToBase64 = FileToBase64;
297
+ function BufferFile(file) {
298
+ return new Promise(function (resolve, reject) {
299
+ try {
300
+ var buffer = fs.readFileSync(file);
301
+ return resolve(buffer);
302
+ }
303
+ catch (e) {
304
+ reject(e);
305
+ }
306
+ });
307
+ }
308
+ exports.BufferFile = BufferFile;
309
+ function WriteFileContent(fileName, data, encode, safe) {
310
+ return new Promise(function (resolve, reject) {
311
+ try {
312
+ fs.writeFile(fileName, data, { encoding: encode }, function (err) {
313
+ if (err) {
314
+ if (safe)
315
+ return resolve(null);
316
+ else
317
+ return reject(err);
318
+ }
319
+ else {
320
+ return resolve(true);
321
+ }
322
+ });
323
+ }
324
+ catch (e) {
325
+ if (safe)
326
+ resolve(null);
327
+ else
328
+ reject(e);
329
+ }
330
+ });
331
+ }
332
+ exports.WriteFileContent = WriteFileContent;
333
+ function ZipFolder(srcFolder, zipFilePath) {
334
+ return new Promise(function (resolve, reject) {
335
+ try {
336
+ zipFolder(srcFolder, zipFilePath, function (err) {
337
+ resolve(err === null || err === undefined);
338
+ });
339
+ }
340
+ catch (e) {
341
+ reject(e);
342
+ }
343
+ });
344
+ }
345
+ exports.ZipFolder = ZipFolder;
346
+ function UnZipFolder(zipFilePath, destinationPath) {
347
+ destinationPath = destinationPath || zipFilePath;
348
+ return new Promise(function (resolve, reject) {
349
+ try {
350
+ extract(zipFilePath, {
351
+ dir: destinationPath
352
+ }, function (err) {
353
+ if (err) {
354
+ return reject(err);
355
+ }
356
+ else {
357
+ return resolve(true);
358
+ }
359
+ });
360
+ }
361
+ catch (e) {
362
+ reject(e);
363
+ }
364
+ });
365
+ }
366
+ exports.UnZipFolder = UnZipFolder;
367
+ function UnRarFolder(rarFilePath, destinationPath) {
368
+ destinationPath = destinationPath || rarFilePath;
369
+ return CreateFolder(destinationPath)
370
+ .then(function (result) {
371
+ if (!result)
372
+ throw 'No se pudo crear el directorio \'' + destinationPath + '\'';
373
+ return new Promise(function (resolve, reject) {
374
+ try {
375
+ var cmd = 'unrar x "' + rarFilePath + '" "' + destinationPath + '"';
376
+ exec(cmd, function (err, stdout, stderr) {
377
+ if (err) {
378
+ return reject(err);
379
+ }
380
+ else {
381
+ return resolve(true);
382
+ }
383
+ });
384
+ }
385
+ catch (e) {
386
+ reject(e);
387
+ }
388
+ });
389
+ });
390
+ }
391
+ exports.UnRarFolder = UnRarFolder;
392
+ function GetFolderTree(folderPath, extensionExclude, extensionFilter) {
393
+ return new Promise(function (resolve, reject) {
394
+ extensionExclude = extensionExclude || [];
395
+ extensionFilter = extensionFilter || [];
396
+ var walk = function (dir, obj, done) {
397
+ fs.readdir(dir, function (err, list) {
398
+ if (err)
399
+ return done(err);
400
+ var pending = list.length;
401
+ if (!pending)
402
+ return done(null);
403
+ list.forEach(function (fileName) {
404
+ var filePath = path.resolve(dir, fileName);
405
+ fs.stat(filePath, function (err, stat) {
406
+ if (stat && stat.isDirectory()) {
407
+ var objDirectory_1 = {
408
+ name: fileName,
409
+ relativePath: path.relative(folderPath, filePath).replace(/\\/g, '/'),
410
+ fullPath: filePath,
411
+ type: 'directory',
412
+ children: []
413
+ };
414
+ obj.push(objDirectory_1);
415
+ walk(filePath, objDirectory_1.children, function (err, res) {
416
+ objDirectory_1.size = objDirectory_1.children.reduce(function (prev, cur) { return prev + cur.size; }, 0);
417
+ if (!--pending)
418
+ done(null);
419
+ });
420
+ }
421
+ else {
422
+ var fileExtension = path.extname(fileName).toLowerCase().slice(1);
423
+ var skipFile = false;
424
+ if (fileExtension && extensionExclude.length && extensionExclude.indexOf(fileExtension) >= 0)
425
+ skipFile = true;
426
+ if (extensionFilter.length && (extensionFilter.indexOf(fileExtension) === -1 || !fileExtension))
427
+ skipFile = true;
428
+ if (!skipFile) {
429
+ var objFile = {
430
+ name: fileName,
431
+ type: 'file',
432
+ extension: fileExtension,
433
+ relativePath: path.relative(folderPath, filePath).replace(/\\/g, '/'),
434
+ fullPath: filePath,
435
+ size: stat.size
436
+ };
437
+ obj.push(objFile);
438
+ }
439
+ if (!--pending)
440
+ done(null);
441
+ }
442
+ });
443
+ });
444
+ });
445
+ };
446
+ var folderName = path.basename(folderPath);
447
+ var objMainDirectory = {
448
+ name: folderName,
449
+ type: 'directory',
450
+ relativePath: path.relative(folderPath, folderPath).replace(/\\/g, '/'),
451
+ fullPath: folderPath,
452
+ children: []
453
+ };
454
+ var folderTree = [];
455
+ folderTree.push(objMainDirectory);
456
+ walk(folderPath, objMainDirectory.children, function (err, results) {
457
+ if (err)
458
+ return reject(err);
459
+ objMainDirectory.size = objMainDirectory.children.reduce(function (prev, cur) { return prev + cur.size; }, 0);
460
+ resolve(folderTree);
461
+ });
462
+ });
463
+ }
464
+ exports.GetFolderTree = GetFolderTree;
465
+ function GetFolderFiles(folderPath, extensionExclude, extensionFilter, recursive) {
466
+ return new Promise(function (resolve, reject) {
467
+ extensionExclude = extensionExclude || [];
468
+ extensionFilter = extensionFilter || [];
469
+ recursive = (recursive === true);
470
+ var walk = function (dir, obj, done) {
471
+ fs.readdir(dir, function (err, list) {
472
+ if (err)
473
+ return done(err);
474
+ var pending = list.length;
475
+ if (!pending)
476
+ return done(null);
477
+ list.forEach(function (fileName) {
478
+ var filePath = path.resolve(dir, fileName);
479
+ fs.stat(filePath, function (err, stat) {
480
+ if (stat && stat.isDirectory()) {
481
+ var objDirectory = {
482
+ name: fileName,
483
+ relativePath: path.relative(folderPath, filePath).replace(/\\/g, '/'),
484
+ fullPath: filePath,
485
+ type: 'directory',
486
+ children: []
487
+ };
488
+ obj.push(objDirectory);
489
+ if (recursive) {
490
+ walk(filePath, obj, function (err, res) {
491
+ if (!--pending)
492
+ done(null);
493
+ });
494
+ }
495
+ else {
496
+ if (!--pending)
497
+ done(null);
498
+ }
499
+ }
500
+ else {
501
+ var fileExtension = path.extname(fileName).toLowerCase().slice(1);
502
+ var skipFile = false;
503
+ if (fileExtension && extensionExclude.length && extensionExclude.indexOf(fileExtension) >= 0)
504
+ skipFile = true;
505
+ if (extensionFilter.length && (extensionFilter.indexOf(fileExtension) === -1 || !fileExtension))
506
+ skipFile = true;
507
+ if (!skipFile) {
508
+ var objFile = {
509
+ name: fileName,
510
+ type: 'file',
511
+ extension: fileExtension,
512
+ relativePath: path.relative(folderPath, filePath).replace(/\\/g, '/'),
513
+ fullPath: filePath,
514
+ size: stat.size
515
+ };
516
+ obj.push(objFile);
517
+ }
518
+ if (!--pending)
519
+ done(null);
520
+ }
521
+ });
522
+ });
523
+ });
524
+ };
525
+ var folderFiles = [];
526
+ walk(folderPath, folderFiles, function (err, results) {
527
+ if (err) {
528
+ var errorMsg = (typeof err === 'string' ? err : err.message || err.description || '');
529
+ logger.error('Error al consultar archivos de la carpeta snapshot \'' + folderPath + '\': ' + errorMsg);
530
+ resolve([]);
531
+ }
532
+ else {
533
+ resolve(folderFiles);
534
+ }
535
+ });
536
+ });
537
+ }
538
+ exports.GetFolderFiles = GetFolderFiles;
539
+ function UploadFileToServer(fileName, destFolder, req, res, types, fieldName, single, replace, fileSizeLimit) {
540
+ single = (single === false ? single : true);
541
+ fieldName = (fieldName ? fieldName : 'file');
542
+ replace = (replace === false ? replace : true);
543
+ fileSizeLimit = (fileSizeLimit ? fileSizeLimit : app_config_1.FILE_UPLOAD_LIMIT);
544
+ req.multerCounter = 0;
545
+ var storageEngine = multer.diskStorage({
546
+ destination: function (req, file, cb) {
547
+ cb(null, destFolder);
548
+ },
549
+ filename: function (req, file, cb) {
550
+ cb(null, fileName || file.originalname);
551
+ }
552
+ });
553
+ var fileFilter = function (req, file, cb) {
554
+ req.multerCounter++;
555
+ var typesRegEx = '\.(' + (types.toLowerCase() || '.+') + ')$';
556
+ var regEx = new RegExp(typesRegEx);
557
+ if (types && !file.originalname.toLowerCase().match(regEx)) {
558
+ logger.error('El archivo recibido no está dentro de los tipos permitidos (' + types.toLowerCase() + ').');
559
+ return cb(new Error('Only ' + types.toLowerCase() + ' files are allowed!'));
560
+ }
561
+ if (replace) {
562
+ cb(null, true);
563
+ }
564
+ else {
565
+ ExistInFileSystem(path.join(destFolder, file.originalname))
566
+ .then(function (result) {
567
+ return cb(null, !result);
568
+ });
569
+ }
570
+ };
571
+ var upload;
572
+ if (single) {
573
+ upload = multer({
574
+ storage: storageEngine,
575
+ fileFilter: fileFilter,
576
+ limits: { fileSize: fileSizeLimit },
577
+ }).single(fieldName);
578
+ }
579
+ else {
580
+ upload = multer({
581
+ storage: storageEngine,
582
+ fileFilter: fileFilter,
583
+ limits: { fileSize: fileSizeLimit },
584
+ }).array(fieldName);
585
+ }
586
+ var tempFilename = path.join(destFolder, fileName);
587
+ return promises_shared_1.DummyPromise()
588
+ .then(function (result) {
589
+ if (!fileName)
590
+ return true;
591
+ return DeleteFolder(tempFilename);
592
+ }).then(function (resultDelete) {
593
+ if (!resultDelete)
594
+ throw 'Cannot delete existing file \'' + tempFilename + '\'';
595
+ return new Promise(function (resolve, reject) {
596
+ return upload(req, res, function (err) {
597
+ if (err && err.code === 'LIMIT_FILE_SIZE') {
598
+ logger.error('El archivo recibido supera el límite permitido (' + fileSizeLimit.toString() + 'bytes).');
599
+ reject('ERROR_FILE_UPLOAD_LIMIT' + '|' + (Math.round(100.00 * fileSizeLimit / 1024 / 1024) / 100.00).toString());
600
+ }
601
+ else if (err) {
602
+ logger.error('Error al subir archivo: ' + err);
603
+ reject(err);
604
+ }
605
+ else {
606
+ resolve(true);
607
+ }
608
+ });
609
+ });
610
+ });
611
+ }
612
+ exports.UploadFileToServer = UploadFileToServer;
613
+ function JoinPath(route, fileName) {
614
+ return path.join(route, fileName);
615
+ }
616
+ exports.JoinPath = JoinPath;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var url = require("url");
4
+ var jwt = require("jsonwebtoken");
5
+ var log4js = require("log4js");
6
+ var jwt_config_1 = require("../config/jwt.config");
7
+ var logger = log4js.getLogger('ServerScripts');
8
+ function GetDomainFromRequestHost(requestHost) {
9
+ var host = requestHost || '';
10
+ if (host.match(/^http:\/\//))
11
+ host = host.substring(7);
12
+ if (host.match(/^https:\/\//))
13
+ host = host.substring(8);
14
+ if (host.match(/^www\./))
15
+ host = host.substring(4);
16
+ if (!/http:/.test(host) && !/https:/.test(host))
17
+ host = 'http://' + host;
18
+ var requestDomain = url.parse(host).hostname;
19
+ return requestDomain;
20
+ }
21
+ exports.GetDomainFromRequestHost = GetDomainFromRequestHost;
22
+ function GetRequestUser(authorizationHeader) {
23
+ var session = authorizationHeader || '';
24
+ var userId;
25
+ try {
26
+ session = session.replace(/^Bearer /i, '');
27
+ if (session) {
28
+ var decoded = jwt.verify(session, jwt_config_1.JWT_SECRET);
29
+ if (decoded.userId)
30
+ userId = decoded.userId;
31
+ }
32
+ }
33
+ catch (err) {
34
+ var errMsg = (typeof err === 'string' ? err : err.message || err.description || '');
35
+ logger.error('Error al decodificar datos de la sesion: ' + errMsg);
36
+ }
37
+ return userId;
38
+ }
39
+ exports.GetRequestUser = GetRequestUser;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function DummyPromise() {
4
+ return new Promise(function (resolve, reject) {
5
+ resolve(true);
6
+ });
7
+ }
8
+ exports.DummyPromise = DummyPromise;
9
+ function SleepPromise(secondTime) {
10
+ return new Promise(function (resolve, reject) {
11
+ setTimeout(resolve, (1000 * secondTime));
12
+ });
13
+ }
14
+ exports.SleepPromise = SleepPromise;