File tree Expand file tree Collapse file tree 4 files changed +52
-0
lines changed Expand file tree Collapse file tree 4 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 1414export  class  FilesAdapter  { 
1515  createFile ( config ,  filename ,  data )  {  } 
1616
17+   deleteFile ( config ,  filename )  {  } 
18+ 
1719  getFileData ( config ,  filename )  {  } 
1820
1921  getFileLocation ( config ,  filename )  {  } 
Original file line number Diff line number Diff line change @@ -20,6 +20,17 @@ export class GridStoreAdapter extends FilesAdapter {
2020    } ) ; 
2121  } 
2222
23+   deleteFile ( config ,  filename )  { 
24+     return  config . database . connect ( ) . then ( ( )  =>  { 
25+       let  gridStore  =  new  GridStore ( config . database . db ,  filename ,  'r' ) ; 
26+       return  gridStore . open ( ) ; 
27+     } ) . then ( ( gridStore )  =>  { 
28+       return  gridStore . unlink ( ) ; 
29+     } ) . then ( ( gridStore )  =>  { 
30+       return  gridStore . close ( ) ; 
31+     } ) ; 
32+   } 
33+ 
2334  getFileData ( config ,  filename )  { 
2435    return  config . database . connect ( ) . then ( ( )  =>  { 
2536      return  GridStore . exist ( config . database . db ,  filename ) ; 
Original file line number Diff line number Diff line change @@ -56,6 +56,20 @@ export class S3Adapter extends FilesAdapter {
5656    } ) ; 
5757  } 
5858
59+   deleteFile ( config ,  filename )  { 
60+     return  new  Promise ( ( resolve ,  reject )  =>  { 
61+       let  params  =  { 
62+         Key : this . _bucketPrefix  +  filename , 
63+       } ; 
64+       this . _s3Client . deleteObject ( params ,  ( err ,  data )  => { 
65+         if ( err  !==  null )  { 
66+           return  reject ( err ) ; 
67+         } 
68+         resolve ( data ) ; 
69+       } ) ; 
70+     } ) ; 
71+   } 
72+ 
5973  // Search for and return a file if found by filename 
6074  // Returns a promise that succeeds with the buffer result from S3 
6175  getFileData ( config ,  filename )  { 
Original file line number Diff line number Diff line change @@ -74,6 +74,25 @@ export class FilesController {
7474    } ; 
7575  } 
7676
77+   deleteHandler ( )  { 
78+     return  ( req ,  res ,  next )  =>  { 
79+       if ( ! req . auth . isMaster ) { 
80+         next ( new  Parse . Error ( Parse . Error . OPERATION_FORBIDDEN , 
81+           'Master key required for file deletion.' ) ) ; 
82+         return ; 
83+       } 
84+ 
85+       this . _filesAdapter . deleteFile ( req . config ,  req . params . filename ) . then ( ( )  =>  { 
86+         res . status ( 200 ) ; 
87+         // TODO: return useful JSON here? 
88+         res . end ( ) ; 
89+       } ) . catch ( ( error )  =>  { 
90+         next ( new  Parse . Error ( Parse . Error . FILE_DELETE_ERROR , 
91+           'Could not delete file.' ) ) ; 
92+       } ) ; 
93+     } ; 
94+   } 
95+ 
7796  /** 
7897   * Find file references in REST-format object and adds the url key 
7998   * with the current mount point and app id. 
@@ -119,6 +138,12 @@ export class FilesController {
119138      this . createHandler ( ) 
120139    ) ; 
121140
141+     router . delete ( '/files/:filename' , 
142+       Middlewares . allowCrossDomain , 
143+       Middlewares . handleParseHeaders , 
144+       this . deleteHandler ( ) 
145+     ) ; 
146+ 
122147    return  router ; 
123148  } 
124149} 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments