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..71a6c4ec08611 --- /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/misc.js b/packages/rocketchat-api/server/v1/misc.js index 4fad6919a4304..05fee75aec6bc 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 userHasNotSetPreferencesYet = !me.settings || !me.settings.preferences; me.email = verifiedEmail ? verifiedEmail.address : undefined; + if (userHasNotSetPreferencesYet) { + 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..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,10 +369,12 @@ RocketChat.API.v1.addRoute('users.setPreferences', { authRequired: true }, { }); /** - This API returns the logged user roles. + 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 + Method: GET + Route: api/v1/user.roles */ RocketChat.API.v1.addRoute('user.roles', { authRequired: true }, { get() { @@ -384,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 + })); } }); 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..9d0cdb7c5a150 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -541,6 +541,8 @@ 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) => {