From e8f0e8ee2c39ed1a87c430b4fa04518150385094 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Wed, 31 Aug 2016 23:59:10 -0400 Subject: [PATCH 1/4] Revert "Makes sure routes don't overlap and yield a header set error" --- src/Controllers/AnalyticsController.js | 8 +------- src/Routers/AnalyticsRouter.js | 6 ++++++ src/Routers/SessionsRouter.js | 4 +--- src/Routers/UsersRouter.js | 4 +--- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/Controllers/AnalyticsController.js b/src/Controllers/AnalyticsController.js index ea4cb1fee1..934de19418 100644 --- a/src/Controllers/AnalyticsController.js +++ b/src/Controllers/AnalyticsController.js @@ -1,8 +1,6 @@ import AdaptableController from './AdaptableController'; import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter'; -const AppOpenedEventName = 'AppOpened'; - export class AnalyticsController extends AdaptableController { appOpened(req) { return Promise.resolve().then(() => { @@ -15,12 +13,8 @@ export class AnalyticsController extends AdaptableController { } trackEvent(req) { - const eventName = req.params.eventName; - if (eventName === AppOpenedEventName) { - return this.appOpened(req); - } return Promise.resolve().then(() => { - return this.adapter.trackEvent(eventName, req.body, req); + return this.adapter.trackEvent(req.params.eventName, req.body, req); }).then((response) => { return { response: response || {} }; }).catch((err) => { diff --git a/src/Routers/AnalyticsRouter.js b/src/Routers/AnalyticsRouter.js index 74011adaf4..511781d807 100644 --- a/src/Routers/AnalyticsRouter.js +++ b/src/Routers/AnalyticsRouter.js @@ -1,6 +1,11 @@ // AnalyticsRouter.js import PromiseRouter from '../PromiseRouter'; +function appOpened(req) { + const analyticsController = req.config.analyticsController; + return analyticsController.appOpened(req); +} + function trackEvent(req) { const analyticsController = req.config.analyticsController; return analyticsController.trackEvent(req); @@ -9,6 +14,7 @@ function trackEvent(req) { export class AnalyticsRouter extends PromiseRouter { mountRoutes() { + this.route('POST','/events/AppOpened', appOpened); this.route('POST','/events/:eventName', trackEvent); } } diff --git a/src/Routers/SessionsRouter.js b/src/Routers/SessionsRouter.js index 0d47f23d6b..0b11a7c379 100644 --- a/src/Routers/SessionsRouter.js +++ b/src/Routers/SessionsRouter.js @@ -13,9 +13,6 @@ export class SessionsRouter extends ClassesRouter { } handleGet(req) { - if (req.params.objectId === 'me') { - return this.handleMe(req); - } req.params.className = '_Session'; return super.handleGet(req); } @@ -86,6 +83,7 @@ export class SessionsRouter extends ClassesRouter { } mountRoutes() { + this.route('GET','/sessions/me', req => { return this.handleMe(req); }); this.route('GET', '/sessions', req => { return this.handleFind(req); }); this.route('GET', '/sessions/:objectId', req => { return this.handleGet(req); }); this.route('POST', '/sessions', req => { return this.handleCreate(req); }); diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index d32cc30c5f..148b2f4d33 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -19,9 +19,6 @@ export class UsersRouter extends ClassesRouter { } handleGet(req) { - if (req.params.objectId === 'me') { - return this.handleMe(req); - } req.params.className = '_User'; return super.handleGet(req); } @@ -214,6 +211,7 @@ export class UsersRouter extends ClassesRouter { mountRoutes() { this.route('GET', '/users', req => { return this.handleFind(req); }); this.route('POST', '/users', req => { return this.handleCreate(req); }); + this.route('GET', '/users/me', req => { return this.handleMe(req); }); this.route('GET', '/users/:objectId', req => { return this.handleGet(req); }); this.route('PUT', '/users/:objectId', req => { return this.handleUpdate(req); }); this.route('DELETE', '/users/:objectId', req => { return this.handleDelete(req); }); From 93822e040f66962ab2c932103d62c2f4e576620c Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Thu, 1 Sep 2016 00:00:20 -0400 Subject: [PATCH 2/4] removes next() calls in PromiseRouter --- src/PromiseRouter.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/PromiseRouter.js b/src/PromiseRouter.js index f3482b6c1f..1b258bd29a 100644 --- a/src/PromiseRouter.js +++ b/src/PromiseRouter.js @@ -175,7 +175,7 @@ function makeExpressHandler(appId, promiseHandler) { if (result.text) { res.send(result.text); - return next(); + return; } if (result.location) { @@ -184,7 +184,7 @@ function makeExpressHandler(appId, promiseHandler) { // as it double encodes %encoded chars in URL if (!result.response) { res.send('Found. Redirecting to '+result.location); - return next(); + return; } } if (result.headers) { @@ -193,7 +193,6 @@ function makeExpressHandler(appId, promiseHandler) { }) } res.json(result.response); - next(); }, (e) => { log.error(`Error generating response. ${inspect(e)}`, {error: e}); next(e); From 1687c89cd9a9025b2f5cd2c29bf6f2cf8d33a8d5 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Thu, 1 Sep 2016 00:08:06 -0400 Subject: [PATCH 3/4] Reverts calling next() after response --- src/ParseServer.js | 4 ++-- src/PromiseRouter.js | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/ParseServer.js b/src/ParseServer.js index 39ded4a53b..ca87883673 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -273,7 +273,9 @@ class ParseServer { api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressRouter()); api.use(bodyParser.json({ 'type': '*/*' , limit: maxUploadSize })); + api.use(middlewares.allowCrossDomain); api.use(middlewares.allowMethodOverride); + api.use(middlewares.handleParseHeaders); let appRouter = ParseServer.promiseRouter({ appId }); api.use(appRouter.expressRouter()); @@ -322,8 +324,6 @@ class ParseServer { }, []); let appRouter = new PromiseRouter(routes, appId); - appRouter.use(middlewares.allowCrossDomain); - appRouter.use(middlewares.handleParseHeaders); batch.mountOnto(appRouter); return appRouter; diff --git a/src/PromiseRouter.js b/src/PromiseRouter.js index 1b258bd29a..b69fd9c2f7 100644 --- a/src/PromiseRouter.js +++ b/src/PromiseRouter.js @@ -39,7 +39,6 @@ export default class PromiseRouter { // location: optional. a location header constructor(routes = [], appId) { this.routes = routes; - this.middlewares = []; this.appId = appId; this.mountRoutes(); } @@ -55,10 +54,6 @@ export default class PromiseRouter { } }; - use(middleware) { - this.middlewares.push(middleware); - } - route(method, path, ...handlers) { switch(method) { case 'POST': @@ -117,8 +112,7 @@ export default class PromiseRouter { this.routes.forEach((route) => { let method = route.method.toLowerCase(); let handler = makeExpressHandler(this.appId, route.handler); - let args = [].concat(route.path, this.middlewares, handler); - expressApp[method].apply(expressApp, args); + expressApp[method].call(expressApp, route.path, handler); }); return expressApp; }; From a482019f19b3ce366abe4089a6e02e23da8131ad Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 9 Sep 2016 14:57:16 -0400 Subject: [PATCH 4/4] Adds fail calls when next() calls traverse tests --- spec/helper.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/helper.js b/spec/helper.js index c281404f06..9c3c7d7cc7 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -107,6 +107,9 @@ let openConnections = {}; var app = express(); var api = new ParseServer(defaultConfiguration); app.use('/1', api); +app.use('/1', (req, res) => { + fail('should not call next'); +}); var server = app.listen(port); server.on('connection', connection => { let key = `${connection.remoteAddress}:${connection.remotePort}`; @@ -126,7 +129,9 @@ const reconfigureServer = changedConfiguration => { api = new ParseServer(newConfiguration); api.use(require('./testing-routes').router); app.use('/1', api); - + app.use('/1', (req, res) => { + fail('should not call next'); + }); server = app.listen(port); server.on('connection', connection => { let key = `${connection.remoteAddress}:${connection.remotePort}`;