From f2345eb5ba43db3f09062b269c24d55dda048880 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Tue, 27 Mar 2018 16:37:52 -0300 Subject: [PATCH 1/4] Add roles and preferences to /me endpoint and remove users.roles endpoint --- packages/rocketchat-api/server/v1/misc.js | 8 +++++++- packages/rocketchat-api/server/v1/users.js | 20 -------------------- tests/end-to-end/api/00-miscellaneous.js | 2 ++ tests/end-to-end/api/01-users.js | 17 ----------------- 4 files changed, 9 insertions(+), 38 deletions(-) diff --git a/packages/rocketchat-api/server/v1/misc.js b/packages/rocketchat-api/server/v1/misc.js index 4fad6919a4304..7c66254b9a6c1 100644 --- a/packages/rocketchat-api/server/v1/misc.js +++ b/packages/rocketchat-api/server/v1/misc.js @@ -52,12 +52,18 @@ RocketChat.API.v1.addRoute('me', { authRequired: true }, { 'username', 'utcOffset', 'active', - 'language' + 'language', + 'roles', + 'settings' ]); const verifiedEmail = me.emails.find((email) => email.verified); + const preferencesDontSetUpYet = !me.settings || !me.settings.preferences; me.email = verifiedEmail ? verifiedEmail.address : undefined; + if (preferencesDontSetUpYet) { + me.settings = { preferences: {} }; + } return RocketChat.API.v1.success(me); } diff --git a/packages/rocketchat-api/server/v1/users.js b/packages/rocketchat-api/server/v1/users.js index a820a059cc62c..d8b61d7d2ca49 100644 --- a/packages/rocketchat-api/server/v1/users.js +++ b/packages/rocketchat-api/server/v1/users.js @@ -367,23 +367,3 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { return RocketChat.API.v1.success({ user: RocketChat.models.Users.findOneById(this.bodyParams.userId, { fields: preferences }) }); } }); - -/** - This API returns the logged user roles. - - Method: GET - Route: api/v1/user.roles - */ -RocketChat.API.v1.addRoute('user.roles', { authRequired: true }, { - get() { - let currentUserRoles = {}; - - const result = Meteor.runAsUser(this.userId, () => Meteor.call('getUserRoles')); - - if (Array.isArray(result) && result.length > 0) { - currentUserRoles = result[0]; - } - - return RocketChat.API.v1.success(currentUserRoles); - } -}); diff --git a/tests/end-to-end/api/00-miscellaneous.js b/tests/end-to-end/api/00-miscellaneous.js index 20d68fac21009..d655110d4c743 100644 --- a/tests/end-to-end/api/00-miscellaneous.js +++ b/tests/end-to-end/api/00-miscellaneous.js @@ -66,7 +66,9 @@ describe('miscellaneous', function() { expect(res.body).to.have.property('username', login.user); expect(res.body).to.have.property('active'); expect(res.body).to.have.property('name'); + expect(res.body).to.have.property('roles').and.to.be.an('array'); expect(res.body).to.have.nested.property('emails[0].address', adminEmail); + expect(res.body).to.have.nested.property('settings.preferences').and.to.be.an('object'); }) .end(done); }); diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index 690b542d86a57..8b5430fc3b01d 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -541,23 +541,6 @@ describe('[Users]', function() { }); }); - describe('[/user.roles]', () => { - - it('should return id and name of user, and an array of roles', (done) => { - request.get(api('user.roles')) - .set(credentials) - .expect(200) - .expect('Content-Type', 'application/json') - .expect((res) => { - expect(res.body).to.have.property('username'); - expect(res.body).to.have.property('roles').and.to.be.a('array'); - expect(res.body).to.have.property('_id'); - expect(res.body).to.have.property('success', true); - }) - .end(done); - }); - }); - describe('[/users.setPreferences]', () => { it('should set some preferences by user when execute successfully', (done) => { preferences.userId = credentials['X-User-Id']; From 5ecb7e994b994e2a7b96d7e5bd188930259e0847 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Wed, 28 Mar 2018 16:45:35 -0300 Subject: [PATCH 2/4] Revert the removed endpoint, user.roles --- packages/rocketchat-api/server/v1/misc.js | 4 ++-- packages/rocketchat-api/server/v1/users.js | 22 ++++++++++++++++++++++ tests/end-to-end/api/01-users.js | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/packages/rocketchat-api/server/v1/misc.js b/packages/rocketchat-api/server/v1/misc.js index 7c66254b9a6c1..05fee75aec6bc 100644 --- a/packages/rocketchat-api/server/v1/misc.js +++ b/packages/rocketchat-api/server/v1/misc.js @@ -58,10 +58,10 @@ RocketChat.API.v1.addRoute('me', { authRequired: true }, { ]); const verifiedEmail = me.emails.find((email) => email.verified); - const preferencesDontSetUpYet = !me.settings || !me.settings.preferences; + const userHasNotSetPreferencesYet = !me.settings || !me.settings.preferences; me.email = verifiedEmail ? verifiedEmail.address : undefined; - if (preferencesDontSetUpYet) { + if (userHasNotSetPreferencesYet) { me.settings = { preferences: {} }; } diff --git a/packages/rocketchat-api/server/v1/users.js b/packages/rocketchat-api/server/v1/users.js index d8b61d7d2ca49..c4a0cb9465b7d 100644 --- a/packages/rocketchat-api/server/v1/users.js +++ b/packages/rocketchat-api/server/v1/users.js @@ -367,3 +367,25 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { return RocketChat.API.v1.success({ user: RocketChat.models.Users.findOneById(this.bodyParams.userId, { fields: preferences }) }); } }); + +/** + DEPRECATED + // TODO: Remove this after three versions have been released. That means at 0.66 this should be gone. + This API returns the logged user roles. + + Method: GET + Route: api/v1/user.roles + */ +RocketChat.API.v1.addRoute('user.roles', { authRequired: true }, { + get() { + let currentUserRoles = {}; + + const result = Meteor.runAsUser(this.userId, () => Meteor.call('getUserRoles')); + + if (Array.isArray(result) && result.length > 0) { + currentUserRoles = result[0]; + } + + return RocketChat.API.v1.success(currentUserRoles); + } +}); diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index 8b5430fc3b01d..9d0cdb7c5a150 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -541,6 +541,25 @@ describe('[Users]', function() { }); }); + //DEPRECATED + // TODO: Remove this after three versions have been released. That means at 0.66 this should be gone. + describe('[/user.roles]', () => { + + it('should return id and name of user, and an array of roles', (done) => { + request.get(api('user.roles')) + .set(credentials) + .expect(200) + .expect('Content-Type', 'application/json') + .expect((res) => { + expect(res.body).to.have.property('username'); + expect(res.body).to.have.property('roles').and.to.be.a('array'); + expect(res.body).to.have.property('_id'); + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + }); + describe('[/users.setPreferences]', () => { it('should set some preferences by user when execute successfully', (done) => { preferences.userId = credentials['X-User-Id']; From 77490fdb232da0b24194e2db9f6539a054f4f0a6 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Wed, 28 Mar 2018 23:33:02 -0300 Subject: [PATCH 3/4] Add deprecation warning to user.roles endpoint --- packages/rocketchat-api/package.js | 1 + .../server/helpers/deprecationWarning.js | 10 ++++++++++ packages/rocketchat-api/server/v1/users.js | 10 +++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 packages/rocketchat-api/server/helpers/deprecationWarning.js diff --git a/packages/rocketchat-api/package.js b/packages/rocketchat-api/package.js index 5b0d5ffa53c2c..d1a8958f6e611 100644 --- a/packages/rocketchat-api/package.js +++ b/packages/rocketchat-api/package.js @@ -21,6 +21,7 @@ Package.onUse(function(api) { api.addFiles('server/helpers/getUserFromParams.js', 'server'); api.addFiles('server/helpers/isUserFromParams.js', 'server'); api.addFiles('server/helpers/parseJsonQuery.js', 'server'); + api.addFiles('server/helpers/deprecationWarning.js', 'server'); api.addFiles('server/helpers/getLoggedInUser.js', 'server'); //Add default routes diff --git a/packages/rocketchat-api/server/helpers/deprecationWarning.js b/packages/rocketchat-api/server/helpers/deprecationWarning.js new file mode 100644 index 0000000000000..92522e70e1d76 --- /dev/null +++ b/packages/rocketchat-api/server/helpers/deprecationWarning.js @@ -0,0 +1,10 @@ +RocketChat.API.helperMethods.set('deprecationWarning', function _deprecationWarning({ endpoint, versionWillBeRemove, response }) { + const warningMessage = `The endpoint ${ endpoint } is deprecated and will be removed after version ${ versionWillBeRemove }`; + console.warn(warningMessage); + if (process.env.NODE_ENV === 'development') { + response.warning = warningMessage; + } + + return response; +}); + diff --git a/packages/rocketchat-api/server/v1/users.js b/packages/rocketchat-api/server/v1/users.js index c4a0cb9465b7d..768bbd164ce75 100644 --- a/packages/rocketchat-api/server/v1/users.js +++ b/packages/rocketchat-api/server/v1/users.js @@ -359,7 +359,7 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { delete this.bodyParams.data.language; preferences = _.extend({ _id: userId, settings: { preferences: this.bodyParams.data }, language }); } else { - preferences = _.extend({ _id: userId, settings: { preferences: this.bodyParams.data }}); + preferences = _.extend({ _id: userId, settings: { preferences: this.bodyParams.data } }); } Meteor.runAsUser(this.userId, () => RocketChat.saveUser(this.userId, preferences)); @@ -369,7 +369,7 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { }); /** - DEPRECATED + DEPRECATED // TODO: Remove this after three versions have been released. That means at 0.66 this should be gone. This API returns the logged user roles. @@ -386,6 +386,10 @@ RocketChat.API.v1.addRoute('user.roles', { authRequired: true }, { currentUserRoles = result[0]; } - return RocketChat.API.v1.success(currentUserRoles); + return RocketChat.API.v1.success(this.deprecationWarning({ + endpoint: 'user.roles', + versionWillBeRemove: 'v0.66', + response: currentUserRoles + })); } }); From 570ad9987bb63a3d5e06db5c453c439009bf02fd Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Thu, 29 Mar 2018 14:48:45 -0300 Subject: [PATCH 4/4] Add quotes in the endpoint deprecation warning --- packages/rocketchat-api/server/helpers/deprecationWarning.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/helpers/deprecationWarning.js b/packages/rocketchat-api/server/helpers/deprecationWarning.js index 92522e70e1d76..71a6c4ec08611 100644 --- a/packages/rocketchat-api/server/helpers/deprecationWarning.js +++ b/packages/rocketchat-api/server/helpers/deprecationWarning.js @@ -1,5 +1,5 @@ RocketChat.API.helperMethods.set('deprecationWarning', function _deprecationWarning({ endpoint, versionWillBeRemove, response }) { - const warningMessage = `The endpoint ${ endpoint } is deprecated and will be removed after version ${ versionWillBeRemove }`; + const warningMessage = `The endpoint "${ endpoint }" is deprecated and will be removed after version ${ versionWillBeRemove }`; console.warn(warningMessage); if (process.env.NODE_ENV === 'development') { response.warning = warningMessage;