@@ -5,6 +5,7 @@ import Config from '../Config';
55import logger from '../logger' ;
66const triggers = require ( '../triggers' ) ;
77const Utils = require ( '../Utils' ) ;
8+ const auth = require ( '../Auth' ) ;
89import { Readable } from 'stream' ;
910import { createSanitizedHttpError } from '../Error' ;
1011
@@ -120,6 +121,22 @@ export class FilesRouter {
120121 return Array . isArray ( parts ) ? parts . join ( '/' ) : parts ;
121122 }
122123
124+ static async _resolveAuth ( req , config ) {
125+ const sessionToken = req . get ( 'X-Parse-Session-Token' ) ;
126+ if ( ! sessionToken ) {
127+ return null ;
128+ }
129+ try {
130+ return await auth . getAuthForSessionToken ( {
131+ config,
132+ sessionToken,
133+ installationId : req . get ( 'X-Parse-Installation-Id' ) ,
134+ } ) ;
135+ } catch {
136+ return null ;
137+ }
138+ }
139+
123140 static validateDirectory ( directory ) {
124141 if ( typeof directory !== 'string' ) {
125142 return new Parse . Error ( Parse . Error . INVALID_FILE_NAME , 'Directory must be a string.' ) ;
@@ -177,11 +194,12 @@ export class FilesRouter {
177194 const mime = ( await import ( 'mime' ) ) . default ;
178195 let contentType = mime . getType ( filename ) ;
179196 let file = new Parse . File ( filename , { base64 : '' } , contentType ) ;
197+ const fileAuth = await FilesRouter . _resolveAuth ( req , config ) ;
180198 const triggerResult = await triggers . maybeRunFileTrigger (
181199 triggers . Types . beforeFind ,
182200 { file } ,
183201 config ,
184- req . auth
202+ fileAuth
185203 ) ;
186204 if ( triggerResult ?. file ?. _name ) {
187205 filename = triggerResult ?. file ?. _name ;
@@ -191,6 +209,12 @@ export class FilesRouter {
191209 const defaultResponseHeaders = { 'X-Content-Type-Options' : 'nosniff' } ;
192210
193211 if ( isFileStreamable ( req , filesController ) ) {
212+ await triggers . maybeRunFileTrigger (
213+ triggers . Types . afterFind ,
214+ { file, forceDownload : false , responseHeaders : { ...defaultResponseHeaders } } ,
215+ config ,
216+ fileAuth
217+ ) ;
194218 for ( const [ key , value ] of Object . entries ( defaultResponseHeaders ) ) {
195219 res . set ( key , value ) ;
196220 }
@@ -215,7 +239,7 @@ export class FilesRouter {
215239 triggers . Types . afterFind ,
216240 { file, forceDownload : false , responseHeaders : { ...defaultResponseHeaders } } ,
217241 config ,
218- req . auth
242+ fileAuth
219243 ) ;
220244
221245 if ( afterFind ?. file ) {
@@ -736,11 +760,12 @@ export class FilesRouter {
736760 const { filesController } = config ;
737761 let filename = FilesRouter . _getFilenameFromParams ( req ) ;
738762 const file = new Parse . File ( filename , { base64 : '' } ) ;
763+ const fileAuth = await FilesRouter . _resolveAuth ( req , config ) ;
739764 const triggerResult = await triggers . maybeRunFileTrigger (
740765 triggers . Types . beforeFind ,
741766 { file } ,
742767 config ,
743- req . auth
768+ fileAuth
744769 ) ;
745770 if ( triggerResult ?. file ?. _name ) {
746771 filename = triggerResult . file . _name ;
@@ -756,7 +781,7 @@ export class FilesRouter {
756781 triggers . Types . afterFind ,
757782 { file } ,
758783 config ,
759- req . auth
784+ fileAuth
760785 ) ;
761786 res . status ( 200 ) ;
762787 res . json ( data ) ;
0 commit comments