diff options
author | Lauri Ojansivu <x@xet7.org> | 2017-09-01 22:11:13 +0300 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2017-09-01 22:11:13 +0300 |
commit | 01bbc089daad2754b3c67f1bd5d993a0999fd112 (patch) | |
tree | 1d5a28a973d6374044b2a5894c8ec2d64e89a4a1 /models | |
parent | 491a352792238abf58ba9d973b5009bff581f904 (diff) | |
parent | 1048718f0b133944b9e46e345d9ad38bbd162b30 (diff) | |
download | wekan-01bbc089daad2754b3c67f1bd5d993a0999fd112.tar.gz wekan-01bbc089daad2754b3c67f1bd5d993a0999fd112.tar.bz2 wekan-01bbc089daad2754b3c67f1bd5d993a0999fd112.zip |
Merge branch 'devel' of https://github.com/andresmanelli/wekan into andresmanelli-devel
Diffstat (limited to 'models')
-rw-r--r-- | models/activities.js | 6 | ||||
-rw-r--r-- | models/integrations.js | 146 |
2 files changed, 144 insertions, 8 deletions
diff --git a/models/activities.js b/models/activities.js index 208dd629..c732a940 100644 --- a/models/activities.js +++ b/models/activities.js @@ -140,9 +140,9 @@ if (Meteor.isServer) { Notifications.notify(user, title, description, params); }); - const integration = Integrations.findOne({ boardId: board._id, type: 'outgoing-webhooks', enabled: true }); - if (integration) { - Meteor.call('outgoingWebhooks', integration, description, params); + const integrations = Integrations.find({ boardId: board._id, type: 'outgoing-webhooks', enabled: true, activities: { '$in': [description, 'all'] } }).fetch(); + if (integrations.length > 0) { + Meteor.call('outgoingWebhooks', integrations, description, params); } }); } diff --git a/models/integrations.js b/models/integrations.js index b9bf248f..826873ce 100644 --- a/models/integrations.js +++ b/models/integrations.js @@ -11,6 +11,11 @@ Integrations.attachSchema(new SimpleSchema({ }, type: { type: String, + defaultValue: 'outgoing-webhooks', + }, + activities: { + type: [String], + defaultValue: ['all'], }, url: { // URL validation regex (https://mathiasbynens.be/demo/url-regex) type: String, @@ -35,11 +40,6 @@ Integrations.attachSchema(new SimpleSchema({ }, userId: { type: String, - autoValue() { // eslint-disable-line consistent-return - if (this.isInsert || this.isUpdate) { - return this.userId; - } - }, }, })); @@ -50,5 +50,141 @@ Integrations.allow({ update(userId, doc) { return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, + remove(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); + }, fetch: ['boardId'], }); + +//INTEGRATIONS REST API +if (Meteor.isServer) { + // Get all integrations in board + JsonRoutes.add('GET', '/api/boards/:boardId/integrations', function(req, res, next) { + const paramBoardId = req.params.boardId; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + const data = Integrations.find({ boardId: paramBoardId }, { fields: { token: 0 } }).map(function(doc) { + return doc; + }); + + JsonRoutes.sendResult(res, {code: 200, data}); + }); + + // Get a single integration in board + JsonRoutes.add('GET', '/api/boards/:boardId/integrations/:intId', function(req, res, next) { + const paramBoardId = req.params.boardId; + const paramIntId = req.params.intId; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + JsonRoutes.sendResult(res, { + code: 200, + data: Integrations.findOne({ _id: paramIntId, boardId: paramBoardId }, { fields: { token: 0 } }), + }); + }); + + // Create a new integration + JsonRoutes.add('POST', '/api/boards/:boardId/integrations', function(req, res, next) { + const paramBoardId = req.params.boardId; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + const id = Integrations.insert({ + userId: req.userId, + boardId: paramBoardId, + url: req.body.url, + }); + + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + }, + }); + }); + + // Edit integration data + JsonRoutes.add('PUT', '/api/boards/:boardId/integrations/:intId', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramIntId = req.params.intId; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + if (req.body.hasOwnProperty('enabled')) { + const newEnabled = req.body.enabled; + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$set: {enabled: newEnabled}}); + } + if (req.body.hasOwnProperty('title')) { + const newTitle = req.body.title; + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$set: {title: newTitle}}); + } + if (req.body.hasOwnProperty('url')) { + const newUrl = req.body.url; + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$set: {url: newUrl}}); + } + if (req.body.hasOwnProperty('token')) { + const newToken = req.body.token; + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$set: {token: newToken}}); + } + if (req.body.hasOwnProperty('activities')) { + const newActivities = req.body.activities; + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$set: {activities: newActivities}}); + } + + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: paramIntId, + }, + }); + }); + + // Delete subscribed activities + JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId/activities', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramIntId = req.params.intId; + const newActivities = req.body.activities; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$pullAll: {activities: newActivities}}); + + JsonRoutes.sendResult(res, { + code: 200, + data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}), + }); + }); + + // Add subscribed activities + JsonRoutes.add('POST', '/api/boards/:boardId/integrations/:intId/activities', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramIntId = req.params.intId; + const newActivities = req.body.activities; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, + {$addToSet: {activities: { $each: newActivities}}}); + + JsonRoutes.sendResult(res, { + code: 200, + data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}), + }); + }); + + // Delete integration + JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramIntId = req.params.intId; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + Integrations.direct.remove({_id: paramIntId, boardId: paramBoardId}); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: paramIntId, + }, + }); + }); +} |