1
1
import express from 'express' ;
2
2
import * as Middlewares from '../middlewares' ;
3
- import * as Parse from '../ClientSDK' ;
4
3
import ParseError from '../ParseError' ;
5
4
import Config from '../Config' ;
6
5
import logger from '../logger' ;
6
+ import { loadModule } from '../Adapters/AdapterLoader' ;
7
7
const triggers = require ( '../triggers' ) ;
8
8
const http = require ( 'http' ) ;
9
9
const Utils = require ( '../Utils' ) ;
@@ -80,16 +80,20 @@ export class FilesRouter {
80
80
const filesController = config . filesController ;
81
81
const mime = ( await import ( 'mime' ) ) . default ;
82
82
let contentType = mime . getType ( filename ) ;
83
- let file = new Parse . File ( filename , { base64 : '' } , contentType ) ;
84
- const triggerResult = await triggers . maybeRunFileTrigger (
85
- triggers . Types . beforeFind ,
86
- { file } ,
87
- config ,
88
- req . auth
89
- ) ;
90
- if ( triggerResult ?. file ?. _name ) {
91
- filename = triggerResult ?. file ?. _name ;
92
- contentType = mime . getType ( filename ) ;
83
+ const hasBeforeFindTrigger = triggers . triggerExists ( '@File' , triggers . Types . beforeFind , config . applicationId ) ;
84
+ if ( hasBeforeFindTrigger ) {
85
+ const Parse = await loadModule ( 'parse/node.js' ) ;
86
+ const file = new Parse . File ( filename , { base64 : '' } , contentType ) ;
87
+ const triggerResult = await triggers . maybeRunFileTrigger (
88
+ triggers . Types . beforeFind ,
89
+ { file } ,
90
+ config ,
91
+ req . auth
92
+ ) ;
93
+ if ( triggerResult ?. file ?. _name ) {
94
+ filename = triggerResult ?. file ?. _name ;
95
+ contentType = mime . getType ( filename ) ;
96
+ }
93
97
}
94
98
95
99
if ( isFileStreamable ( req , filesController ) ) {
@@ -109,19 +113,22 @@ export class FilesRouter {
109
113
if ( ! data ) {
110
114
return ;
111
115
}
112
- file = new Parse . File ( filename , { base64 : data . toString ( 'base64' ) } , contentType ) ;
113
- const afterFind = await triggers . maybeRunFileTrigger (
114
- triggers . Types . afterFind ,
115
- { file, forceDownload : false } ,
116
- config ,
117
- req . auth
118
- ) ;
119
-
116
+ const hasAfterFindHook = triggers . triggerExists ( '@File' , triggers . Types . afterFind , config . applicationId ) ;
117
+ let afterFind ;
118
+ if ( hasAfterFindHook ) {
119
+ const Parse = await loadModule ( 'parse/node.js' ) ;
120
+ const file = new Parse . File ( filename , { base64 : data . toString ( 'base64' ) } , contentType ) ;
121
+ afterFind = await triggers . maybeRunFileTrigger (
122
+ triggers . Types . afterFind ,
123
+ { file, forceDownload : false } ,
124
+ config ,
125
+ req . auth
126
+ ) ;
127
+ }
120
128
if ( afterFind ?. file ) {
121
129
contentType = mime . getType ( afterFind . file . _name ) ;
122
130
data = Buffer . from ( afterFind . file . _data , 'base64' ) ;
123
131
}
124
-
125
132
res . status ( 200 ) ;
126
133
res . set ( 'Content-Type' , contentType ) ;
127
134
res . set ( 'Content-Length' , data . length ) ;
@@ -211,6 +218,8 @@ export class FilesRouter {
211
218
}
212
219
213
220
const base64 = req . body . toString ( 'base64' ) ;
221
+ // TODO: Move to beforeSave trigger check
222
+ const Parse = await loadModule ( 'parse/node.js' ) ;
214
223
const file = new Parse . File ( filename , { base64 } , contentType ) ;
215
224
const { metadata = { } , tags = { } } = req . fileData || { } ;
216
225
try {
@@ -299,19 +308,23 @@ export class FilesRouter {
299
308
try {
300
309
const { filesController } = req . config ;
301
310
const { filename } = req . params ;
302
- // run beforeDeleteFile trigger
303
- const file = new Parse . File ( filename ) ;
304
- file . _url = await filesController . adapter . getFileLocation ( req . config , filename ) ;
305
- const fileObject = { file, fileSize : null } ;
306
- await triggers . maybeRunFileTrigger (
307
- triggers . Types . beforeDelete ,
308
- fileObject ,
309
- req . config ,
310
- req . auth
311
- ) ;
312
- // delete file
311
+ const fileObject = { file : null , fileSize : null } ;
312
+
313
+ const hasBeforeDeleteHook = triggers . triggerExists ( '@File' , triggers . Types . beforeDelete , req . config . applicationId ) ;
314
+ if ( hasBeforeDeleteHook ) {
315
+ const Parse = await loadModule ( 'parse/node.js' ) ;
316
+ const file = new Parse . File ( filename ) ;
317
+ file . _url = await filesController . adapter . getFileLocation ( req . config , filename ) ;
318
+ fileObject . file = file ;
319
+ await triggers . maybeRunFileTrigger (
320
+ triggers . Types . beforeDelete ,
321
+ fileObject ,
322
+ req . config ,
323
+ req . auth
324
+ ) ;
325
+ }
313
326
await filesController . deleteFile ( req . config , filename ) ;
314
- // run afterDeleteFile trigger
327
+
315
328
await triggers . maybeRunFileTrigger (
316
329
triggers . Types . afterDelete ,
317
330
fileObject ,
0 commit comments