From a35cb3a0a07ef5bf59d7a466e6569b39025cfb3e Mon Sep 17 00:00:00 2001 From: ThomasRoehl Date: Tue, 20 Mar 2018 13:32:40 +0100 Subject: [PATCH 1/3] edited settings-api to execute button event --- packages/rocketchat-api/server/v1/settings.js | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/packages/rocketchat-api/server/v1/settings.js b/packages/rocketchat-api/server/v1/settings.js index 3662ba1485303..ef3cb6004f33f 100644 --- a/packages/rocketchat-api/server/v1/settings.js +++ b/packages/rocketchat-api/server/v1/settings.js @@ -1,23 +1,23 @@ import _ from 'underscore'; // settings endpoints -RocketChat.API.v1.addRoute('settings.public', { authRequired: false }, { +RocketChat.API.v1.addRoute('settings.public', {authRequired: false}, { get() { - const { offset, count } = this.getPaginationItems(); - const { sort, fields, query } = this.parseJsonQuery(); + const {offset, count} = this.getPaginationItems(); + const {sort, fields, query} = this.parseJsonQuery(); let ourQuery = { - hidden: { $ne: true }, + hidden: {$ne: true}, 'public': true }; ourQuery = Object.assign({}, query, ourQuery); const settings = RocketChat.models.Settings.find(ourQuery, { - sort: sort ? sort : { _id: 1 }, + sort: sort ? sort : {_id: 1}, skip: offset, limit: count, - fields: Object.assign({ _id: 1, value: 1 }, fields) + fields: Object.assign({_id: 1, value: 1}, fields) }).fetch(); return RocketChat.API.v1.success({ @@ -29,13 +29,13 @@ RocketChat.API.v1.addRoute('settings.public', { authRequired: false }, { } }); -RocketChat.API.v1.addRoute('settings', { authRequired: true }, { +RocketChat.API.v1.addRoute('settings', {authRequired: true}, { get() { - const { offset, count } = this.getPaginationItems(); - const { sort, fields, query } = this.parseJsonQuery(); + const {offset, count} = this.getPaginationItems(); + const {sort, fields, query} = this.parseJsonQuery(); let ourQuery = { - hidden: { $ne: true } + hidden: {$ne: true} }; if (!RocketChat.authz.hasPermission(this.userId, 'view-privileged-setting')) { @@ -45,10 +45,10 @@ RocketChat.API.v1.addRoute('settings', { authRequired: true }, { ourQuery = Object.assign({}, query, ourQuery); const settings = RocketChat.models.Settings.find(ourQuery, { - sort: sort ? sort : { _id: 1 }, + sort: sort ? sort : {_id: 1}, skip: offset, limit: count, - fields: Object.assign({ _id: 1, value: 1 }, fields) + fields: Object.assign({_id: 1, value: 1}, fields) }).fetch(); return RocketChat.API.v1.success({ @@ -60,7 +60,7 @@ RocketChat.API.v1.addRoute('settings', { authRequired: true }, { } }); -RocketChat.API.v1.addRoute('settings/:_id', { authRequired: true }, { +RocketChat.API.v1.addRoute('settings/:_id', {authRequired: true}, { get() { if (!RocketChat.authz.hasPermission(this.userId, 'view-privileged-setting')) { return RocketChat.API.v1.unauthorized(); @@ -73,10 +73,24 @@ RocketChat.API.v1.addRoute('settings/:_id', { authRequired: true }, { return RocketChat.API.v1.unauthorized(); } + // allow special handling of particular setting types + const setting = RocketChat.models.Settings.findOneNotHiddenById(this.urlParams._id); + if (setting.type === 'action' && this.bodyParams && this.bodyParams.execute) { + //execute the configured method + Meteor.defer(() => Meteor.call(setting.value)); + + return RocketChat.API.v1.success(); // we triggered the method - we won't wait for completion + } + + if (setting.type === 'color' && this.bodyParams && this.bodyParams.editor && this.bodyParams.value) { + RocketChat.models.Settings.updateOptionsById(this.urlParams._id, {editor: this.bodyParams.editor}); + RocketChat.models.Settings.updateValueNotHiddenById(this.urlParams._id, this.bodyParams.value); + return RocketChat.API.v1.success(); + } + check(this.bodyParams, { value: Match.Any }); - if (RocketChat.models.Settings.updateValueNotHiddenById(this.urlParams._id, this.bodyParams.value)) { return RocketChat.API.v1.success(); } @@ -85,7 +99,7 @@ RocketChat.API.v1.addRoute('settings/:_id', { authRequired: true }, { } }); -RocketChat.API.v1.addRoute('service.configurations', { authRequired: false }, { +RocketChat.API.v1.addRoute('service.configurations', {authRequired: false}, { get() { const ServiceConfiguration = Package['service-configuration'].ServiceConfiguration; From e978a2d42769547a1f6d8079de1719d809f24a8b Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Wed, 9 May 2018 13:31:55 -0300 Subject: [PATCH 2/3] FIx identation and defer await --- packages/rocketchat-api/server/v1/settings.js | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/rocketchat-api/server/v1/settings.js b/packages/rocketchat-api/server/v1/settings.js index ef3cb6004f33f..2641eb626320d 100644 --- a/packages/rocketchat-api/server/v1/settings.js +++ b/packages/rocketchat-api/server/v1/settings.js @@ -1,23 +1,23 @@ import _ from 'underscore'; // settings endpoints -RocketChat.API.v1.addRoute('settings.public', {authRequired: false}, { +RocketChat.API.v1.addRoute('settings.public', { authRequired: false }, { get() { - const {offset, count} = this.getPaginationItems(); - const {sort, fields, query} = this.parseJsonQuery(); + const { offset, count } = this.getPaginationItems(); + const { sort, fields, query } = this.parseJsonQuery(); let ourQuery = { - hidden: {$ne: true}, + hidden: { $ne: true }, 'public': true }; ourQuery = Object.assign({}, query, ourQuery); const settings = RocketChat.models.Settings.find(ourQuery, { - sort: sort ? sort : {_id: 1}, + sort: sort ? sort : { _id: 1 }, skip: offset, limit: count, - fields: Object.assign({_id: 1, value: 1}, fields) + fields: Object.assign({ _id: 1, value: 1 }, fields) }).fetch(); return RocketChat.API.v1.success({ @@ -29,13 +29,13 @@ RocketChat.API.v1.addRoute('settings.public', {authRequired: false}, { } }); -RocketChat.API.v1.addRoute('settings', {authRequired: true}, { +RocketChat.API.v1.addRoute('settings', { authRequired: true }, { get() { - const {offset, count} = this.getPaginationItems(); - const {sort, fields, query} = this.parseJsonQuery(); + const { offset, count } = this.getPaginationItems(); + const { sort, fields, query } = this.parseJsonQuery(); let ourQuery = { - hidden: {$ne: true} + hidden: { $ne: true } }; if (!RocketChat.authz.hasPermission(this.userId, 'view-privileged-setting')) { @@ -45,10 +45,10 @@ RocketChat.API.v1.addRoute('settings', {authRequired: true}, { ourQuery = Object.assign({}, query, ourQuery); const settings = RocketChat.models.Settings.find(ourQuery, { - sort: sort ? sort : {_id: 1}, + sort: sort ? sort : { _id: 1 }, skip: offset, limit: count, - fields: Object.assign({_id: 1, value: 1}, fields) + fields: Object.assign({ _id: 1, value: 1 }, fields) }).fetch(); return RocketChat.API.v1.success({ @@ -60,7 +60,7 @@ RocketChat.API.v1.addRoute('settings', {authRequired: true}, { } }); -RocketChat.API.v1.addRoute('settings/:_id', {authRequired: true}, { +RocketChat.API.v1.addRoute('settings/:_id', { authRequired: true }, { get() { if (!RocketChat.authz.hasPermission(this.userId, 'view-privileged-setting')) { return RocketChat.API.v1.unauthorized(); @@ -77,13 +77,14 @@ RocketChat.API.v1.addRoute('settings/:_id', {authRequired: true}, { const setting = RocketChat.models.Settings.findOneNotHiddenById(this.urlParams._id); if (setting.type === 'action' && this.bodyParams && this.bodyParams.execute) { //execute the configured method - Meteor.defer(() => Meteor.call(setting.value)); - - return RocketChat.API.v1.success(); // we triggered the method - we won't wait for completion + Meteor.defer(() => { + Meteor.call(setting.value); + return RocketChat.API.v1.success(); + }); } if (setting.type === 'color' && this.bodyParams && this.bodyParams.editor && this.bodyParams.value) { - RocketChat.models.Settings.updateOptionsById(this.urlParams._id, {editor: this.bodyParams.editor}); + RocketChat.models.Settings.updateOptionsById(this.urlParams._id, { editor: this.bodyParams.editor }); RocketChat.models.Settings.updateValueNotHiddenById(this.urlParams._id, this.bodyParams.value); return RocketChat.API.v1.success(); } @@ -99,12 +100,12 @@ RocketChat.API.v1.addRoute('settings/:_id', {authRequired: true}, { } }); -RocketChat.API.v1.addRoute('service.configurations', {authRequired: false}, { +RocketChat.API.v1.addRoute('service.configurations', { authRequired: false }, { get() { const ServiceConfiguration = Package['service-configuration'].ServiceConfiguration; return RocketChat.API.v1.success({ - configurations: ServiceConfiguration.configurations.find({}, {fields: {secret: 0}}).fetch() + configurations: ServiceConfiguration.configurations.find({}, { fields: { secret: 0 } }).fetch() }); } }); From 4a977373f6db65c59b2fb8285544982b95f77510 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Thu, 10 May 2018 15:18:47 -0300 Subject: [PATCH 3/3] removing the defer and waiting for the method to execute --- packages/rocketchat-api/server/v1/settings.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-api/server/v1/settings.js b/packages/rocketchat-api/server/v1/settings.js index 2641eb626320d..25975fd998d14 100644 --- a/packages/rocketchat-api/server/v1/settings.js +++ b/packages/rocketchat-api/server/v1/settings.js @@ -77,10 +77,8 @@ RocketChat.API.v1.addRoute('settings/:_id', { authRequired: true }, { const setting = RocketChat.models.Settings.findOneNotHiddenById(this.urlParams._id); if (setting.type === 'action' && this.bodyParams && this.bodyParams.execute) { //execute the configured method - Meteor.defer(() => { - Meteor.call(setting.value); - return RocketChat.API.v1.success(); - }); + Meteor.call(setting.value); + return RocketChat.API.v1.success(); } if (setting.type === 'color' && this.bodyParams && this.bodyParams.editor && this.bodyParams.value) {