Migrate PushRouter to shared master-key middleware.
This commit is contained in:
@@ -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 = {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user