({ maxUploadSize = '20Mb' } = {})
| 87 | |
| 88 | export class FilesRouter { |
| 89 | expressRouter({ maxUploadSize = '20Mb' } = {}) { |
| 90 | var router = express.Router(); |
| 91 | // Lightweight info initializer so handleParseSession can resolve session tokens. |
| 92 | // Unlike POST/DELETE routes, GET file routes skip handleParseHeaders (which |
| 93 | // normally sets req.info) because those requests may not carry Parse headers. |
| 94 | const initInfo = (req, res, next) => { |
| 95 | if (!req.info) { |
| 96 | const sessionToken = req.get('X-Parse-Session-Token'); |
| 97 | req.info = { |
| 98 | sessionToken, |
| 99 | installationId: req.get('X-Parse-Installation-Id'), |
| 100 | }; |
| 101 | // If no session token and no auth yet (public access), set a minimal |
| 102 | // auth object so handleParseSession skips session resolution. |
| 103 | if (!sessionToken && !req.auth) { |
| 104 | req.auth = { isMaster: false }; |
| 105 | } |
| 106 | } |
| 107 | next(); |
| 108 | }; |
| 109 | // Metadata route must come before the catch-all GET route |
| 110 | router.get('/files/:appId/metadata/*filepath', initInfo, Middlewares.handleParseSession, this.metadataHandler); |
| 111 | router.get('/files/:appId/*filepath', initInfo, Middlewares.handleParseSession, this.getHandler); |
| 112 | |
| 113 | router.post('/files', function (req, res, next) { |
| 114 | next(new Parse.Error(Parse.Error.INVALID_FILE_NAME, 'Filename not provided.')); |
| 115 | }); |
| 116 | |
| 117 | router.post( |
| 118 | '/files/:filename', |
| 119 | this._earlyHeadersMiddleware(), |
| 120 | this._bodyParsingMiddleware(maxUploadSize), |
| 121 | Middlewares.handleParseHeaders, |
| 122 | Middlewares.handleParseSession, |
| 123 | this.createHandler.bind(this) |
| 124 | ); |
| 125 | |
| 126 | router.delete( |
| 127 | '/files/*filepath', |
| 128 | Middlewares.handleParseHeaders, |
| 129 | Middlewares.handleParseSession, |
| 130 | Middlewares.enforceMasterKeyAccess, |
| 131 | this.deleteHandler |
| 132 | ); |
| 133 | return router; |
| 134 | } |
| 135 | |
| 136 | static _getFilenameFromParams(req) { |
| 137 | const parts = req.params.filepath; |
nothing calls this directly
no test coverage detected