From bc96f0beb1d17d8d4a5a7c543f378e71ca5248ca Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Thu, 7 Apr 2016 18:08:09 -0400 Subject: [PATCH] Adds X-Parse-Push-Status-Id header (#1412) * Adds X-Parse-Push-Status-Id header * Waits for _PushStatus to be stored --- spec/PushRouter.spec.js | 7 +++++-- src/Controllers/PushController.js | 3 ++- src/PromiseRouter.js | 5 +++++ src/Routers/PushRouter.js | 19 ++++++++++++++----- src/pushStatusHandler.js | 5 +++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/spec/PushRouter.spec.js b/spec/PushRouter.spec.js index d71f9f5c..9be3137a 100644 --- a/spec/PushRouter.spec.js +++ b/spec/PushRouter.spec.js @@ -67,7 +67,7 @@ describe('PushRouter', () => { }).toThrow(); done(); }); - + it('sends a push through REST', (done) => { request.post({ url: Parse.serverURL+"/push", @@ -82,8 +82,11 @@ describe('PushRouter', () => { 'X-Parse-Master-Key': Parse.masterKey } }, function(err, res, body){ + expect(res.headers['x-parse-push-status-id']).not.toBe(undefined); + expect(res.headers['x-parse-push-status-id'].length).toBe(10); + expect(res.headers['']) expect(body.result).toBe(true); done(); }); }); -}); \ No newline at end of file +}); diff --git a/src/Controllers/PushController.js b/src/Controllers/PushController.js index 8a5f8641..a2ac327e 100644 --- a/src/Controllers/PushController.js +++ b/src/Controllers/PushController.js @@ -38,7 +38,7 @@ export class PushController extends AdaptableController { return !!this.adapter; } - sendPush(body = {}, where = {}, config, auth, wait) { + sendPush(body = {}, where = {}, config, auth, onPushStatusSaved = () => {}) { var pushAdapter = this.adapter; if (!this.pushIsAvailable) { throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED, @@ -84,6 +84,7 @@ export class PushController extends AdaptableController { return Promise.resolve().then(() => { return pushStatus.setInitial(body, where); }).then(() => { + onPushStatusSaved(pushStatus.objectId); return badgeUpdate(); }).then(() => { return rest.find(config, auth, '_Installation', where); diff --git a/src/PromiseRouter.js b/src/PromiseRouter.js index aa7cc883..099b2474 100644 --- a/src/PromiseRouter.js +++ b/src/PromiseRouter.js @@ -178,6 +178,11 @@ function makeExpressHandler(promiseHandler) { return res.send('Found. Redirecting to '+result.location); } } + if (result.headers) { + Object.keys(result.headers).forEach((header) => { + res.set(header, result.headers[header]); + }) + } res.json(result.response); }, (e) => { log.verbose('error:', e); diff --git a/src/Routers/PushRouter.js b/src/Routers/PushRouter.js index babbeb27..08a633fd 100644 --- a/src/Routers/PushRouter.js +++ b/src/Routers/PushRouter.js @@ -15,12 +15,21 @@ export class PushRouter extends PromiseRouter { } let where = PushRouter.getQueryCondition(req); - pushController.sendPush(req.body, where, req.config, req.auth); - return Promise.resolve({ - response: { - 'result': true - } + let resolve; + let promise = new Promise((_resolve) => { + resolve = _resolve; }); + pushController.sendPush(req.body, where, req.config, req.auth, (pushStatusId) => { + resolve({ + headers: { + 'X-Parse-Push-Status-Id': pushStatusId + }, + response: { + result: true + } + }); + }); + return promise; } /** diff --git a/src/pushStatusHandler.js b/src/pushStatusHandler.js index 593942e5..833d7855 100644 --- a/src/pushStatusHandler.js +++ b/src/pushStatusHandler.js @@ -16,7 +16,7 @@ export default function pushStatusHandler(config) { let initialPromise; let pushStatus; - + let objectId = newObjectId(); let collection = function() { return config.database.adaptiveCollection('_PushStatus'); } @@ -25,7 +25,7 @@ export default function pushStatusHandler(config) { let now = new Date(); let data = body.data || {}; let object = { - objectId: newObjectId(), + objectId, pushTime: now.toISOString(), _created_at: now, query: JSON.stringify(where), @@ -111,6 +111,7 @@ export default function pushStatusHandler(config) { } return Object.freeze({ + objectId, setInitial, setRunning, complete,