From 4741e584c63031d0d4609e18a4e4f082d4c4e72e Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 1 Nov 2019 11:37:08 +0100 Subject: [PATCH] Strip markdown from push notifications --- website/server/libs/chat.js | 1 + website/server/libs/inbox/index.js | 1 + website/server/libs/pushNotifications.js | 16 ++++++++++++---- website/server/models/group.js | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/website/server/libs/chat.js b/website/server/libs/chat.js index fb41269f44..20c3c569fe 100644 --- a/website/server/libs/chat.js +++ b/website/server/libs/chat.js @@ -35,6 +35,7 @@ export async function sendChatPushNotifications (user, group, message, mentions, { title: translate('groupActivityNotificationTitle', { user: message.user, group: group.name }, member.preferences.language), message: message.text, + isUserGenerated: true, identifier: 'groupActivity', category: 'groupActivity', payload: { diff --git a/website/server/libs/inbox/index.js b/website/server/libs/inbox/index.js index 9dcbbdb01e..bc5514e029 100644 --- a/website/server/libs/inbox/index.js +++ b/website/server/libs/inbox/index.js @@ -24,6 +24,7 @@ export async function sentMessage (sender, receiver, message, translate) { receiver.preferences.language, ), message, + isUserGenerated: true, identifier: 'newPM', category: 'newPM', payload: { replyTo: sender._id, senderName, message }, diff --git a/website/server/libs/pushNotifications.js b/website/server/libs/pushNotifications.js index a2db992879..ed04e38d50 100644 --- a/website/server/libs/pushNotifications.js +++ b/website/server/libs/pushNotifications.js @@ -3,6 +3,7 @@ import nconf from 'nconf'; import apn from 'apn'; import gcmLib from 'node-gcm'; // works with FCM notifications too import logger from './logger'; +import md from 'habitica-markdown'; const FCM_API_KEY = nconf.get('PUSH_CONFIGS_FCM_SERVER_API_KEY'); @@ -32,6 +33,13 @@ function sendNotification (user, details = {}) { if (!details.title) throw new Error('details.title is required.'); if (!details.message) throw new Error('details.message is required.'); + let title = details.title + let message = details.message + if (details.isUserGenerated) { + title = md.render(title).replace(/<[^>]+>/g, '').replace(/\n$/, '') + message = md.render(details.message).replace(/<[^>]+>/g, '').replace(/\n$/, '') + } + const payload = details.payload ? details.payload : {}; payload.identifier = details.identifier; @@ -39,8 +47,8 @@ function sendNotification (user, details = {}) { switch (pushDevice.type) { // eslint-disable-line default-case case 'android': // Required for fcm to be received in background - payload.title = details.title; - payload.body = details.message; + payload.title = title; + payload.body = message; if (fcmSender) { const message = new gcmLib.Message({ @@ -57,8 +65,8 @@ function sendNotification (user, details = {}) { if (apnProvider) { const notification = new apn.Notification({ alert: { - title: details.title, - body: details.message, + title: title, + body: message, }, sound: 'default', category: details.category, diff --git a/website/server/models/group.js b/website/server/models/group.js index c05cf32878..89f7a8984f 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -634,7 +634,7 @@ schema.methods.sendChat = function sendChat (options = {}) { return; } } - sendPushNotification(member, { identifier: 'chatMention', title: `${user.profile.name} mentioned you in ${this.name}`, message }); + sendPushNotification(member, { identifier: 'chatMention', title: `${user.profile.name} mentioned you in ${this.name}`, message, isUserGenerated: true }); }); } return newChatMessage;