From e433d3db8c8a20049a51d71538a39b8fa382f0ad Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Sun, 7 Aug 2022 02:01:35 +0200 Subject: [PATCH] Notification with Service Workers now is working! When a Notification arrives, it save into the IndexDb, then in Vue.js call a polling to check in the db if there is a different record count. If is different then call a get to update the notification. --- src/server/models/sendmsg.js | 2 +- src/server/models/sendnotif.js | 46 ++++++++++++++++++----------- src/server/router/push_router.js | 2 +- src/server/router/sendmsg_router.js | 2 +- src/server/telegram/telegrambot.js | 2 +- src/server/tools/general.js | 39 +++++++++++++++++------- src/server/tools/globalTables.js | 22 ++++++++------ src/server/tools/shared_nodejs.js | 2 +- 8 files changed, 76 insertions(+), 41 deletions(-) diff --git a/src/server/models/sendmsg.js b/src/server/models/sendmsg.js index 11c0233..a0c2d3f 100755 --- a/src/server/models/sendmsg.js +++ b/src/server/models/sendmsg.js @@ -35,7 +35,7 @@ const sendmsgSchema = new Schema({ status: { type: Number, }, - options: { + typesend: { type: Number, }, read: { diff --git a/src/server/models/sendnotif.js b/src/server/models/sendnotif.js index ce18644..9437a6f 100755 --- a/src/server/models/sendnotif.js +++ b/src/server/models/sendnotif.js @@ -55,7 +55,7 @@ const sendNotifSchema = new Schema({ type: Number, default: 0, }, - options: { + typesend: { type: Number, }, read: { @@ -75,6 +75,12 @@ const sendNotifSchema = new Schema({ extrafield: { type: String, }, + tag: { + type: String, + }, + options: { + type: Array, + }, }); @@ -144,20 +150,26 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { if (recnotif.typeid === shared_consts.TypeNotifs.ID_BACHECA_NEW_GOOD) { newdescr = i18n.__('%s new Good: %s', userorig, mydescr); recnotif.openUrl = '/mygood/' + myidrec; + tag = 'newgood'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_BACHECA_NEW_SERVICE) { newdescr = i18n.__('%s new Service: %s', userorig, mydescr); recnotif.openUrl = '/myservice/' + myidrec; + tag = 'newservice'; } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_FRIENDS) { recnotif.openUrl = '/my/' + userorig; if (recnotif.typeid === shared_consts.TypeNotifs.ID_FRIENDS_NEW_REC) { newdescr = i18n.__('%s asked you for Friendship', userorig, mydescr); + tag = 'newfriend'; } else if ((recnotif.typeid === shared_consts.TypeNotifs.ID_FRIENDS_ACCEPTED) || (recnotif.typeid === shared_consts.TypeNotifs.ID_FRIENDS_ACCEPTED_MY_REQUEST)) { newdescr = i18n.__('%s accepted your Friendship', userorig, mydescr); + tag = 'acceptedfriend'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_FRIENDS_REFUSED) { newdescr = i18n.__('%s refused your Friendship', userorig, mydescr); + tag = 'refusedfriend'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_FRIENDS_REPORTED) { + tag = 'reportuser'; if (recnotif.paramsObj.usernameDest === recnotif.paramsObj.username_action) { newdescr = i18n.__('FRIEND_REPORTED_YOU', recnotif.paramsObj.username_worked); } else if (recnotif.paramsObj.isAdmin) { @@ -167,6 +179,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { } } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) { + tag = 'group'; recnotif.openUrl = '/grp/' + recnotif.paramsObj.groupnameDest; if (recnotif.typeid === shared_consts.TypeNotifs.ID_GROUP_NEW_REC) { newdescr = i18n.__('GROUP_CREATED', userorig, recnotif.paramsObj.groupnameDest); @@ -202,7 +215,6 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { newdescr = i18n.__('GRUPPO_ELIMINATO', userorig, recnotif.paramsObj.username_action); tag = 'deletegroup'; } - } recnotif.tag = recnotif.tag ? recnotif.tag : tag; @@ -274,26 +286,25 @@ sendNotifSchema.statics.saveAndSendNotif = async function(myrecnotif, req, res, if (!myrecout) return null; - if (save) { - await myrecout.save().then((writeresult) => { - let idobj = writeresult._id; + // console.log('myrecout._id', myrecout._id.toString()); - return SendNotif.findById(idobj).lean().then(async (recnotif) => { - return await globalTables.sendNotif(myrecnotif.typedir, myrecnotif.typeid, res, idapp, user ? user : req.user, recnotif). - then((ris) => { - return recnotif; - }); - }); + if (save) { + await myrecout.save().then(async (res) => { + if (res) { + const idobj = res._id; + + const myrecread = await SendNotif.findById(idobj).lean(); + // console.log('myrecread._id', myrecread._id.toString()); + + return await globalTables.sendNotif(myrecread.typedir, myrecread.typeid, res, idapp, user ? user : req.user, myrecread); + } }).catch((e) => { console.log(e.message); return null; }); } else { - return await globalTables.sendNotif(myrecout.typedir, myrecout.typeid, res, idapp, user ? user : req.user, myrecout). - then((ris) => { - return myrecout; - }); + return await globalTables.sendNotif(myrecout.typedir, myrecout.typeid, res, idapp, user ? user : req.user, myrecout); } }; @@ -373,7 +384,7 @@ sendNotifSchema.statics.updateStatusAndDescr = async function(myrecnotif, onlysa } } - myrecnotif._id = new ObjectID(); + // myrecnotif._id = new ObjectID(); if (newstatus > 0) { myrecnotif.status = newstatus; } @@ -431,7 +442,8 @@ sendNotifSchema.statics.getExtraParam = function(myrecnotif, paramsObj) { //out = myrecnotif._doc //} out.paramsObj = paramsObj; - out.options = paramsObj.options ? paramsObj.options : 0; + out.options = paramsObj.options ? paramsObj.options : []; + out.typesend = paramsObj.typesend ? paramsObj.typesend : 0; out.extrafield = paramsObj.groupnameDest ? paramsObj.groupnameDest : ''; return myrecnotif; diff --git a/src/server/router/push_router.js b/src/server/router/push_router.js index b950e18..83f21d5 100755 --- a/src/server/router/push_router.js +++ b/src/server/router/push_router.js @@ -93,7 +93,7 @@ async function SendMsgTo(idapp, username, params) { if (arrusers !== null) { for (const user of arrusers) { tools.sendNotificationToUser(user._id, params.title, params.content, - params.openUrl, params.openUrl2, params.tag, params.actions). + params.openUrl, params.openUrl2, params.tag, params.actions, params.id). then(ris => { if (ris) { diff --git a/src/server/router/sendmsg_router.js b/src/server/router/sendmsg_router.js index e331e87..313051e 100755 --- a/src/server/router/sendmsg_router.js +++ b/src/server/router/sendmsg_router.js @@ -50,7 +50,7 @@ router.post('/', authenticate, (req, res) => { recmsg.typedir = shared_consts.TypeNotifs.TYPEDIR_EVENTS; recmsg.typeid = shared_consts.TypeNotifs.ID_EVENTS_REMOVE_REC; - return SendNotif.saveAndSendNotif(recmyevent, req, res).then((out) => { + return await SendNotif.saveAndSendNotif(recmyevent, req, res).then((out) => { if (out) return res.send({ code: server_constants.RIS_CODE_OK, msg: '', id: recmsg._id }); else diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index 83c1ff9..addee3e 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -3408,7 +3408,7 @@ class Telegram { } try { - console.log('<<< SEND MSG: >>> ', text.substring(0, 100)); + console.log('<<< SEND MSG TELEGRAM: >>> ', text.substring(0, 100)); text = text.replace(/
/g, '\n'); text = text.replace(//g, '\n'); text = text.replace(/
/g, ''); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 65339f4..56b4a90 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -583,6 +583,8 @@ module.exports = { 'idapp', 'tablerec', 'extrafield', + 'tag', + 'options', 'idrec', 'status']; }, @@ -744,7 +746,9 @@ module.exports = { }); }, - sendNotificationToUser: function(userId, title, content, openUrl, openUrl2, tag, actions) { + sendNotificationToUser: function(userId, title, content, openUrl, openUrl2, tag, actions, id) { + + content = this.convertHTMLtoText(content); let payload = { actions, @@ -753,6 +757,7 @@ module.exports = { url: openUrl, url2: openUrl2, tag, + id, // ttl: req.body.ttl, // icon: req.body.icon, // image: req.body.image, @@ -931,7 +936,8 @@ module.exports = { } }, - sendNotifGroupByUsername: async function(cmd, typeid_pass, idapp, usernameOrig, usernameDest, username_action, groupname, myrecgroup, isAdmin, username_worked) { + sendNotifGroupByUsername: async function( + cmd, typeid_pass, idapp, usernameOrig, usernameDest, username_action, groupname, myrecgroup, isAdmin, username_worked) { const {SendNotif} = require('../models/sendnotif'); const {User} = require('../models/user'); @@ -976,7 +982,8 @@ module.exports = { typeid = shared_consts.TypeNotifs.ID_GROUP_REQUEST_TO_ENTER; // paramsObj.options = MessageOptions.Notify_OnlyToNotifinApp + MessageOptions.Notify_ByBotTelegram; const myuserdata = await User.getUserShortDataByUsername(idapp, username_action); - telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_GRUPPO, myuserdata, usernameDest, groupname, myrecgroup._id); + telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_GRUPPO, myuserdata, usernameDest, groupname, + myrecgroup._id); onlysave = false; } else if (cmd === shared_consts.GROUPSCMD.BLOCK_USER) { typeid = shared_consts.TypeNotifs.ID_GROUP_BLOCK_USER; @@ -1002,7 +1009,6 @@ module.exports = { const {MyGroup} = require('../models/mygroup'); const {User} = require('../models/user'); - const group = await MyGroup.findOne({idapp, groupname}, {_id: 1, admins: 1, createdBy: 1}).lean(); if (!group) return; @@ -1138,6 +1144,10 @@ module.exports = { convertHTMLtoText(myhtml) { let msg = myhtml; msg = msg.replace('"', '"'); + msg = msg.replace(//g, ''); + msg = msg.replace(/<\/strong>/g, ''); + msg = msg.replace(//g, ''); + msg = msg.replace(/<\/em>/g, ''); msg = msg.replace('>', '>'); msg = msg.replace('<', '<'); msg = msg.replace('&', '&'); @@ -1547,12 +1557,10 @@ module.exports = { }); // Iscritti Conacreis - if (params.filterand.includes(shared_consts.FILTER_MISSING_PAYMENT)) - filtriadded.push({ - $or: [ - {ha_pagato: {$exists: false}}, - {ha_pagato: {$exists: true, $lt: 1}}], - }); + if (params.filterand.includes(shared_consts.FILTER_REPORTED)) + filtriadded.push( + {reported: {$exists: true, $eq: true}}, + ); if (params.filterand.includes( shared_consts.FILTER_TO_MAKE_MEMBERSHIP_CARD)) @@ -1855,6 +1863,17 @@ module.exports = { const [ris] = await mythistable.aggregate(query); if (ris) { + if (params.table === 'users') { + for (const myrec of ris.rows) { + myrec.password = '**********'; + } + } else if (params.table === 'mygroups') { + for (const myrec of ris.rows) { + if (myrec.pwd_cryp) + myrec.pwd_cryp = '**********'; + } + } + // console.table(ris.rows); // console.log('ROW ', ris.count); return ({count: ris.count, rows: ris.rows}); diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index eec0dba..b4585d7 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -221,9 +221,10 @@ module.exports = { const sendemail = require('../sendemail'); + /// ... rivedere il crea gruppo... notifiche... try { - if (!recnotif.options) { - recnotif.options = shared_consts.MessageOptions.Notify_ByPushNotification + shared_consts.MessageOptions.Notify_ByBotTelegram; + if (!recnotif.typesend) { + recnotif.typesend = shared_consts.MessageOptions.Notify_ByPushNotification + shared_consts.MessageOptions.Notify_ByBotTelegram; } let invia = false; @@ -239,13 +240,16 @@ module.exports = { typenotif, idnotif, usernameDest: recnotif.usernameDest ? recnotif.usernameDest : recnotif.dest, + tag: recnotif.tag ? recnotif.tag : '', + actions: recnotif.actions ? recnotif.actions : [], + id: recnotif._id }; - if (tools.isBitActive(recnotif.options, shared_consts.MessageOptions.Notify_ByPushNotification) && this.checkifSendPushNotification) { + if (tools.isBitActive(recnotif.typesend, shared_consts.MessageOptions.Notify_ByPushNotification) && this.checkifSendPushNotification) { params.typesend = params.typesend + shared_consts.TypeSend.PUSH_NOTIFICATION; invia = true; } - if (tools.isBitActive(recnotif.options, shared_consts.MessageOptions.Notify_ByBotTelegram)) { + if (tools.isBitActive(recnotif.typesend, shared_consts.MessageOptions.Notify_ByBotTelegram)) { params.typesend = params.typesend + shared_consts.TypeSend.TELEGRAM; invia = true; } @@ -256,7 +260,7 @@ module.exports = { } // Send Msg by EMAIL - if (tools.isBitActive(recnotif.options, shared_consts.MessageOptions.Notify_ByEmail)) { + if (tools.isBitActive(recnotif.typesend, shared_consts.MessageOptions.Notify_ByEmail)) { // Read from the operator table first let emaildest = await Operator.getEmailByUsername(recnotif.dest.idapp, recnotif.dest.username); if (!emaildest) @@ -265,17 +269,17 @@ module.exports = { await sendemail.sendEmail_ByNotif(res, user.lang, emaildest, user, idapp, recnotif); } - return true; + return recnotif; } catch (e) { console.error('sendNotif', e, typenotif, recnotif); - return false; + return recnotif; } }, SendMsgToParam: async function(idapp, params) { try { - console.log('SendMsgToParam'); + console.log('SendMsgToParam', params.typesend); const telegrambot = require('../telegram/telegrambot'); @@ -356,7 +360,7 @@ module.exports = { if (tools.isBitActive(params.typesend, shared_consts.TypeSend.PUSH_NOTIFICATION)) { const myparam = {...params}; risult = tools.sendNotificationToUser(user._id, mytitle, mycontent, myparam.openUrl, myparam.openUrl2, myparam.tag, - myparam.actions). + myparam.actions, myparam.id). then(ris => { }). diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 2eccfe4..3502612 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -27,7 +27,7 @@ module.exports = { FILTER_ASK_ZOOM_VISTO: 32768, FILTER_HOURS_MYLIST: 65536, FILTER_HOURS_ALL: 131072, - FILTER_MISSING_PAYMENT: 262144, + FILTER_REPORTED: 262144, FILTER_TO_MAKE_MEMBERSHIP_CARD: 524288, FILTER_MEMBERSHIP_CARD_OK: 1048576, FILTER_USER_NO_VERIFIED_APORTADOR: 2097152,