Refactors PushController and FilesController to support multiple apps
This commit is contained in:
@@ -24,8 +24,9 @@ function Config(applicationId, mount) {
|
|||||||
|
|
||||||
this.database = DatabaseAdapter.getDatabaseConnection(applicationId);
|
this.database = DatabaseAdapter.getDatabaseConnection(applicationId);
|
||||||
this.filesController = cacheInfo.filesController;
|
this.filesController = cacheInfo.filesController;
|
||||||
|
this.pushController = cacheInfo.pushController;
|
||||||
this.oauth = cacheInfo.oauth;
|
this.oauth = cacheInfo.oauth;
|
||||||
|
|
||||||
this.mount = mount;
|
this.mount = mount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ export class FilesController {
|
|||||||
this._filesAdapter = filesAdapter;
|
this._filesAdapter = filesAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getHandler() {
|
||||||
|
return (req, res) => {
|
||||||
|
let config = new Config(req.params.appId);
|
||||||
|
return config.filesController.getHandler()(req, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getHandler() {
|
getHandler() {
|
||||||
return (req, res) => {
|
return (req, res) => {
|
||||||
let config = new Config(req.params.appId);
|
let config = new Config(req.params.appId);
|
||||||
@@ -30,6 +37,13 @@ export class FilesController {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static createHandler() {
|
||||||
|
return (req, res, next) => {
|
||||||
|
let config = req.config;
|
||||||
|
return config.filesController.createHandler()(req, res, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
createHandler() {
|
createHandler() {
|
||||||
return (req, res, next) => {
|
return (req, res, next) => {
|
||||||
if (!req.body || !req.body.length) {
|
if (!req.body || !req.body.length) {
|
||||||
@@ -50,6 +64,7 @@ export class FilesController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const filesController = req.config.filesController;
|
||||||
// If a content-type is included, we'll add an extension so we can
|
// If a content-type is included, we'll add an extension so we can
|
||||||
// return the same content-type.
|
// return the same content-type.
|
||||||
let extension = '';
|
let extension = '';
|
||||||
@@ -60,9 +75,9 @@ export class FilesController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let filename = randomHexString(32) + '_' + req.params.filename + extension;
|
let filename = randomHexString(32) + '_' + req.params.filename + extension;
|
||||||
this._filesAdapter.createFile(req.config, filename, req.body).then(() => {
|
filesController._filesAdapter.createFile(req.config, filename, req.body).then(() => {
|
||||||
res.status(201);
|
res.status(201);
|
||||||
var location = this._filesAdapter.getFileLocation(req.config, filename);
|
var location = filesController._filesAdapter.getFileLocation(req.config, filename);
|
||||||
res.set('Location', location);
|
res.set('Location', location);
|
||||||
res.json({ url: location, name: filename });
|
res.json({ url: location, name: filename });
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
@@ -72,6 +87,13 @@ export class FilesController {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static deleteHandler() {
|
||||||
|
return (req, res, next) => {
|
||||||
|
let config = req.config;
|
||||||
|
return config.filesController.deleteHandler()(req, res, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
deleteHandler() {
|
deleteHandler() {
|
||||||
return (req, res, next) => {
|
return (req, res, next) => {
|
||||||
this._filesAdapter.deleteFile(req.config, req.params.filename).then(() => {
|
this._filesAdapter.deleteFile(req.config, req.params.filename).then(() => {
|
||||||
@@ -114,9 +136,9 @@ export class FilesController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getExpressRouter() {
|
static getExpressRouter() {
|
||||||
let router = express.Router();
|
let router = express.Router();
|
||||||
router.get('/files/:appId/:filename', this.getHandler());
|
router.get('/files/:appId/:filename', FilesController.getHandler());
|
||||||
|
|
||||||
router.post('/files', function(req, res, next) {
|
router.post('/files', function(req, res, next) {
|
||||||
next(new Parse.Error(Parse.Error.INVALID_FILE_NAME,
|
next(new Parse.Error(Parse.Error.INVALID_FILE_NAME,
|
||||||
@@ -127,14 +149,14 @@ export class FilesController {
|
|||||||
Middlewares.allowCrossDomain,
|
Middlewares.allowCrossDomain,
|
||||||
BodyParser.raw({type: '*/*', limit: '20mb'}),
|
BodyParser.raw({type: '*/*', limit: '20mb'}),
|
||||||
Middlewares.handleParseHeaders,
|
Middlewares.handleParseHeaders,
|
||||||
this.createHandler()
|
FilesController.createHandler()
|
||||||
);
|
);
|
||||||
|
|
||||||
router.delete('/files/:filename',
|
router.delete('/files/:filename',
|
||||||
Middlewares.allowCrossDomain,
|
Middlewares.allowCrossDomain,
|
||||||
Middlewares.handleParseHeaders,
|
Middlewares.handleParseHeaders,
|
||||||
Middlewares.enforceMasterKeyAccess,
|
Middlewares.enforceMasterKeyAccess,
|
||||||
this.deleteHandler()
|
FilesController.deleteHandler()
|
||||||
);
|
);
|
||||||
|
|
||||||
return router;
|
return router;
|
||||||
|
|||||||
@@ -31,11 +31,11 @@ export class PushController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getExpressRouter() {
|
static getExpressRouter() {
|
||||||
var router = new PromiseRouter();
|
var router = new PromiseRouter();
|
||||||
router.route('POST','/push', (req) => {
|
router.route('POST','/push', (req) => {
|
||||||
return this.handlePOST(req);
|
return req.config.pushController.handlePOST(req);
|
||||||
});
|
});
|
||||||
return router;
|
return router;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ function ParseServer({
|
|||||||
}
|
}
|
||||||
|
|
||||||
let filesController = new FilesController(filesAdapter);
|
let filesController = new FilesController(filesAdapter);
|
||||||
|
|
||||||
cache.apps[appId] = {
|
cache.apps[appId] = {
|
||||||
masterKey: masterKey,
|
masterKey: masterKey,
|
||||||
collectionPrefix: collectionPrefix,
|
collectionPrefix: collectionPrefix,
|
||||||
@@ -119,7 +119,7 @@ function ParseServer({
|
|||||||
filesController: filesController,
|
filesController: filesController,
|
||||||
enableAnonymousUsers: enableAnonymousUsers,
|
enableAnonymousUsers: enableAnonymousUsers,
|
||||||
oauth: oauth,
|
oauth: oauth,
|
||||||
};
|
};
|
||||||
|
|
||||||
// To maintain compatibility. TODO: Remove in v2.1
|
// To maintain compatibility. TODO: Remove in v2.1
|
||||||
if (process.env.FACEBOOK_APP_ID) {
|
if (process.env.FACEBOOK_APP_ID) {
|
||||||
@@ -135,7 +135,7 @@ function ParseServer({
|
|||||||
var api = express();
|
var api = express();
|
||||||
|
|
||||||
// File handling needs to be before default middlewares are applied
|
// File handling needs to be before default middlewares are applied
|
||||||
api.use('/', filesController.getExpressRouter());
|
api.use('/', FilesController.getExpressRouter());
|
||||||
|
|
||||||
// TODO: separate this from the regular ParseServer object
|
// TODO: separate this from the regular ParseServer object
|
||||||
if (process.env.TESTING == 1) {
|
if (process.env.TESTING == 1) {
|
||||||
@@ -156,7 +156,7 @@ function ParseServer({
|
|||||||
new InstallationsRouter().getExpressRouter(),
|
new InstallationsRouter().getExpressRouter(),
|
||||||
require('./functions'),
|
require('./functions'),
|
||||||
require('./schemas'),
|
require('./schemas'),
|
||||||
new PushController(pushAdapter).getExpressRouter(),
|
PushController.getExpressRouter(),
|
||||||
new LoggerController(loggerAdapter).getExpressRouter(),
|
new LoggerController(loggerAdapter).getExpressRouter(),
|
||||||
require('./validate_purchase')
|
require('./validate_purchase')
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user