From 4c262df4afa9fac6c801f3daefd9bbdb2d939b72 Mon Sep 17 00:00:00 2001 From: Omair Vaiyani Date: Tue, 30 Jun 2020 14:01:28 +0100 Subject: [PATCH 1/5] fix(direct-access): save context not present if direct access enabled [Open discussion](https://github.com/parse-community/parse-server/issues/6459) for feature with other issues --- src/ParseServerRESTController.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 1f70503010..dbe0cfa76c 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -101,7 +101,10 @@ function ParseServerRESTController(applicationId, router) { return new Promise((resolve, reject) => { getAuth(options, config).then(auth => { const request = { - body: data, + body: { + ...data, + _context: options.context + }, config, auth, info: { From 3b316f8087952481694270a04d753488d15a6602 Mon Sep 17 00:00:00 2001 From: Omair Vaiyani Date: Tue, 30 Jun 2020 15:28:00 +0100 Subject: [PATCH 2/5] only send context when present --- src/ParseServerRESTController.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index dbe0cfa76c..315b48cadc 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -99,12 +99,18 @@ function ParseServerRESTController(applicationId, router) { } return new Promise((resolve, reject) => { + let body = data; + + if (options.context !== null && typeof options.context === 'object') { + body = _objectSpread({}, data, { + _context: options.context + }); + delete options.context; + } + getAuth(options, config).then(auth => { const request = { - body: { - ...data, - _context: options.context - }, + body, config, auth, info: { From ef4122cfb13917dd09b32aaeb32adae9ff1aa4c9 Mon Sep 17 00:00:00 2001 From: Omair Vaiyani Date: Tue, 30 Jun 2020 15:29:22 +0100 Subject: [PATCH 3/5] use object spread --- src/ParseServerRESTController.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 315b48cadc..61ed6dee96 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -102,9 +102,10 @@ function ParseServerRESTController(applicationId, router) { let body = data; if (options.context !== null && typeof options.context === 'object') { - body = _objectSpread({}, data, { - _context: options.context - }); + body = { + ...data, + _context: options.context, + }; delete options.context; } From 16f79420a5cd2eded4f3163074296dbf37fb88e6 Mon Sep 17 00:00:00 2001 From: dplewis Date: Thu, 16 Jul 2020 22:27:44 -0500 Subject: [PATCH 4/5] revert and add test --- spec/ParseServerRESTController.spec.js | 22 +++++++++++++++++++--- src/ParseServerRESTController.js | 12 +----------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index b3b8ea36f3..9225992990 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -161,9 +161,9 @@ describe('ParseServerRESTController', () => { expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toBe( databaseAdapter.createObject.calls.argsFor(1)[3] ); - expect(results.map(result => result.get('key')).sort()).toEqual( - ['value1', 'value2'] - ); + expect( + results.map(result => result.get('key')).sort() + ).toEqual(['value1', 'value2']); done(); }); }); @@ -517,6 +517,22 @@ describe('ParseServerRESTController', () => { }); }); + it('should handle a POST request', async () => { + Parse.Cloud.beforeSave('MyObject', req => { + expect(req.context.a).toEqual('a'); + }); + Parse.Cloud.afterSave('MyObject', req => { + expect(req.context.a).toEqual('a'); + }); + + await RESTController.request( + 'POST', + '/classes/MyObject', + { key: 'value' }, + { context: { a: 'a' } } + ); + }); + it('ensures sessionTokens are properly handled', done => { let userId; Parse.User.signUp('user', 'pass') diff --git a/src/ParseServerRESTController.js b/src/ParseServerRESTController.js index 0f2d22a901..1c6087c237 100644 --- a/src/ParseServerRESTController.js +++ b/src/ParseServerRESTController.js @@ -99,19 +99,9 @@ function ParseServerRESTController(applicationId, router) { } return new Promise((resolve, reject) => { - let body = data; - - if (options.context !== null && typeof options.context === 'object') { - body = { - ...data, - _context: options.context, - }; - delete options.context; - } - getAuth(options, config).then(auth => { const request = { - body, + body: data, config, auth, info: { From c0508e9cc6a4927fd7f88a8ca2d417e5f419933b Mon Sep 17 00:00:00 2001 From: dplewis Date: Thu, 16 Jul 2020 22:30:12 -0500 Subject: [PATCH 5/5] rename test --- spec/ParseServerRESTController.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/ParseServerRESTController.spec.js b/spec/ParseServerRESTController.spec.js index 9225992990..3e02cde71c 100644 --- a/spec/ParseServerRESTController.spec.js +++ b/spec/ParseServerRESTController.spec.js @@ -517,7 +517,7 @@ describe('ParseServerRESTController', () => { }); }); - it('should handle a POST request', async () => { + it('should handle a POST request with context', async () => { Parse.Cloud.beforeSave('MyObject', req => { expect(req.context.a).toEqual('a'); });