From 6dcaea5f1ca8a4f13914f75890837e7bfbebf1bc Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Mon, 20 Jan 2020 01:48:25 +0100 Subject: [PATCH] fix Registrazione data fix linkref fix controllo login --- emails/resetpwd/en/html.pug | 2 +- emails/resetpwd/it/html.pug | 7 +- package.json | 2 +- src/server/config/config.js | 22 +- src/server/locales/en.json | 10 +- src/server/locales/es.json | 7 +- src/server/locales/it.json | 6 - src/server/models/extralist.js | 67 ++-- src/server/models/mailinglist.js | 4 +- src/server/models/mypage.js | 3 + src/server/models/user.js | 111 ++++++- src/server/reg/registration.js | 8 +- src/server/router/index_router.js | 22 +- src/server/router/notevole_router.js | 53 ++++ src/server/router/users_router.js | 44 ++- src/server/sendemail.js | 19 +- src/server/server.js | 26 +- src/server/telegram/telegrambot.js | 444 ++++++++++++++++++++++----- src/server/tools/general.js | 89 +++++- src/server/tools/server_constants.js | 2 + src/server/tools/shared_nodejs.js | 2 +- 21 files changed, 779 insertions(+), 171 deletions(-) create mode 100644 src/server/router/notevole_router.js diff --git a/emails/resetpwd/en/html.pug b/emails/resetpwd/en/html.pug index c80e115..d93326a 100644 --- a/emails/resetpwd/en/html.pug +++ b/emails/resetpwd/en/html.pug @@ -1,4 +1,4 @@ -p Hi #{user}, +p Hi #{name}, p #{nomeapp} recently received a request for a forgotten password. p To change your #{nomeapp} password, please click on this Click Here. diff --git a/emails/resetpwd/it/html.pug b/emails/resetpwd/it/html.pug index d4002dc..12c8c57 100644 --- a/emails/resetpwd/it/html.pug +++ b/emails/resetpwd/it/html.pug @@ -1,9 +1,8 @@ -p Ciao #{user}, +p Ciao #{name}, p #{nomeapp} recentemente ha ricevuto una richiesta per una password dimenticata. -p Per - strong cambiare la tua password - span di #{nomeapp}, Clicca qui. +p Per cambiare la tua password di #{nomeapp} +p Clicca QUI p Se non sei stato tu a richiedere questo cambiamento, non hai bisogno di fare niente. p Questo link scadrà tra 4 ore.
diff --git a/package.json b/package.json index 8e7b662..6d4bec9 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "email-templates": "^6.1.1", "express": "^4.17.1", "formidable": "^1.2.1", - "i18n": "^0.8.3", + "i18n": "^0.8.4", "jade": "^1.11.0", "jsonwebtoken": "^8.5.1", "lodash": "^4.17.15", diff --git a/src/server/config/config.js b/src/server/config/config.js index d2caa7e..dd2ac6b 100644 --- a/src/server/config/config.js +++ b/src/server/config/config.js @@ -91,17 +91,17 @@ if (process.env.NODE_ENV === 'production') { }, { idapp: '7', - name: 'Notevole', - adminemail: 'notevole.ayni@gmail.com', + name: 'Ayni', + adminemail: 'ayni.gifteconomy@gmail.com', manageremail: '', replyTo: '', - host: 'https://notevole.freeplanet.app', + host: 'https://ayni.gifteconomy.app', portapp: '0', - dir: '/var/www/notevole.freeplanet.app', - email_from: 'notevole.ayni@gmail.com', - email_pwd: '2e6ed34db0ef8fdc98e8a6872ec09a64350235c1ad7b756aa94047dec441d363xNvZnACxWSqSGu3lXcVyTuQiPR2ixYYf/HoY3agbNYU=', + dir: '/var/www/ayni.gifteconomy.app', + email_from: 'ayni.gifteconomy@gmail.com', + email_pwd: '4a16f0c93b28cd53cb2b6d9b6698ad20c5514f1c91de8161b2789274d15617bb20Ecne0RP3aNDl8NhJj5Uw==', telegram_key:'1037577457:AAGQbdIuYoB838v61ewJ0Hearx9UPpTBhMI', - telegram_bot_name: 'notevoleaynibot', + telegram_bot_name: 'aynibot', }, { idapp: '8', @@ -190,12 +190,12 @@ if (process.env.NODE_ENV === 'production') { }, { idapp: '7', - name: 'Notevole (Server Test)', + name: 'Ayni (Server Test)', adminemail: 'pao.loarena77@gmail.com', manageremail: '', - host: 'https://testnotevole.freeplanet.app', + host: 'https://test.gifteconomy.app', portapp: '0', - dir: '/var/www/testnotevole.freeplanet.app', + dir: '/var/www/test.gifteconomy.app', email_from: 'info.pianetalibero@gmail.com', email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==', telegram_key:'1011893908:AAEThZB3fVPw8P5gTCFgTEsDmY21DdbV1Cw', @@ -286,7 +286,7 @@ if (process.env.NODE_ENV === 'production') { }, { idapp: '7', - name: 'Notevole', + name: 'Ayni', adminemail: 'paolo.arena77@gmail.com', manageremail: '', host: 'http://localhost', diff --git a/src/server/locales/en.json b/src/server/locales/en.json index c982294..4598ad9 100644 --- a/src/server/locales/en.json +++ b/src/server/locales/en.json @@ -1,5 +1,7 @@ { - "Email Verificata!": "Email Verificata!", - "partecipanti": "partecipanti", - "L'Email è già stata Verificata.": "L'Email è già stata Verificata." -} \ No newline at end of file + "L'Email è già stata Verificata": "L'Email è già stata Verificata" + "Email Verificata!": "Email Verificada! Cierre esta ventana y regrese a la otra.", + "Nuova Registrazione": "Nuevo Registro", + "Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro", + "partecipanti": "participantes" +} diff --git a/src/server/locales/es.json b/src/server/locales/es.json index 6c555c1..37a07f3 100644 --- a/src/server/locales/es.json +++ b/src/server/locales/es.json @@ -1,8 +1,7 @@ { "L'Email è già stata Verificata": "El email ya ha sido verificado", - "Email Verificata!": "Email Verificada!", - "a": "a", + "Email Verificata!": "Email Verificada! Cierre esta ventana y regrese a la otra.", "Nuova Registrazione": "Nuevo Registro", - "Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro" - "partecipanti": "participantes" + "Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro", + "partecipanti": "participantes", } diff --git a/src/server/locales/it.json b/src/server/locales/it.json index c9d2b83..2c63c08 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -1,8 +1,2 @@ { - "L'Email è già stata Verificata": "L'Email è già stata Verificata", - "Email Verificata!": "Email Verificata!", - "a": "a", - "Nuova Registrazione": "Nuova Registrazione", - "Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione", - "partecipanti": "partecipanti" } diff --git a/src/server/models/extralist.js b/src/server/models/extralist.js index b474189..df0562a 100644 --- a/src/server/models/extralist.js +++ b/src/server/models/extralist.js @@ -54,12 +54,18 @@ var ExtraListSchema = new mongoose.Schema({ is_in_telegram: { type: Boolean, }, + is_staff: { + type: Boolean, + }, cell_complete: { type: String }, nationality: { type: String }, + saw_zoom_presentation: { + type: Boolean + }, aportador_solidario_name_surname: { type: String, }, @@ -86,26 +92,42 @@ var ExtraListSchema = new mongoose.Schema({ }); ExtraListSchema.methods.toJSON = function () { - var user = this; - var userObject = user.toObject(); + const extralist = this; + const userObject = extralist.toObject(); return _.pick(userObject, ['_id', ...shared_consts.fieldsUserToChange()]); }; ExtraListSchema.statics.findByUsername = function (idapp, username) { - const User = this; + const ExtraList = this; - return User.findOne({ + return ExtraList.findOne({ 'idapp': idapp, 'username': username, }); }; +ExtraListSchema.statics.getTotInLista = async function (idapp) { + const ExtraList = this; + + const myfind = { idapp }; + + return await ExtraList.count(myfind); +}; + +ExtraListSchema.statics.getRegDellaLista = async function (idapp) { + const ExtraList = this; + + const myfind = { idapp, registered: true }; + + return await ExtraList.count(myfind); +}; + ExtraListSchema.statics.findByCellAndNameSurname = function (idapp, cell_complete, name, surname) { - var User = this; + const ExtraList = this; - return User.findOne({ + return ExtraList.findOne({ 'idapp': idapp, 'cell_complete': cell_complete, 'name': name, @@ -187,24 +209,26 @@ ExtraListSchema.statics.ImportData = async function (locale, idapp, strdata) { if (sep !== '' && row !== '') { let col = row.split(sep); if (col) { - if (col.length > 0) { + if (col.length > 11) { let user = null; try { user = new ExtraList({ idapp: idapp, ind_order: col[0], - name_complete: col[2], - num_invitati: col[3], - is_in_whatsapp: col[4] !== '', - is_in_telegram: col[5] !== '', - cell_complete: col[6], - nationality: col[7], - aportador_solidario_name_surname: col[8], - aportador_solidario_ind_order: col[9], - aportador_solidario_originale_name_surname: col[10], - note: col[11], - col_b: col[12], - col_h: col[13] + name_complete: col[2].trim(), + num_invitati: col[3].trim(), + is_in_whatsapp: col[4].trim() !== '', + is_in_telegram: col[5].trim() !== '', + is_staff: col[5].trim() === 'VV', + saw_zoom_presentation: col[6].trim() !== '', + cell_complete: col[7].trim(), + nationality: col[8].trim(), + aportador_solidario_name_surname: col[9].trim(), + aportador_solidario_ind_order: col[10].trim(), + aportador_solidario_originale_name_surname: col[11].trim(), + note: col[12].trim(), + col_b: col[13].trim(), + col_h: col[14].trim() }); try { @@ -213,6 +237,9 @@ ExtraListSchema.statics.ImportData = async function (locale, idapp, strdata) { console.log('error ', e); } + if (user.cell_complete[0] !== '+') + user.cell_complete = '+' + user.cell_complete; + namesurname = tools.extractNameAndSurnameByComplete(user.name_complete); user.name = namesurname.name; user.surname = namesurname.surname; @@ -235,7 +262,7 @@ ExtraListSchema.statics.ImportData = async function (locale, idapp, strdata) { } } catch (e) { - + console.log('error ', e); } ris = { numadded, numtot, numalreadyexisted }; diff --git a/src/server/models/mailinglist.js b/src/server/models/mailinglist.js index 57471e2..f7e7ee7 100644 --- a/src/server/models/mailinglist.js +++ b/src/server/models/mailinglist.js @@ -72,7 +72,7 @@ MailingListSchema.statics.getnumSent = async function (idapp, idmailinglist) { // Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit. - return await MailingList.countDocuments(myfind); + return await MailingList.count(myfind); }; MailingListSchema.statics.isOk = async function (idapp, iduser, idmailinglist) { @@ -82,7 +82,7 @@ MailingListSchema.statics.isOk = async function (idapp, iduser, idmailinglist) { // Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit. - return await MailingList.countDocuments(myfind) > 0; + return await MailingList.count(myfind) > 0; }; MailingListSchema.statics.findAllIdApp = async function (idapp) { diff --git a/src/server/models/mypage.js b/src/server/models/mypage.js index a1b98f1..682f8ef 100644 --- a/src/server/models/mypage.js +++ b/src/server/models/mypage.js @@ -44,6 +44,9 @@ const MyPageSchema = new Schema({ heightimg: { type: Number, }, + onlyif_logged: { + type: Boolean, + }, imgback: { type: String, }, diff --git a/src/server/models/user.js b/src/server/models/user.js index 88dad17..b44506b 100644 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -6,6 +6,8 @@ const _ = require('lodash'); const tools = require('../tools/general'); +const { Settings } = require('../models/settings'); + const shared_consts = require('../tools/shared_nodejs'); const queryclass = require('../classes/queryclass'); @@ -23,9 +25,6 @@ const UserSchema = new mongoose.Schema({ userId: { type: String, }, - already_registered: { - type: Boolean, - }, email: { type: String, required: true, @@ -103,7 +102,9 @@ const UserSchema = new mongoose.Schema({ }, date_reg: { type: Date, - default: Date.now() + }, + date_temp_reg: { + type: Date, }, date_tokenforgot: { type: Date @@ -126,6 +127,9 @@ const UserSchema = new mongoose.Schema({ aportador_solidario_ind_order: { type: Number, }, + note: { + type: String, + }, profile: { img: { type: String @@ -164,6 +168,12 @@ const UserSchema = new mongoose.Schema({ dateofbirth: { type: Date, }, + my_dream: { + type: String, + }, + saw_zoom_presentation: { + type: Boolean + }, sex: { type: Number, }, @@ -347,7 +357,7 @@ UserSchema.statics.getDownlineByUsername = function (idapp, username) { name: 1, surname: 1, verified_email: 1, - made_gift: 11, + made_gift: 1, email: 1, date_reg: 1, img: 1 @@ -356,6 +366,26 @@ UserSchema.statics.getDownlineByUsername = function (idapp, username) { }); }; +UserSchema.statics.getnumInvitatiAttivi = function (idapp, username) { + const User = this; + + return User.count({ + idapp, + aportador_solidario: username, + teleg_id: { $gt: 1 }, + saw_zoom_presentation: true, + }); +}; + +UserSchema.statics.getnumInvitati = function (idapp, username) { + const User = this; + + return User.count({ + idapp, + aportador_solidario: username, + }); +}; + UserSchema.statics.findByLinkreg = function (idapp, linkreg) { const User = this; @@ -440,7 +470,7 @@ UserSchema.statics.UserByIdTelegram = async function (idapp, teleg_id) { UserSchema.statics.TelegIdByUsername = async function (idapp, username) { const User = this; - return await User.findOne({ idapp, username }, {'profile.teleg_id': 1}) + return await User.findOne({ idapp, username }, { 'profile.teleg_id': 1 }) .then((rec) => { return (!!rec) ? rec.profile.teleg_id : null; }).catch((e) => { @@ -484,7 +514,7 @@ UserSchema.statics.SetTelegramIdSuccess = async function (idapp, username, teleg UserSchema.statics.getNameSurnameByUsername = async function (idapp, username) { const User = this; - return await User.findOne({ idapp, username }, {name: 1, surname: 1}) + return await User.findOne({ idapp, username }, { name: 1, surname: 1 }) .then((rec) => { return (!!rec) ? `${rec.name} ${rec.surname}` : ''; }).catch((e) => { @@ -493,11 +523,10 @@ UserSchema.statics.getNameSurnameByUsername = async function (idapp, username) { }; - UserSchema.statics.getusersManagers = async function (idapp) { const User = this; - return await User.find({ idapp, 'profile.manage_telegram': true }, {'profile.teleg_id': 1}) + return await User.find({ idapp, 'profile.manage_telegram': true }, { 'profile.teleg_id': 1 }) .then((arrrec) => { return (!!arrrec) ? arrrec : null; }).catch((e) => { @@ -505,6 +534,29 @@ UserSchema.statics.getusersManagers = async function (idapp) { }); }; +UserSchema.statics.getUsersTelegALL = async function (idapp) { + const User = this; + + return await User.find({ idapp, 'profile.teleg_id': { $gt: 0 } }, { 'profile.teleg_id': 1 }) + .then((arrrec) => { + return (!!arrrec) ? arrrec : null; + }).catch((e) => { + console.error('getusersManagers', e); + }); +}; + +UserSchema.statics.isManagerByIdTeleg = async function (idapp, idtelegram) { + const User = this; + + return await User.findOne({ idapp, 'profile.manage_telegram': true, 'profile.teleg_id': idtelegram }, { 'profile.teleg_id': 1 }) + .then((rec) => { + return (!!rec && rec.profile.teleg_id === idtelegram); + }).catch((e) => { + console.error('getusersManagers', e); + return false + }); +}; + UserSchema.statics.getUsersList = function (idapp) { const User = this; @@ -523,7 +575,6 @@ UserSchema.statics.getUsersList = function (idapp) { }; - UserSchema.statics.getUsersListByParams = function (params) { const User = this; @@ -623,6 +674,46 @@ UserSchema.statics.fixUsername = async function (idapp, aportador_solidario_ind_ }; +UserSchema.statics.getUsersRegistered = async function (idapp) { + const User = this; + + const myfind = { idapp }; + + return await User.count(myfind); +}; + +UserSchema.statics.getLastUsers = async function (idapp) { + const User = this; + + const lastn = await Settings.getValDbSettings(idapp, 'SHOW_LAST_N_USERS', 5); + + return await User.find({ idapp }).sort({ date_temp_reg: -1 }).limit(lastn); + +}; + +UserSchema.statics.checkUser = async function (idapp, username) { + const User = this; + + return await User.findOne({ idapp, username }, { + verified_email: 1, + 'profile.teleg_id': 1, + 'profile.teleg_checkcode': 1, + }); + +}; + +UserSchema.statics.calculateStat = async function (idapp, username) { + const User = this; + + return calcstat = { + numinvitati: await User.getnumInvitati(idapp, username), + numinvitati_attivi: await User.getnumInvitatiAttivi(idapp, username), + }; + +}; + + + if (tools.INITDB_FIRSTIME) { console.log(' createIndex User Index...'); diff --git a/src/server/reg/registration.js b/src/server/reg/registration.js index d6d6072..1280a3f 100644 --- a/src/server/reg/registration.js +++ b/src/server/reg/registration.js @@ -9,8 +9,12 @@ function toHexString(bytes) { module.exports = { getlinkregByEmail: function (idapp, email, username) { try{ - mystr = idapp + email + username; - return jwt.sign(toHexString(mystr), process.env.SIGNCODE).toString(); + myobj = { + idapp, + email, + username + }; + return jwt.sign(myobj, process.env.SIGNCODE).toString().substring(0, 180); } catch (e) { console.error(e); } diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 9c55036..fc2dbd8 100644 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -3,6 +3,9 @@ const router = express.Router(), fs = require('fs'), path = require('path'); +const jwt = require('jsonwebtoken'); + +const sendemail = require('../sendemail'); const { authenticate, authenticate_noerror } = require('../middleware/authenticate'); @@ -51,7 +54,7 @@ router.post(process.env.LINKVERIF_REG, (req, res) => { const body = _.pick(req.body, ['idapp', 'idlink']); const idapp = body.idapp; const idlink = body.idlink; - console.log("LINKVERIF_REG POST " + process.env.LINKVERIF_REG + " idapp= " + idapp + " idlink = " + idlink); + // console.log("LINKVERIF_REG POST " + process.env.LINKVERIF_REG + " idapp= " + idapp + " idlink = " + idlink); // Cerco l'idlink se è ancora da Verificare @@ -60,17 +63,18 @@ router.post(process.env.LINKVERIF_REG, (req, res) => { //console.log("NON TROVATO!"); return res.status(404).send(); } else { + console.log('user', user); if (user.verified_email) { res.send({ code: server_constants.RIS_CODE_EMAIL_ALREADY_VERIFIED, - msg: res.__("L'Email è già stata Verificata.") + msg: tools.getres__("L'Email è già stata Verificata", res) }); } else { user.verified_email = true; user.lasttimeonline = new Date(); user.save().then(() => { //console.log("TROVATOOOOOO!"); - res.send({ code: server_constants.RIS_CODE_EMAIL_VERIFIED, msg: res.__('Email Verificata!') }); + res.send({ code: server_constants.RIS_CODE_EMAIL_VERIFIED, msg: tools.getres__('EMAIL_VERIF', res) }); }); } } @@ -91,14 +95,14 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => { User.findByEmail(idapp, email).then((user) => { if (!user) { - return res.status(404).send(); + return res.status(200).send({ code: server_constants.RIS_CODE_EMAIL_NOT_EXIST, msg: '' }); } else { // Creo il tokenforgot user.tokenforgot = jwt.sign(user._id.toHexString(), process.env.SIGNCODE).toString(); user.date_tokenforgot = new Date(); user.lasttimeonline = new Date(); user.save().then(async () => { - await sendemail.sendEmail_RequestNewPassword(res.locale, user.email, user.idapp, user.tokenforgot); + await sendemail.sendEmail_RequestNewPassword(res.locale, user, user.email, user.idapp, user.tokenforgot); res.send({ code: server_constants.RIS_CODE_OK, msg: '' }); }); } @@ -426,12 +430,18 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) => newstosent = Newstosent.findAllIdApp(idapp); } - return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist, mypage, gallery, paymenttype]) + let calcstat = null; + if (req.user) + calcstat = User.calculateStat(idapp, req.user.username); + + + return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist, mypage, gallery, paymenttype, calcstat]) .then((arrdata) => { // console.table(arrdata); const myuser = req.user; if (myuser) { myuser.password = ''; + myuser._doc.calcstat = arrdata[13]; } res.send({ diff --git a/src/server/router/notevole_router.js b/src/server/router/notevole_router.js new file mode 100644 index 0000000..d67d5cc --- /dev/null +++ b/src/server/router/notevole_router.js @@ -0,0 +1,53 @@ +const express = require('express'); +const router = express.Router(); + +const tools = require('../tools/general'); + +const server_constants = require('../tools/server_constants'); + +const { authenticate } = require('../middleware/authenticate'); + +const mongoose = require('mongoose'); + +const { User } = require('../models/user'); + +const _ = require('lodash'); + +const { ObjectID } = require('mongodb'); + +const { ExtraList } = require('../models/extralist'); + +router.post('/load', async (req, res) => { + const idapp = req.body.idapp; + const username = req.body.username; + + + let datastat = { + num_tot_lista: await ExtraList.getTotInLista(idapp), + num_reg_lista: await ExtraList.getRegDellaLista(idapp), + num_reg: await User.getUsersRegistered(idapp), + lastsreg: await User.getLastUsers(idapp), + checkuser: await User.checkUser(idapp, username), + }; + + // console.table(datastat.lastsreg); + +/* + let datastat = { + num_tot_lista: 80, + num_reg: 40, + lastsreg: [ + { username: 'prova3', name: 'Datti', surname: 'Una Mossa', nationality: 'gb', date_reg: new Date()}, + { username: 'prova2', name: 'Pinco', surname: 'Pallino', nationality: 'de', date_reg: new Date()}, + { username: 'paoloar77', name: 'Paolo', surname: 'Arena', nationality: 'it', date_reg: new Date()}, + { username: 'mariorossi', name: 'Mario', surname: 'Rossi', nationality: 'es', date_reg: new Date()}, + { username: 'prova4', name: 'Quanto', surname: 'Siamo Fighi', nationality: 'uk', date_reg: new Date()}, + { username: 'prova5', name: 'Secondo', surname: 'PPP', nationality: 'sl', date_reg: new Date()}, + ] + }; +*/ + + res.send({ datastat }); +}); + +module.exports = router; diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 90f757a..9771a65 100644 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -11,6 +11,8 @@ const shared_consts = require('../tools/shared_nodejs'); const server_constants = require('../tools/server_constants'); +const telegrambot = require('../telegram/telegrambot'); + const _ = require('lodash'); const reg = require('../reg/registration'); @@ -44,7 +46,7 @@ function getMobileComplete(user) { // POST /users router.post('/', async (req, res) => { tools.mylog("POST /users"); - const body = _.pick(req.body, ['email', 'password', 'username', 'name', 'surname', 'idapp', 'keyappid', 'lang', 'profile', 'aportador_solidario', 'already_registered']); + const body = _.pick(req.body, ['email', 'password', 'username', 'name', 'surname', 'idapp', 'keyappid', 'lang', 'profile', 'aportador_solidario']); const user = new User(body); // tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp); @@ -53,6 +55,8 @@ router.post('/', async (req, res) => { user.verified_email = false; user.ipaddr = reg.getiPAddressUser(req); user.lasttimeonline = new Date(); + user.date_reg = new Date(); + user.date_temp_reg = new Date(); // user.perm = 3; if (tools.testing()) { user.verified_email = true; @@ -86,9 +90,34 @@ router.post('/', async (req, res) => { let recextra = null; - if (user.already_registered) { + recextra = await ExtraList.findByCellAndNameSurname(user.idapp, getMobileComplete(user), user.name, user.surname); + let nomeaportador_corretto = ""; + if (recextra) { + nomeaportador_corretto = recextra.aportador_solidario_name_surname; + if (nomeaportador_corretto === '') + nomeaportador_corretto = recextra.aportador_solidario_originale_name_surname; + } + + + namesurname_aportador_reg = await User.getNameSurnameByUsername(user.idapp, user.aportador_solidario); + + if (namesurname_aportador_reg !== '' && namesurname_aportador_reg !== nomeaportador_corretto) { + // Si sta tentando di registrare una persona sotto che non corrisponde! + let msg = 'L\'utente ' + user.name + ' ' + user.surname + ' si sta registrando con il link di ' + user.aportador_solidario + ' (' + namesurname_aportador_reg + ') ' + + 'invece è assegnato a ' + nomeaportador_corretto; + + telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); + res.status(400).send({ code: server_constants.RIS_CODE_USER_NOT_THIS_APORTADOR, msg: '' }); + return 1; + } + + const already_registered = recextra; + + + // Check if is an other people aportador_solidario + + if (already_registered) { // Check in the extraList if is present! - recextra = await ExtraList.findByCellAndNameSurname(user.idapp, getMobileComplete(user), user.name, user.surname); if (!recextra) { res.status(400).send({ code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, msg: '' }); return 1; @@ -102,6 +131,15 @@ router.post('/', async (req, res) => { user.aportador_solidario_ind_order = recextra.aportador_solidario_ind_order; + user.note = recextra.note; + + if (recextra.is_staff) { + user.perm = shared_consts.Permissions.Manager; + } + if (recextra.username === 'paoloar77') { + user.perm = shared_consts.Permissions.Manager + shared_consts.Permissions.Admin; + } + const useraportador = await ExtraList.findByIndOrder(user.idapp, user.aportador_solidario_ind_order); if (useraportador) user.aportador_solidario = useraportador.username; diff --git a/src/server/sendemail.js b/src/server/sendemail.js index 844617d..4d976ed 100644 --- a/src/server/sendemail.js +++ b/src/server/sendemail.js @@ -5,7 +5,7 @@ require('./config/config'); const Email = require('email-templates'); -var i18n = require("i18n"); +const i18n = require("i18n"); const { ObjectID } = require('mongodb'); const { Settings } = require('./models/settings'); @@ -145,13 +145,13 @@ module.exports = { strlinkreg = tools.getHostByIdApp(idapp) + process.env.LINKVERIF_REG + `?idapp=${idapp}&idlink=${idreg}`; return strlinkreg; }, - getlinkRequestNewPassword: function (idapp, user, tokenforgot) { - strlinkreg = tools.getHostByIdApp(idapp) + "/#" + process.env.LINK_REQUEST_NEWPASSWORD + `?idapp=${idapp}&username=${user}&=tokenforgot=${tokenforgot}`; + getlinkRequestNewPassword: function (idapp, username, tokenforgot) { + strlinkreg = tools.getHostByIdApp(idapp) + "/#" + process.env.LINK_REQUEST_NEWPASSWORD + `?idapp=${idapp}&username=${username}&=tokenforgot=${tokenforgot}`; return strlinkreg; }, sendEmail_Registration: async function (lang, emailto, user, idapp, idreg) { - console.log('idapp', idapp, tools.getNomeAppByIdApp(idapp)); + // console.log('idapp', idapp, tools.getNomeAppByIdApp(idapp)); mylocalsconf = { idapp, @@ -178,7 +178,7 @@ module.exports = { this.sendEmail_base('admin/registration/' + tools.LANGADMIN, tools.getManagerEmailByIdApp(idapp), mylocalsconf, ''); } }, - sendEmail_RequestNewPassword: async function (lang, emailto, idapp, tokenforgot) { + sendEmail_RequestNewPassword: async function (lang, user, emailto, idapp, tokenforgot) { mylocalsconf = { idapp, @@ -186,7 +186,10 @@ module.exports = { locale: lang, nomeapp: tools.getNomeAppByIdApp(idapp), user: user, - strlinksetpassword: this.getlinkRequestNewPassword(idapp, user, tokenforgot), + name: user.name, + username: user.username, + surname: user.surname, + strlinksetpassword: this.getlinkRequestNewPassword(idapp, user.username, tokenforgot), emailto: emailto, }; @@ -216,7 +219,7 @@ module.exports = { mylocalsconf.msgreply_after_booking = ris; if (recbooking.numpeople > 1) - mylocalsconf.participants = recbooking.numpeople.toString() + ' ' + res.__("partecipanti"); + mylocalsconf.participants = recbooking.numpeople.toString() + ' ' + tools.getres__('partecipanti', res); let texthtml = ''; if (recbooking.modified) { @@ -256,7 +259,7 @@ module.exports = { }; if (recbooking.numpeople > 1) - mylocalsconf.participants = recbooking.numpeople.toString() + ' ' + res.__("partecipanti"); + mylocalsconf.participants = recbooking.numpeople.toString() + ' ' + tools.getres__('partecipanti', res); this.sendEmail_base('booking/cancelbooking/' + lang, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp)); diff --git a/src/server/server.js b/src/server/server.js index fa8bf5e..9b35390 100644 --- a/src/server/server.js +++ b/src/server/server.js @@ -55,6 +55,7 @@ const todos_router = require('./router/todos_router'); const test_router = require('./router/test_router'); const projects_router = require('./router/projects_router'); const users_router = require('./router/users_router'); +const notevole_router = require('./router/notevole_router'); const admin_router = require('./router/admin_router'); const { MyEvent } = require('./models/myevent'); @@ -90,6 +91,7 @@ app.use(bodyParser.json()); i18n.configure({ locales: ['it', 'en', 'es'], + // cookie: 'cook', directory: __dirname + '/locales' }); @@ -99,6 +101,7 @@ app.use(cors({ app.use(bodyParser.json()); +// app.use(express.cookieParser()); app.use(i18n.init); @@ -116,6 +119,7 @@ app.use('/todos', todos_router); app.use('/test', test_router); app.use('/projects', projects_router); app.use('/users', users_router); +app.use('/ayni', notevole_router); app.use('/admin', admin_router); // catch 404 and forward to error handler @@ -178,11 +182,13 @@ if (process.env.PROD !== 1) { // testmsgwebpush(); // sendemail.testemail('2', 'it'); - // let crypt = tools.cryptdata(''); - // let decrypt = tools.decryptdata(crypt); +/* + let crypt = tools.cryptdata(''); + let decrypt = tools.decryptdata(crypt); - // console.log('crypted:', crypt); - // console.log('decrypted:', decrypt); + console.log('crypted:', crypt); + console.log('decrypted:', decrypt); +*/ mycron(); } @@ -221,11 +227,13 @@ function startserv() { // Check if is Empty (new Server Data) +/* cfgserver.countDocuments(function (err, count) { if (!err && count === 0) { populateDBadmin(); } }); +*/ } @@ -273,4 +281,14 @@ telegrambot.sendMsgTelegramByIdTelegram('7', telegrambot.ADMIN_IDTELEGRAM_SERVER // telegrambot.sendMsgTelegramToTheManagers('7', 'PROVAAA!'); +// if (process.env.PROD !== 1) { +// const reg = require('./reg/registration'); +// const link = reg.getlinkregByEmail('7', 'tomasihelen@dasdasgmail.comAAAA' , 'HelenTomasidasdasd'); +// const link2 = reg.getlinkregByEmail('7', 'tomasihelen@gmail.com' , 'HelenTomasi'); +// //const link2 = reg.getlinkregByEmail('7', 'elenaliubicich@gmail.com' , 'Elenaliu'); +// +// console.log(link); +// console.log(link2); +// } + module.exports = { app }; diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index 36a6662..ff7c151 100644 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -8,18 +8,79 @@ const { User } = require('../models/user'); const emoji = require('node-emoji'); +const i18n = require("i18n"); + const Benvenuto = emoji.get('heartbeat') + emoji.get('heartbeat') + emoji.get('heartbeat') + ' Benvenuto!'; +const emo = { + DREAM: emoji.get('beach_with_umbrella'), + EYES: emoji.get('eyes'), + DIZZY: emoji.get('dizzy'), + ONE_HUNDRED: emoji.get('100'), + SMILE_STAR: emoji.get('star-struck'), + CHECK_VERDE: emoji.get('white_check_mark'), + CHECK_GRIGIA: emoji.get('ballot_box_with_check'), + CROSS_ROSSA: emoji.get('x'), + ENVELOPE: emoji.get('envelope'), + EXCLAMATION_MARK: emoji.get('exclamation'), + QUESTION_MARK: emoji.get('question'), + ARROW_RIGHT: emoji.get('arrow_right'), + INVITATI: emoji.get('man_and_woman_holding_hands'), + HEART: emoji.get('heart'), + BLUE_HEART: emoji.get('blue_heart'), + GREEN_HEART: emoji.get('green_heart'), + YELLOW_HEART: emoji.get('yellow_heart'), + PURPLE_HEART: emoji.get('purple_heart'), + GIFT_HEART: emoji.get('gift_heart'), +}; + +function getemojibynumber(number) { + if (number === 0) { + return emoji.get('zero') + } else if (number === 1) { + return emoji.get('one') + } else if (number === 2) { + return emoji.get('two') + } else if (number === 3) { + return emoji.get('three') + } else if (number === 4) { + return emoji.get('four') + } else if (number === 5) { + return emoji.get('five') + } else if (number === 6) { + return emoji.get('six') + } else if (number === 7) { + return emoji.get('seven') + } else if (number === 8) { + return emoji.get('height') + } else if (number === 9) { + return emoji.get('nine') + } +} + const Menu = { LAVAGNA: emoji.get('om_symbol') + ' La tua Lavagna', LINK_CONDIVIDERE: emoji.get('link') + ' Link da condividere', INFO: emoji.get('information_source') + ' Informazioni', ASSISTENZA: emoji.get('open_hands') + ' Assistenza', + ADMIN: emoji.get('information_desk_person') + ' Admin', + ALTRO: emoji.get('newspaper') + ' Altro', + MSGATUTTI: emoji.get('incoming_envelope') + ' Invia a TUTTI', + INDIETRO: emoji.get('back') + ' Indietro', + SI: emoji.get('thumbsup') + ' SI', + NO: emoji.get('thumbsdown') + ' NO', + EXIT_TELEGRAM: 'exittotelegram', }; + const MenuStandard = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.INFO, Menu.ASSISTENZA]]; +const MenuPerAdmin = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.INFO, Menu.ASSISTENZA], [Menu.ADMIN, Menu.ALTRO]]; +const MenuYesNo = [[Menu.SI, Menu.NO]]; + +const MenuAdmin = [[Menu.MSGATUTTI, Menu.INDIETRO], ['', '']]; +const MenuYes = [[Menu.MSGATUTTI, Menu.INDIETRO], ['', '']]; const Status = { NONE: 0, @@ -28,19 +89,27 @@ const Status = { WAITFOR_VERIFY_CODE: 103, }; +const StatusMSGALL = { + NONE: 0, + ASK: 1, + CONFIRM: 2, +}; + const txt = { MSG_SCEGLI_MENU: emoji.get('dizzy') + ' Scegli una voce di menu:' + emoji.get('dizzy'), MSG_ASK_USERNAME_BO: 'Inserire lo username con cui ti sei registrato sul sito:', MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (20 caratteri massimo)', MSG_ERRORE_USERNAME_NOT_FOUND: 'Attenzione! Username non trovato in archivio. Verifica che sia corretto.', - MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato.', + MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato. Riprovare', + MSG_OPERAZ_ANNULLATA: 'Operazione Annullata', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attenzione! Devi inserire solo il codice a 6 cifre', - MSG_VERIFY_CODE: 'Vai sul sito e aggiorna la pagina (REFRESH) e scrivi qui il Codice di Autenticazione che vedrai visualizzato', + MSG_VERIFY_CODE: 'Vai sul sito e scrivi qui il Codice di Autenticazione che vedrai visualizzato', MSG_ERR_VERIFY_CODE: 'Codice di Verifica Errato! Controllare sul Sito e reinserire il nuovo codice di 6 cifre.', MSG_VERIFY_OK: emoji.get('grinning') + ' Benvenuto %s. Ora sei correttamente verificato!', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Errore durante il salvataggio sul Server. Riprovare piú tardi', MSG_EXIT_TELEGRAM: 'L\'account è stato ora scollegato da questo Telegram BOT.', MSG_APORTADOR_USER_REGISTERED: emoji.get('heart_eyes') + ' Si è appena Registrato con il tuo link:\n%s', + MSG_MSG_SENT: emoji.get('envelope') + ' Messaggi Inviati !', }; const TelegramBot = require('node-telegram-bot-api'); @@ -57,15 +126,23 @@ module.exports = { notifyToTelegram: async function (phase, mylocalsconf) { let userdest = mylocalsconf.user.aportador_solidario; - let NameFrom = `${mylocalsconf.user.name} ${mylocalsconf.user.surname} (${userdest})`; + let NameFrom = `${mylocalsconf.user.name} ${mylocalsconf.user.surname}`; + + let aportador = ''; + if (userdest) + aportador = ` (${userdest})`; + + NameFrom += aportador; let text = ''; if (phase === this.phase.REGISTRATION) { - NameFrom = await User.getNameSurnameByUsername(mylocalsconf.idapp, userdest) + ` (${userdest})`; - if (!!mylocalsconf.user.aportador_solidario) - text = printf(txt.MSG_APORTADOR_USER_REGISTERED, `${mylocalsconf.user.name} ${mylocalsconf.user.surname} (${mylocalsconf.user.username})`); + if (userdest) { + NameFrom = await User.getNameSurnameByUsername(mylocalsconf.idapp, userdest) + aportador; + } + text = printf(txt.MSG_APORTADOR_USER_REGISTERED, `${mylocalsconf.user.name} ${mylocalsconf.user.surname} (${mylocalsconf.user.username})`); } - await this.sendMsgTelegram(mylocalsconf.idapp, userdest, text); + if (!!mylocalsconf.user.aportador_solidario) + await this.sendMsgTelegram(mylocalsconf.idapp, userdest, text); await this.sendMsgTelegramToTheManagers(mylocalsconf.idapp, '[Inviato a ' + NameFrom + ']:' + '\n' + text); }, @@ -83,19 +160,33 @@ module.exports = { }, - sendMsgTelegram: async function (idapp, username, text) { - const teleg_id = await User.TelegIdByUsername(idapp, username); - const cl = getclTelegByidapp(idapp); - if (cl && teleg_id) { - cl.sendMsg(teleg_id, text) + sendMsgTelegramToALL: async function (idapp, text) { + const usersall = await User.getUsersTelegALL(idapp); + + if (usersall) { + usersall.forEach((rec) => { + this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, text) + }); } }, - sendMsgTelegramByIdTelegram: function (idapp, idtelegram, text) { + sendMsgTelegram: async function (idapp, username, text) { + const teleg_id = await User.TelegIdByUsername(idapp, username); + const cl = getclTelegByidapp(idapp); + if (cl && teleg_id) { + await cl.sendMsg(teleg_id, text) + } + + }, + + sendMsgTelegramByIdTelegram: async function (idapp, idtelegram, text) { + if (!idtelegram) + return; + const cl = getclTelegByidapp(idapp); if (cl && idtelegram) { - cl.sendMsg(idtelegram, text) + await cl.sendMsg(idtelegram, text) } } @@ -115,38 +206,85 @@ class Telegram { this.arrUsers = []; } + async createIfNotExist(msg) { + if (!await this.alreadyExist(msg)) { + if (this.insertIntoDB(msg)) { + let rec = this.getRecInMem(msg); + if (rec.user) + rec.status = Status.VERIFIED + } + return true + } else { + return false + } + } + async start(msg) { - // this.msgBenvenuto(msg.chat.id); - // Check if Present to the DB - if (!await this.alreadyExist(msg)) { - this.insertIntoDB(msg); - } else { + if (!await this.createIfNotExist(msg)) { let rec = this.getRecInMem(msg); if (!rec) rec = this.addUser(msg); - rec.status = Status.VERIFIED + + if (rec.user) + rec.status = Status.VERIFIED } } - isMenu(msg) { - if (msg.text === Menu.LAVAGNA) { - this.menuLavagna(msg) - } else if (msg.text === Menu.LINK_CONDIVIDERE) { - this.menuLinkCondividere(msg) - } else if (msg.text === Menu.ASSISTENZA) { - this.menuAssistenza(msg) + async isMenuNotVerified(rec, msg) { + if (msg.text === Menu.ASSISTENZA) { + await this.menuAssistenza(msg) } else if (msg.text === Menu.INFO) { - this.menuInformazioni(msg) - } else if (msg.text === Menu.EXIT_TELEGRAM) { - this.menuExitToTelegram(msg) + await this.menuInformazioni(msg) } else { - this.msgScegliMenu(msg); + await this.msgScegliMenu(msg); } } + async isMenu(rec, msg) { + if (msg.text === Menu.LAVAGNA) { + await this.menuLavagna(msg) + } else if (msg.text === Menu.LINK_CONDIVIDERE) { + await this.menuLinkCondividere(msg) + } else if (msg.text === Menu.EXIT_TELEGRAM) { + await this.menuExitToTelegram(msg) + } else if (msg.text === Menu.ADMIN) { + await this.menuAdmin(msg) + } else if (msg.text === Menu.MSGATUTTI) { + await this.menumsgAll(msg) + } else if (msg.text === Menu.INDIETRO) { + await this.msgScegliMenu(msg); + } else { + await this.isMenuNotVerified(rec, msg); + } + } + + getsymb(symb, valid, isnum, verdeif, smileif) { + let str = symb + ': '; + if (valid) + str += emo.CHECK_VERDE; + else + str += emo.CROSS_ROSSA; + if (isnum) { + str += ' ' + getemojibynumber(valid); + if (smileif) + str += emo.SMILE_STAR; + } + + return str + ' '; + } + + isdreamset(user) { + if (user) { + if (user.profile.my_dream) + if (user.profile.my_dream.length > 10) + return true + } + return false + } + async menuLavagna(msg) { const rec = this.getRecInMem(msg); // console.log('rec', rec); @@ -155,28 +293,43 @@ class Telegram { const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username); - const numpersone = (dashboard.downline) ? dashboard.downline.length : 0; - if (dashboard.aportador) { - mystr = emoji.get('seedling') + ` Chi ti ha invitato: ${dashboard.aportador.username} (${dashboard.aportador.name} ${dashboard.aportador.surname})\n`; - } else { - mystr = 'Chi ti ha invitato: Sei il Primo! '; + let numpersone = (dashboard.downline) ? dashboard.downline.length : 0; + mystr = ""; + // if (dashboard.aportador) { + // mystr = emoji.get('seedling') + ` Chi ti ha invitato: ${dashboard.aportador.username} (${dashboard.aportador.name} ${dashboard.aportador.surname})\n`; + // } else { + // mystr = 'Chi ti ha invitato: Sei il Primo! '; + // } + // mystr += `____________________________________________\n`; + + if (rec.user) { + mystr += tools.get__('BENVENUTO', msg) + ' ' + rec.user.name + ' ' + emo.DIZZY; + mystr += '\n' + '\n' + this.getsymb(emo.ENVELOPE, rec.user.verified_email); + mystr += rec.user.verified_email ? tools.get__('EMAIL_VERIF', msg) : tools.get__('EMAIL_NON_VERIF', msg); + + mystr += '\n' + '\n' + this.getsymb(emo.EYES, rec.user.profile.saw_zoom_presentation) + tools.get__('ZOOM_PARTECIPATO', msg); + mystr += '\n' + '\n' + this.getsymb(emo.DREAM, this.isdreamset(rec.user)) + tools.get__('SCRITTO_SOGNO', msg); + + // } else{ + // mystr += tools.get__('TELEGRAM_NOT_CONNECTED', msg) + ' ' + emoji.get('e-mail'); } - mystr += `____________________________________________\n`; + + // numpersone = 3; + + mystr += '\n' + '\n' + this.getsymb(emo.INVITATI, numpersone, true, numpersone >= 2, numpersone >= 3) + tools.get__('INVITATI', msg) + '\n'; + if (numpersone > 0) { - mystr += `Persone che hai invitato (${numpersone}):\n`; let index = 1; dashboard.downline.forEach((user) => { mystr += emoji.get('star-struck') + ` ${index}°: ${user.username} (${user.name} ${user.surname})\n`; index++; }); - } else { - mystr += `Attualmente non hai invitato nessuna persona.\n`; } } if (!!mystr) - this.sendMsg(msg.chat.id, mystr); + await this.sendMsg(msg.chat.id, mystr); } @@ -184,7 +337,7 @@ class Telegram { const rec = this.getRecInMem(msg); if (rec.user) { const mystr = tools.getHostByIdApp(this.idapp) + '/signup/' + rec.user.username; - this.sendMsg(msg.chat.id, mystr); + await this.sendMsg(msg.chat.id, mystr); } } @@ -202,12 +355,28 @@ class Telegram { async menuInformazioni(msg) { const mystr = 'Informazioni Aggiuntive: ...'; - this.sendMsg(msg.chat.id, mystr); + await this.sendMsg(msg.chat.id, mystr); + } + + async menuAdmin(msg) { + const mystr = 'scegli una voce:'; + await this.sendMsg(msg.chat.id, mystr, MenuAdmin); + } + + async menumsgAll(msg) { + const rec = this.getRecInMem(msg); + if (rec.user) { + const mystr = 'Scrivi qui un Messaggio da inviare a TUTTI:'; + rec.msgall_status = StatusMSGALL.ASK; + await this.sendMsg(msg.chat.id, mystr, MenuAdmin); + } } async menuAssistenza(msg) { - const mystr = 'Per contattarci usa la chat di gruppo al seguente link: ....'; - this.sendMsg(msg.chat.id, mystr); + + const mytext = tools.get__('TESTO_ASSISTENZA', msg); + + await this.sendMsg(msg.chat.id, mytext); } existInMemory(msg) { @@ -215,14 +384,18 @@ class Telegram { return !!rec } - getstatusInMemory(msg) { - const rec = this.getRecInMem(msg); + getstatus(rec) { if (!!rec) return rec.status; else return Status.NONE; } + getstatusInMemory(msg) { + const rec = this.getRecInMem(msg); + return this.getstatus(rec); + } + getRecInMem(msg) { return this.arrUsers.find((rec) => rec.id === msg.from.id); } @@ -243,20 +416,21 @@ class Telegram { // Check if username exist const user = await User.findByUsername(this.idapp, rec.username_bo); if (!user) { - this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND) + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND) } else { rec.user = user; await User.SetTelegramCheckCode(this.idapp, rec.username_bo, rec.code); rec.status = Status.WAITFOR_VERIFY_CODE; - this.sendMsg(msg.from.id, txt.MSG_VERIFY_CODE) + await this.sendMsg(msg.from.id, txt.MSG_VERIFY_CODE) } } } else if (text.length === 0) { if (rec) rec.status = Status.NONE; - this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA) + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA); + this.deleteRecInMem(msg) } else { - this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME) + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME) } } catch (e) { console.error('Error setUsernameBo:', e) @@ -272,7 +446,7 @@ class Telegram { if (user) { telegcode = user.profile.teleg_checkcode.toString(); } else { - this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND); + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND); return } if (msg.text.length < 7) { @@ -287,24 +461,53 @@ class Telegram { this.sendMsg(msg.from.id, txt.MSG_ERR_UNKNOWN_VERIFY_CODE); } }); - } else { - rec.retry++; - this.sendMsg(msg.from.id, txt.MSG_ERR_VERIFY_CODE) + if (rec.retry < 2) { + rec.retry++; + await this.sendMsg(msg.from.id, txt.MSG_ERR_VERIFY_CODE) + } else { + rec.status = Status.NONE; + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA); + this.deleteRecInMem(msg); + } } } } else if (msg.text.length === 0) { if (rec) rec.status = Status.NONE; - this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA) + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA) } else { - this.sendMsg(msg.from.id, txt.MSG_ERRORE_VERIFY_CODE_MAXLEN) + await this.sendMsg(msg.from.id, txt.MSG_ERRORE_VERIFY_CODE_MAXLEN) } } catch (e) { console.error('Error setVerifyCode', e); } } + async sendMsgToAll(rec, msg, texttosend) { + if (texttosend.length < 3) { + } else { + const usersall = await User.getUsersTelegALL(rec.user.idapp); + + let nummsgsent = 0; + + if (usersall) { + for (const rec of usersall) { + await this.sendMsg(rec.profile.teleg_id, texttosend); + nummsgsent++; + } + } + + await this.sendMsg(msg.chat.id, nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_SENT)); + } + rec.start_write_msgall = false; + + } + + selectMenuHelp(msg) { + return ((msg.text === Menu.INFO) || (msg.text === Menu.ASSISTENZA)) + } + async receiveMsg(msg) { let status = this.getstatusInMemory(msg); if (status === Status.NONE) { @@ -312,18 +515,49 @@ class Telegram { let status = this.getstatusInMemory(msg); if (status !== Status.VERIFIED) return + } else { + await this.setUser(msg) } - status = this.getstatusInMemory(msg); - if (status === Status.WAITFOR_USERNAME_BO) { + const rec = this.getRecInMem(msg); + + status = this.getstatus(rec); + if (status === Status.WAITFOR_USERNAME_BO && !this.selectMenuHelp(msg)) { await this.setUsernameBo(msg) } else if (status === Status.WAITFOR_VERIFY_CODE) { await this.setVerifyCode(msg) } else if (status === Status.NONE) { await this.start(msg); } else if (status === Status.VERIFIED) { - // Check Menu - await this.isMenu(msg); + let normale = true; + if (rec.msgall_status === StatusMSGALL.CONFIRM) { + if (msg.text === Menu.SI) { + // Take msg to send to ALL + await this.sendMsgToAll(rec, msg, rec.msgtosent) + } else { + this.sendMsg(msg.chat.id, txt.MSG_OPERAZ_ANNULLATA); + } + rec.msgall_status = StatusMSGALL.NONE; + normale = false; + } else if (rec.msgall_status === StatusMSGALL.ASK) { + if (msg.text !== Menu.INDIETRO) { + rec.msgtosent = msg.text; + rec.msgall_status = StatusMSGALL.CONFIRM; + const domanda = 'Confermi d\'Inviare questo messaggio a TUTTI ?\n' + rec.msgtosent; + this.ChiediSINO(msg, domanda); + } else { + rec.msgall_status = StatusMSGALL.NONE; + await this.msgScegliMenu(msg); + } + normale = false + } + + if (normale) { + // Check Menu + await this.isMenu(rec, msg); + } + } else { + await this.isMenuNotVerified(rec, msg); } } @@ -333,22 +567,42 @@ class Telegram { if (!rec) { await this.addUser(msg); - this.sendMsg(msg.chat.id, getstr(msg.from.language_code, txt.MSG_ASK_USERNAME_BO)); + await this.sendMsg(msg.chat.id, getstr(msg.from.language_code, txt.MSG_ASK_USERNAME_BO)); + + return false; + } + return true; + + } + + async setUser(msg) { + const id = msg.from.id; + const user = await User.UserByIdTelegram(this.idapp, id); + let rec = this.arrUsers.find((rec) => rec.id === msg.from.id); + if (user && rec) { + rec.user = user; } } async alreadyExist(msg) { const id = msg.from.id; - - const user = await User.UserByIdTelegram(this.idapp, id); - let rec = this.arrUsers.find((rec) => rec.id === msg.from.id); - if (user && !rec) { - rec = this.addUser(msg); - } - if (rec) { - rec.user = user; - rec.username_bo = user.username_bo + let rec = null; + try { + const user = await User.UserByIdTelegram(this.idapp, id); + let rec = this.arrUsers.find((rec) => rec.id === msg.from.id); + if (user && !rec) { + rec = this.addUser(msg); + } + if (rec) { + rec.user = user; + if (user) + rec.username_bo = user.username; + else + rec.username_bo = '' + } + } catch (e) { + console.error('Error: ', e); } return !!rec } @@ -363,7 +617,9 @@ class Telegram { lang, status: Status.WAITFOR_USERNAME_BO, retry: 0, - username_bo: '' + username_bo: '', + msgall_status: StatusMSGALL.NONE, + msgtosent: '', }; this.arrUsers.push(rec); @@ -374,32 +630,62 @@ class Telegram { insertIntoDB(msg) { - this.askVerifiedCode(msg); + return this.askVerifiedCode(msg); } - sendMsg(id, text) { + async getKeyboard(id, menu) { + let keyb = MenuStandard; + // Check if you are Admin + const ismanager = await User.isManagerByIdTeleg(this.idapp, id); + if (ismanager) + keyb = MenuPerAdmin; + if (menu) { + keyb = menu + } + + return keyb + } + + async sendMsg(id, text, menu) { + if (!text) + return; + this.bot.sendMessage(id, text, { "reply_markup": { - "keyboard": MenuStandard + "resize_keyboard": true, + "keyboard": await this.getKeyboard(id, menu) } }); } - msgBenvenuto(id) { + async msgBenvenuto(id) { this.bot.sendMessage(id, Benvenuto, { "reply_markup": { - "keyboard": MenuStandard + "resize_keyboard": true, + "keyboard": await this.getKeyboard(id) } }); } - msgScegliMenu(msg) { + async ChiediSINO(msg, domanda) { + this.bot.sendMessage(msg.from.id, domanda, { + "reply_markup": { + "resize_keyboard": true, + 'one_time_keyboard': true, + "keyboard": MenuYesNo + } + }); + } + + async msgScegliMenu(msg) { + // const rec = this.getRecInMem(msg); this.bot.sendMessage(msg.from.id, txt.MSG_SCEGLI_MENU, { "reply_markup": { - "keyboard": MenuStandard + "resize_keyboard": true, + "keyboard": await this.getKeyboard(msg.from.id) } }); } diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 60a448b..cc38cd8 100644 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -1,4 +1,4 @@ -var os = require("os"); +const os = require("os"); const fs = require('fs'); @@ -8,7 +8,7 @@ require('../models/subscribers'); const CryptoJS = require('crypto-js'); -var Url = require('url-parse'); +const Url = require('url-parse'); const { ObjectID } = require('mongodb'); @@ -36,6 +36,56 @@ webpush.setVapidDetails(subject, publicVapidKey, privateVapidKey); // console.log('setVapidDetails... config...'); + + +// To Translate! +textlang = { + it: { + "L'Email è già stata Verificata": "L'Email è già stata Verificata", + "Nuova Registrazione": "Nuova Registrazione", + "Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione", + "partecipanti": "partecipanti", + 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.", + 'BENVENUTO': "Benvenuto", + 'EMAIL_VERIF': "Email Verificata", + 'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**", + 'TELEGRAM_NOT_CONNECTED': "Telegram non associato al tuo account!", + 'NESSUN_INVITATO': 'Non hai invitato nessuno', + 'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)', + 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', + 'INVITATI': 'persone registrate che hai invitato', + }, + es: { + "L'Email è già stata Verificata": "L'Email è già stata Verificata", + "Nuova Registrazione": "Nuevo Registro", + "Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro", + "partecipanti": "participantes", + + 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.", + 'BENVENUTO': "Benvenuto", + 'EMAIL_VERIF': "Email Verificata", + 'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**", + 'TELEGRAM_NOT_CONNECTED': "Telegram non associato al tuo account!", + 'NESSUN_INVITATO': 'Non hai invitato nessuno', + 'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)', + 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', + 'INVITATI': 'persone registrate che hai invitato', + }, + us: { + "partecipanti": "participants", + 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.", + 'BENVENUTO': "Benvenuto", + 'EMAIL_VERIF': "Email Verificata", + 'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**", + 'TELEGRAM_NOT_CONNECTED': "Telegram non associato al tuo account!", + 'NESSUN_INVITATO': 'Non hai invitato nessuno', + 'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)', + 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', + 'INVITATI': 'persone registrate che hai invitato', + } +}; + + module.exports = { INITDB_FIRSTIME: true, @@ -64,6 +114,35 @@ module.exports = { FIRST_PROJ: '__PROJECTS', EXECUTE_CALCPROJ: true, + gettranslate(text, lang) { + try { + return textlang[lang][text] + }catch (e) { + return textlang['it'][text] + } + }, + + get__(text, msg) { + let lang = 'it'; + if (msg) + lang = msg.from.language_code; + try { + return textlang[lang][text] + }catch (e) { + return textlang['it'][text] + } + }, + + getres__(text, res) { + // ++Todo: res estrarre la lingua + let lang = 'it'; + try { + return textlang[lang][text] + }catch (e) { + return textlang['it'][text] + } + }, + getHostname: function () { return os.hostname() }, @@ -173,9 +252,9 @@ module.exports = { }); return false; } else { - let conta = 0 + let conta = 0; let parallelSubscriptionCalls = subscriptions.map((subscription) => { - const trovati = subscriptions.length + const trovati = subscriptions.length; return new Promise((resolve, reject) => { const pushSubscription = { endpoint: subscription.endpoint, @@ -721,7 +800,7 @@ module.exports = { }else if (campi.length > 4) { namesurname.name = campi[0] + " " + campi[1]; namesurname.surname = " " + campi[2]; - for (const ind = 3; ind < campi.length; ind++) { + for (let ind = 3; ind < campi.length; ind++) { namesurname.surname += " " + campi[ind]; } } diff --git a/src/server/tools/server_constants.js b/src/server/tools/server_constants.js index 171bc8c..48f8c42 100644 --- a/src/server/tools/server_constants.js +++ b/src/server/tools/server_constants.js @@ -6,9 +6,11 @@ module.exports = Object.freeze({ RIS_CODE_EMAIL_ALREADY_VERIFIED: -5, RIS_CODE_EMAIL_VERIFIED: 1, + RIS_CODE_USER_NOT_THIS_APORTADOR: -75, RIS_CODE_USER_EXTRALIST_NOTFOUND: -70, RIS_CODE_USERNAME_ALREADY_EXIST: -60, RIS_CODE_EMAIL_ALREADY_EXIST: -50, + RIS_CODE_EMAIL_NOT_EXIST: -45, RIS_CODE_EMAIL_NOT_SENT: -40, RIS_CODE_ERR_UNAUTHORIZED: -30, RIS_CODE_LOGIN_ERR_GENERIC: -20, diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 73bb5e0..45a1b6f 100644 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -12,7 +12,7 @@ module.exports = { }, fieldsUserToChange() { - return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'ipaddr', 'lasttimeonline', 'profile', 'news_on', 'aportador_solidario', 'made_gift'] + return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'date_temp_reg', 'verified_email', 'ipaddr', 'lasttimeonline', 'profile', 'calcstat', 'news_on', 'aportador_solidario', 'made_gift'] } };