Migrate PushRouter to shared master-key middleware.

This commit is contained in:
Nikita Lutsenko
2016-03-07 14:23:05 -08:00
parent f2ead46580
commit 47061d8e98
2 changed files with 18 additions and 68 deletions

View File

@@ -2,40 +2,6 @@ var PushRouter = require('../src/Routers/PushRouter').PushRouter;
var request = require('request'); var request = require('request');
describe('PushRouter', () => { describe('PushRouter', () => {
it('can check valid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKey'
}
}
expect(() => {
PushRouter.validateMasterKey(request);
}).not.toThrow();
done();
});
it('can check invalid master key of request', (done) => {
// Make mock request
var request = {
info: {
masterKey: 'masterKey'
},
config: {
masterKey: 'masterKeyAgain'
}
}
expect(() => {
PushRouter.validateMasterKey(request);
}).toThrow();
done();
});
it('can get query condition when channels is set', (done) => { it('can get query condition when channels is set', (done) => {
// Make mock request // Make mock request
var request = { var request = {

View File

@@ -1,57 +1,42 @@
import PushController from '../Controllers/PushController'
import PromiseRouter from '../PromiseRouter'; import PromiseRouter from '../PromiseRouter';
import * as middleware from "../middlewares";
import { Parse } from "parse/node";
export class PushRouter extends PromiseRouter { export class PushRouter extends PromiseRouter {
mountRoutes() { mountRoutes() {
this.route("POST", "/push", req => { return this.handlePOST(req); }); this.route("POST", "/push", middleware.promiseEnforceMasterKeyAccess, PushRouter.handlePOST);
}
/**
* Check whether the api call has master key or not.
* @param {Object} request A request object
*/
static validateMasterKey(req) {
if (req.info.masterKey !== req.config.masterKey) {
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
'Master key is invalid, you should only use master key to send push');
}
} }
handlePOST(req) { static handlePOST(req) {
// TODO: move to middlewares when support for Promise middlewares
PushRouter.validateMasterKey(req);
const pushController = req.config.pushController; const pushController = req.config.pushController;
if (!pushController) { if (!pushController) {
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, 'Push controller is not set');
'Push controller is not set');
} }
var where = PushRouter.getQueryCondition(req); let where = PushRouter.getQueryCondition(req);
pushController.sendPush(req.body, where, req.config, req.auth); pushController.sendPush(req.body, where, req.config, req.auth);
return Promise.resolve({ return Promise.resolve({
response: { response: {
'result': true 'result': true
} }
}); });
} }
/** /**
* Get query condition from the request body. * Get query condition from the request body.
* @param {Object} request A request object * @param {Object} req A request object
* @returns {Object} The query condition, the where field in a query api call * @returns {Object} The query condition, the where field in a query api call
*/ */
static getQueryCondition(req) { static getQueryCondition(req) {
var body = req.body || {}; let body = req.body || {};
var hasWhere = typeof body.where !== 'undefined'; let hasWhere = typeof body.where !== 'undefined';
var hasChannels = typeof body.channels !== 'undefined'; let hasChannels = typeof body.channels !== 'undefined';
var where; let where;
if (hasWhere && hasChannels) { if (hasWhere && hasChannels) {
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
'Channels and query can not be set at the same time.'); 'Channels and query can not be set at the same time.');
} else if (hasWhere) { } else if (hasWhere) {
where = body.where; where = body.where;
} else if (hasChannels) { } else if (hasChannels) {
@@ -62,11 +47,10 @@ export class PushRouter extends PromiseRouter {
} }
} else { } else {
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
'Channels and query should be set at least one.'); 'Channels and query should be set at least one.');
} }
return where; return where;
} }
} }
export default PushRouter; export default PushRouter;