From c1f2f85cb2b626869f2085f779122da113df5e46 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Sat, 16 Jun 2018 11:18:27 -0500 Subject: [PATCH 1/2] first run through --- spec/ParseUser.spec.js | 32 ++++++++++++++++++++++++++++++++ src/RestQuery.js | 2 ++ src/Routers/UsersRouter.js | 19 +++++++++++++++---- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index a91ac5f8fe..b5f3bc5ac6 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -101,6 +101,38 @@ describe('Parse.User testing', () => { }); }); + fit('user login with include', (done) => { + const object = new TestObject(); + object.set('foo', 'bar'); + const user = new Parse.User(); + user.setUsername('asdf'); + user.setPassword('zxcv'); + user.set('foobaz', object); + user.signUp().then(() => { + return rp.post({ + url: 'http://localhost:8378/1/login', + headers: { + 'X-Parse-Application-Id': Parse.applicationId, + 'X-Parse-REST-API-Key': 'rest', + }, + json: { + _method: 'GET', + username: 'asdf', + password: 'zxcv', + include: 'foobaz', + } + }).then((res) => { + console.log(res); + done(); + }).catch((err) => { + console.log(err); + done(); + }); + }); + }); + + fit('empty', (done) => { done() }); + it('user login with non-string username with REST API', (done) => { Parse.User.signUp('asdf', 'zxcv', null, { success: () => { diff --git a/src/RestQuery.js b/src/RestQuery.js index 8bf8d52992..0f2a399261 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -147,6 +147,7 @@ function RestQuery(config, auth, className, restWhere = {}, restOptions = {}, cl // 'results' and 'count'. // TODO: consolidate the replaceX functions RestQuery.prototype.execute = function(executeOptions) { + console.log('executed'); return Promise.resolve().then(() => { return this.buildRestWhere(); }).then(() => { @@ -504,6 +505,7 @@ RestQuery.prototype.replaceEquality = function() { // Returns a promise for whether it was successful. // Populates this.response with an object that only has 'results'. RestQuery.prototype.runFind = function(options = {}) { + console.log(this.findOptions); if (this.findOptions.limit === 0) { this.response = {results: []}; return Promise.resolve(); diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index 2e8af00477..2f54be4f43 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -7,6 +7,7 @@ import ClassesRouter from './ClassesRouter'; import rest from '../rest'; import Auth from '../Auth'; import passwordCrypto from '../password'; +import RestQuery from '../RestQuery'; export class UsersRouter extends ClassesRouter { @@ -129,13 +130,14 @@ export class UsersRouter extends ClassesRouter { } handleMe(req) { + console.log(me); if (!req.info || !req.info.sessionToken) { throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'invalid session token'); } const sessionToken = req.info.sessionToken; return rest.find(req.config, Auth.master(req.config), '_Session', { sessionToken }, - { include: 'user' }, req.info.clientSDK) + { include: 'user,user.foobar' }, req.info.clientSDK) .then((response) => { if (!response.results || response.results.length == 0 || @@ -201,9 +203,18 @@ export class UsersRouter extends ClassesRouter { req.config.filesController.expandFilesInObject(req.config, user); return createSession(); - }) - .then(() => { - return { response: user }; + }).then(() => { + console.log(user.sessionToken); + const query = new RestQuery(req.config, Auth.master(req.config), '_User', + { sessionToken: user.sessionToken }, + { include: 'user,user.foobaz' }, req.info.clientSDK); + return query.execute(); + }).then((resp) => { + const newUser = resp.results[0].user; + newUser.sessionToken = user.sessionToken; + UsersRouter.removeHiddenProperties(newUser); + console.log(newUser); + return { response: newUser }; }); } From db6cb3cd6785c304bdf637f35ed66cf3c2041256 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Wed, 20 Jun 2018 15:24:05 -0500 Subject: [PATCH 2/2] clean up --- spec/ParseUser.spec.js | 16 +++++++--------- src/RestQuery.js | 2 -- src/Routers/UsersRouter.js | 34 +++++++++++++++++++++------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/spec/ParseUser.spec.js b/spec/ParseUser.spec.js index b5f3bc5ac6..9b56645b8e 100644 --- a/spec/ParseUser.spec.js +++ b/spec/ParseUser.spec.js @@ -101,13 +101,14 @@ describe('Parse.User testing', () => { }); }); - fit('user login with include', (done) => { + it('user login with include', (done) => { const object = new TestObject(); object.set('foo', 'bar'); const user = new Parse.User(); user.setUsername('asdf'); user.setPassword('zxcv'); user.set('foobaz', object); + user.set('foobar', object); user.signUp().then(() => { return rp.post({ url: 'http://localhost:8378/1/login', @@ -119,20 +120,17 @@ describe('Parse.User testing', () => { _method: 'GET', username: 'asdf', password: 'zxcv', - include: 'foobaz', + include: 'foobaz,foobar', } - }).then((res) => { - console.log(res); - done(); - }).catch((err) => { - console.log(err); + }).then((user) => { + equal(user.username, 'asdf'); + equal(user.foobaz.foo, 'bar'); + equal(user.foobar.foo, 'bar'); done(); }); }); }); - fit('empty', (done) => { done() }); - it('user login with non-string username with REST API', (done) => { Parse.User.signUp('asdf', 'zxcv', null, { success: () => { diff --git a/src/RestQuery.js b/src/RestQuery.js index 0f2a399261..8bf8d52992 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -147,7 +147,6 @@ function RestQuery(config, auth, className, restWhere = {}, restOptions = {}, cl // 'results' and 'count'. // TODO: consolidate the replaceX functions RestQuery.prototype.execute = function(executeOptions) { - console.log('executed'); return Promise.resolve().then(() => { return this.buildRestWhere(); }).then(() => { @@ -505,7 +504,6 @@ RestQuery.prototype.replaceEquality = function() { // Returns a promise for whether it was successful. // Populates this.response with an object that only has 'results'. RestQuery.prototype.runFind = function(options = {}) { - console.log(this.findOptions); if (this.findOptions.limit === 0) { this.response = {results: []}; return Promise.resolve(); diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index 2f54be4f43..b66627d8be 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -130,14 +130,13 @@ export class UsersRouter extends ClassesRouter { } handleMe(req) { - console.log(me); if (!req.info || !req.info.sessionToken) { throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'invalid session token'); } const sessionToken = req.info.sessionToken; return rest.find(req.config, Auth.master(req.config), '_Session', { sessionToken }, - { include: 'user,user.foobar' }, req.info.clientSDK) + { include: 'user' }, req.info.clientSDK) .then((response) => { if (!response.results || response.results.length == 0 || @@ -204,17 +203,26 @@ export class UsersRouter extends ClassesRouter { return createSession(); }).then(() => { - console.log(user.sessionToken); - const query = new RestQuery(req.config, Auth.master(req.config), '_User', - { sessionToken: user.sessionToken }, - { include: 'user,user.foobaz' }, req.info.clientSDK); - return query.execute(); - }).then((resp) => { - const newUser = resp.results[0].user; - newUser.sessionToken = user.sessionToken; - UsersRouter.removeHiddenProperties(newUser); - console.log(newUser); - return { response: newUser }; + if (!req.body.include || typeof req.body.include !== 'string') { + return Promise.resolve(); + } + const fields = ['user']; + const includes = req.body.include.split(','); + for (const field of includes) { + fields.push(`user.${field}`); + } + const query = new RestQuery(req.config, Auth.master(req.config), '_Session', + { sessionToken: user.sessionToken }, + { include: fields.join() }, req.info.clientSDK); + return query.execute().then((resp) => { + const includedUser = resp.results[0].user; + includedUser.sessionToken = user.sessionToken; + UsersRouter.removeHiddenProperties(includedUser); + user = includedUser; + return user; + }); + }).then(() => { + return { response: user }; }); }