From 429e2f9992c94248c54f1f77127f8d0b003e7a7c Mon Sep 17 00:00:00 2001 From: nztqa Date: Sun, 9 Jul 2017 15:02:17 +0900 Subject: Add method outgoingWebhooks --- server/notifications/outgoing.js | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 server/notifications/outgoing.js diff --git a/server/notifications/outgoing.js b/server/notifications/outgoing.js new file mode 100644 index 00000000..a5bbc737 --- /dev/null +++ b/server/notifications/outgoing.js @@ -0,0 +1,47 @@ +const postCatchError = Meteor.wrapAsync((url, options, resolve) => { + HTTP.post(url, options, (err, res) => { + if (err) { + resolve(null, err.response); + } else { + resolve(null, res); + } + }); +}); + +Meteor.methods({ + outgoingWebhooks(integration, description, params) { + check(integration, Object); + check(description, String); + check(params, Object); + + const quoteParams = _.clone(params); + ['card', 'list', 'oldList', 'board', 'comment'].forEach((key) => { + if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`; + }); + + const user = Users.findOne(integration.userId); + const text = `${params.user} ${TAPi18n.__(description, quoteParams, user.getLanguage())}\n${params.url}`; + + if (text.length === 0) return; + + const value = { + text: `${text}`, + }; + + const options = { + headers: { + // 'Content-Type': 'application/json', + // 'X-Wekan-Activities-Token': 'Random.Id()', + }, + data: value, + }; + + const response = postCatchError(integration.url, options); + + if (response && response.statusCode && response.statusCode === 200) { + return true; // eslint-disable-line consistent-return + } else { + throw new Meteor.Error('error-invalid-webhook-response'); + } + }, +}); -- cgit v1.2.3-1-g7c22