summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/activities.js5
-rw-r--r--models/integrations.js54
2 files changed, 59 insertions, 0 deletions
diff --git a/models/activities.js b/models/activities.js
index 9a41d4aa..f1e52493 100644
--- a/models/activities.js
+++ b/models/activities.js
@@ -131,5 +131,10 @@ if (Meteor.isServer) {
Notifications.getUsers(participants, watchers).forEach((user) => {
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);
+ }
});
}
diff --git a/models/integrations.js b/models/integrations.js
new file mode 100644
index 00000000..b9bf248f
--- /dev/null
+++ b/models/integrations.js
@@ -0,0 +1,54 @@
+Integrations = new Mongo.Collection('integrations');
+
+Integrations.attachSchema(new SimpleSchema({
+ enabled: {
+ type: Boolean,
+ defaultValue: true,
+ },
+ title: {
+ type: String,
+ optional: true,
+ },
+ type: {
+ type: String,
+ },
+ url: { // URL validation regex (https://mathiasbynens.be/demo/url-regex)
+ type: String,
+ },
+ token: {
+ type: String,
+ optional: true,
+ },
+ boardId: {
+ type: String,
+ },
+ createdAt: {
+ type: Date,
+ denyUpdate: false,
+ autoValue() { // eslint-disable-line consistent-return
+ if (this.isInsert) {
+ return new Date();
+ } else {
+ this.unset();
+ }
+ },
+ },
+ userId: {
+ type: String,
+ autoValue() { // eslint-disable-line consistent-return
+ if (this.isInsert || this.isUpdate) {
+ return this.userId;
+ }
+ },
+ },
+}));
+
+Integrations.allow({
+ insert(userId, doc) {
+ return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ },
+ update(userId, doc) {
+ return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId));
+ },
+ fetch: ['boardId'],
+});