Skip to content

Commit 067946c

Browse files
committed
Refactors PushController and FilesController to support multiple apps
1 parent 8aaf8f2 commit 067946c

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

src/Config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ function Config(applicationId, mount) {
2424

2525
this.database = DatabaseAdapter.getDatabaseConnection(applicationId);
2626
this.filesController = cacheInfo.filesController;
27-
27+
this.pushController = cacheInfo.pushController;
2828
this.oauth = cacheInfo.oauth;
29+
2930
this.mount = mount;
3031
}
3132

src/Controllers/FilesController.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ export class FilesController {
1313
this._filesAdapter = filesAdapter;
1414
}
1515

16+
static getHandler() {
17+
return (req, res) => {
18+
let config = new Config(req.params.appId);
19+
return config.filesController.getHandler()(req, res);
20+
}
21+
}
22+
1623
getHandler() {
1724
return (req, res) => {
1825
let config = new Config(req.params.appId);
@@ -30,6 +37,13 @@ export class FilesController {
3037
};
3138
}
3239

40+
static createHandler() {
41+
return (req, res, next) => {
42+
let config = req.config;
43+
return config.filesController.createHandler()(req, res, next);
44+
}
45+
}
46+
3347
createHandler() {
3448
return (req, res, next) => {
3549
if (!req.body || !req.body.length) {
@@ -50,6 +64,7 @@ export class FilesController {
5064
return;
5165
}
5266

67+
const filesController = req.config.filesController;
5368
// If a content-type is included, we'll add an extension so we can
5469
// return the same content-type.
5570
let extension = '';
@@ -60,9 +75,9 @@ export class FilesController {
6075
}
6176

6277
let filename = randomHexString(32) + '_' + req.params.filename + extension;
63-
this._filesAdapter.createFile(req.config, filename, req.body).then(() => {
78+
filesController._filesAdapter.createFile(req.config, filename, req.body).then(() => {
6479
res.status(201);
65-
var location = this._filesAdapter.getFileLocation(req.config, filename);
80+
var location = filesController._filesAdapter.getFileLocation(req.config, filename);
6681
res.set('Location', location);
6782
res.json({ url: location, name: filename });
6883
}).catch((error) => {
@@ -72,6 +87,13 @@ export class FilesController {
7287
};
7388
}
7489

90+
static deleteHandler() {
91+
return (req, res, next) => {
92+
let config = req.config;
93+
return config.filesController.deleteHandler()(req, res, next);
94+
}
95+
}
96+
7597
deleteHandler() {
7698
return (req, res, next) => {
7799
this._filesAdapter.deleteFile(req.config, req.params.filename).then(() => {
@@ -114,9 +136,9 @@ export class FilesController {
114136
}
115137
}
116138

117-
getExpressRouter() {
139+
static getExpressRouter() {
118140
let router = express.Router();
119-
router.get('/files/:appId/:filename', this.getHandler());
141+
router.get('/files/:appId/:filename', FilesController.getHandler());
120142

121143
router.post('/files', function(req, res, next) {
122144
next(new Parse.Error(Parse.Error.INVALID_FILE_NAME,
@@ -127,14 +149,14 @@ export class FilesController {
127149
Middlewares.allowCrossDomain,
128150
BodyParser.raw({type: '*/*', limit: '20mb'}),
129151
Middlewares.handleParseHeaders,
130-
this.createHandler()
152+
FilesController.createHandler()
131153
);
132154

133155
router.delete('/files/:filename',
134156
Middlewares.allowCrossDomain,
135157
Middlewares.handleParseHeaders,
136158
Middlewares.enforceMasterKeyAccess,
137-
this.deleteHandler()
159+
FilesController.deleteHandler()
138160
);
139161

140162
return router;

src/Controllers/PushController.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ export class PushController {
3131
}
3232
});
3333
}
34-
35-
getExpressRouter() {
34+
35+
static getExpressRouter() {
3636
var router = new PromiseRouter();
3737
router.route('POST','/push', (req) => {
38-
return this.handlePOST(req);
38+
return req.config.pushController.handlePOST(req);
3939
});
4040
return router;
4141
}

src/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ function ParseServer({
106106
}
107107

108108
let filesController = new FilesController(filesAdapter);
109-
109+
110110
cache.apps[appId] = {
111111
masterKey: masterKey,
112112
collectionPrefix: collectionPrefix,
@@ -119,7 +119,7 @@ function ParseServer({
119119
filesController: filesController,
120120
enableAnonymousUsers: enableAnonymousUsers,
121121
oauth: oauth,
122-
};
122+
};
123123

124124
// To maintain compatibility. TODO: Remove in v2.1
125125
if (process.env.FACEBOOK_APP_ID) {
@@ -135,7 +135,7 @@ function ParseServer({
135135
var api = express();
136136

137137
// File handling needs to be before default middlewares are applied
138-
api.use('/', filesController.getExpressRouter());
138+
api.use('/', FilesController.getExpressRouter());
139139

140140
// TODO: separate this from the regular ParseServer object
141141
if (process.env.TESTING == 1) {
@@ -156,7 +156,7 @@ function ParseServer({
156156
new InstallationsRouter().getExpressRouter(),
157157
require('./functions'),
158158
require('./schemas'),
159-
new PushController(pushAdapter).getExpressRouter(),
159+
PushController.getExpressRouter(),
160160
new LoggerController(loggerAdapter).getExpressRouter(),
161161
require('./validate_purchase')
162162
];

0 commit comments

Comments
 (0)