@@ -144,23 +144,13 @@ var crypto = require('crypto');
144
144
{
145
145
for ( var i = 0 ; i < res [ 0 ] . exported . length ; i ++ ) //delete exports if exist
146
146
{
147
- if ( res [ 0 ] . exported [ i ] . substr ( res [ 0 ] . exported [ i ] . length - 7 ) == ".tar.gz" )
148
- {
149
- if ( fs . existsSync ( res [ 0 ] . exported [ i ] ) ) {
150
- try { fs . unlinkSync ( res [ 0 ] . exported [ i ] ) ; } catch ( err ) { console . log ( err ) ; }
151
- }
152
- }
153
- else
154
- {
155
- if ( fs . existsSync ( res [ 0 ] . exported [ i ] ) )
156
- {
157
- fse . remove ( res [ 0 ] . exported [ i ] ,
158
- err => {
159
- if ( err ) { console . log ( err ) ; }
160
- }
161
- ) ;
162
- }
163
- }
147
+ var id = res [ 0 ] . exported [ i ] . split ( "/" ) ;
148
+ id = id . substr ( id . length - 7 ) ;
149
+
150
+ deleteMyExport ( id ) . then (
151
+ function ( res ) { } ,
152
+ function ( err ) { console . log ( err ) ; }
153
+ ) ;
164
154
}
165
155
}
166
156
//deleting userimages(if they exist);
@@ -414,6 +404,47 @@ var crypto = require('crypto');
414
404
} ;
415
405
416
406
407
+ var deleteMyExport = function ( exportID )
408
+ { //tries to delete packed file, exported folder and saved export in gridfs
409
+ //normally there should be only export in gridfs. Cleaning all to be sure.
410
+ //rejects only if there stays any saved data for export
411
+ return new Promise ( function ( resolve , reject ) {
412
+ //remove archive
413
+ errors = [ ] ;
414
+ if ( fs . existsSync ( path . resolve ( __dirname , './../../../export/AppUser/' + exportID + '.tar.gz' ) ) ) {
415
+ try { fs . unlinkSync ( path . resolve ( __dirname , './../../../export/AppUser/' + exportID + '.tar.gz' ) ) ; }
416
+ catch ( err ) { errors . push ( err ) ; }
417
+ }
418
+
419
+ countlyFs . gridfs . deleteFile ( "appUsers" , path . resolve ( __dirname , './../../../export/AppUser/' + exportID + '.tar.gz' ) , { id :exportID + '.tar.gz' } , function ( error )
420
+ {
421
+ if ( error && error . message && error . message . substring ( 0 , 12 ) != "FileNotFound" )
422
+ errors . push ( error . message ) ;
423
+ if ( fs . existsSync ( path . resolve ( __dirname , './../../../export/AppUser/' + exportID ) ) )
424
+ {
425
+ fse . remove ( path . resolve ( __dirname , './../../../export/AppUser/' + exportID ) ,
426
+ err => {
427
+ if ( err )
428
+ errors . push ( error ) ;
429
+ if ( errors . length == 0 )
430
+ resolve ( ) ;
431
+ else
432
+ reject ( errors ) ;
433
+ }
434
+ ) ;
435
+ }
436
+ else
437
+ {
438
+ if ( errors . length == 0 )
439
+ resolve ( ) ;
440
+ else
441
+ reject ( errors ) ;
442
+ }
443
+ } ) ;
444
+
445
+ } ) ;
446
+ }
447
+
417
448
usersApi . deleteExport = function ( filename , params , callback )
418
449
{
419
450
if ( filename && filename != '' )
@@ -429,25 +460,7 @@ var crypto = require('crypto');
429
460
else
430
461
{
431
462
//remove archive
432
- if ( fs . existsSync ( path . resolve ( __dirname , './../../../export/AppUser/' + base_name [ 0 ] + '.tar.gz' ) ) ) {
433
- try { fs . unlinkSync ( path . resolve ( __dirname , './../../../export/AppUser/' + base_name [ 0 ] + '.tar.gz' ) ) ; } catch ( err ) { callback ( err , "" ) ; }
434
- }
435
-
436
- new Promise ( function ( resolve , reject ) {
437
- if ( fs . existsSync ( path . resolve ( __dirname , './../../../export/AppUser/' + base_name [ 0 ] ) ) )
438
- {
439
- fse . remove ( path . resolve ( __dirname , './../../../export/AppUser/' + base_name [ 0 ] ) ,
440
- err => {
441
- if ( err )
442
- reject ( err ) ;
443
- else
444
- resolve ( ) ;
445
- }
446
- ) ;
447
- }
448
- else
449
- resolve ( ) ;
450
- } ) . then (
463
+ deleteMyExport ( base_name [ 0 ] ) . then (
451
464
function ( res )
452
465
{
453
466
if ( name_parts . length == 3 && name_parts [ 2 ] != 'HASH' )
@@ -471,9 +484,10 @@ var crypto = require('crypto');
471
484
} ,
472
485
function ( err )
473
486
{
474
- callback ( err , "" ) ;
487
+ console . log ( err ) ;
488
+ callback ( "There was some errors during deleting export. Please look in log for more information" , "" ) ;
475
489
}
476
- ) ;
490
+ ) ;
477
491
}
478
492
}
479
493
else
@@ -615,8 +629,27 @@ var crypto = require('crypto');
615
629
Promise . all ( commands ) . then (
616
630
function ( result ) {
617
631
//pack export
618
- clear_out_empty_files ( path . resolve ( __dirname , './../../../export/AppUser/' + export_filename ) )
619
- . then ( function ( ) { return run_command ( "tar -cvf " + export_filename + ".tar.gz" + " " + export_filename ) } )
632
+ clear_out_empty_files ( path . resolve ( __dirname , './../../../export/AppUser/' + export_filename ) ) //remove empty files
633
+ . then ( function ( ) { return run_command ( "tar -cvf " + export_filename + ".tar.gz" + " " + export_filename ) } ) //create archive
634
+ . then ( function ( ) {
635
+ return new Promise ( function ( resolve , reject ) { /*save export in gridFS*/
636
+ var my_filename = path . resolve ( __dirname , './../../../export/AppUser/' + export_filename + '.tar.gz' )
637
+ countlyFs . gridfs . saveFile ( "appUsers" , my_filename , my_filename , { id :export_filename + ".tar.gz" , writeMode :"overwrite" } , function ( err ) {
638
+ if ( err )
639
+ {
640
+ console . log ( err ) ;
641
+ reject ( "unable to store exported file. There is more information in log." ) ;
642
+ }
643
+ else
644
+ {
645
+ //remove archive, because it is saved in db.
646
+ try { fs . unlinkSync ( my_filename ) ; }
647
+ catch ( err ) { console . log ( err ) ; }
648
+ resolve ( ) ; //resolve anyway because export is still OK
649
+ }
650
+ } ) ;
651
+ } ) ;
652
+ } )
620
653
. then (
621
654
function ( result ) {
622
655
fse . remove ( export_folder , err => {
@@ -643,10 +676,23 @@ var crypto = require('crypto');
643
676
} ) ;
644
677
} ,
645
678
function ( error ) {
646
- plugins . dispatch ( "/systemlogs" , { params :params , action :"export_app_user" , data :{ result :"error" , uids :res [ 0 ] . uid . join ( ", " ) , app_id :app_id , info :"Error during packing exported files" , export_folder :export_folder } } ) ;
647
- callback ( { message :"Export successful. Unable to pack exported files." , filename :export_filename } , "" ) ;
679
+ plugins . dispatch ( "/systemlogs" , { params :params , action :"export_app_user" , data :{ result :"error" , uids :res [ 0 ] . uid . join ( ", " ) , app_id :app_id , info :err , export_folder :export_folder } } ) ;
680
+ usersApi . deleteExport ( export_filename , params , function ( err , msg ) {
681
+ if ( err )
682
+ callback ( { mesage :"Storing exported files failed. Unable to clean up file system." , filename :'appUser_' + app_id + '_' + eid } , "" ) ;
683
+ else
684
+ callback ( { mesage :"Storing exported files failed. Partially exported data deleted." , filename :'appUser_' + app_id + '_' + eid } , "" ) ;
685
+ } ) ;
648
686
}
649
- ) ;
687
+ ) . catch ( err => {
688
+ plugins . dispatch ( "/systemlogs" , { params :params , action :"export_app_user" , data :{ result :"error" , info :err } } ) ;
689
+ usersApi . deleteExport ( export_filename , params , function ( err , msg ) {
690
+ if ( err )
691
+ callback ( { mesage :"Storing exported files failed. Unable to clean up file system." , filename :'appUser_' + app_id + '_' + eid } , "" ) ;
692
+ else
693
+ callback ( { mesage :"Storing exported files failed. Partially exported data deleted." , filename :'appUser_' + app_id + '_' + eid } , "" ) ;
694
+ } ) ;
695
+ } ) ;
650
696
} ,
651
697
function ( error ) {
652
698
console . log ( error ) ;
0 commit comments