From 2f92dfe5b00d9e082bb04d0ee8a8cf9420aa068f Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Wed, 5 Feb 2025 12:13:27 +0100 Subject: [PATCH] Cataloghi... --- src/server/models/catalog.js | 27 +- src/server/models/collana.js | 5 +- src/server/models/myelem.js | 22 +- src/server/models/myscheda.js | 2 +- src/server/models/user.js | 3 + src/server/populate/contribtypes.js | 230 ++++++------ src/server/router/admin_router.js | 6 +- src/server/router/index_router.js | 83 +++-- src/server/router/users_router.js | 549 ++++++++++++++-------------- src/server/server.js | 6 +- src/server/telegram/telegrambot.js | 17 +- src/server/tools/general.js | 4 +- src/server/tools/shared_nodejs.js | 2 +- 13 files changed, 498 insertions(+), 458 deletions(-) diff --git a/src/server/models/catalog.js b/src/server/models/catalog.js index ea2d662..eb4d5ff 100755 --- a/src/server/models/catalog.js +++ b/src/server/models/catalog.js @@ -42,13 +42,13 @@ const CatalogSchema = new Schema({ type: String, }, foto_collana: Foto, - idCollana: { - type: String, - }, + idCollane: [{ + type: Number, + }], descr_introduttiva: { type: String, }, - idTemplateScheda: { + idPageAssigned: { type: String, }, referenti: [{ @@ -92,9 +92,24 @@ CatalogSchema.statics.executeQueryTable = function (idapp, params, user) { CatalogSchema.statics.findAllIdApp = async function (idapp) { const Catalog = this; - const myfind = { idapp }; + const arrrec = await Catalog.aggregate([ + // Filtra i documenti per idapp + { $match: { idapp } }, - const arrrec = await Catalog.find(myfind).lean().sort({ title: 1 }); + // Ordina i risultati per titolo + { $sort: { title: 1 } }, + + // Esegui il join con la collezione Collana + { + $lookup: { + from: "collanas", // Nome della collezione Collana + localField: "idCollane", // Campo in Catalog + foreignField: "idCollana", // Campo in Collana + as: "collana_info" // Nome del campo che conterrà i risultati del join + } + }, + + ]); return arrrec; }; diff --git a/src/server/models/collana.js b/src/server/models/collana.js index d77dcd2..e2470c5 100755 --- a/src/server/models/collana.js +++ b/src/server/models/collana.js @@ -18,10 +18,7 @@ const CollanaSchema = new Schema({ idCollana: { type: Number, }, - descrizione: { - type: String, - }, - descrizione_estesa: { + title: { type: String, }, dataOra: { diff --git a/src/server/models/myelem.js b/src/server/models/myelem.js index b20d54f..ac21d01 100755 --- a/src/server/models/myelem.js +++ b/src/server/models/myelem.js @@ -60,7 +60,7 @@ const catalogo = new Schema( excludeproductTypes: [{ type: Number }], editore: [{ type: String }], argomenti: [{ type: String }], - idCollana: { type: Number }, + idCollane: [{ type: Number }], sort_field: { type: String }, sort_dir: { type: Number }, pdf: { type: Boolean }, @@ -361,7 +361,21 @@ MyElemSchema.statics.findAllIdApp = async function (idapp) { const myfind = { idapp }; - const arrrec = await MyElem.find(myfind).lean().sort({ order: 1 }); + const aggiorna = false; + + let arrrec = null; + + if (aggiorna) { + arrrec = await MyElem.find(myfind).sort({ order: 1 }); + for (const elem of arrrec) { + if (elem.heightimg === 'NaNpx') { + elem.heightimg = ''; + await elem.save(); + } + } + } else { + arrrec = await MyElem.find(myfind).lean().sort({ order: 1 }); + } return arrrec; }; @@ -374,13 +388,13 @@ MyElemSchema.statics.findallSchedeTemplate = async function (idapp) { const ris = await MyElem.find({ idapp }).lean(); const schedeTemplate = ris.flatMap(elem => - elem.catalogo && elem.catalogo.arrSchede ? + elem.catalogo && elem.catalogo.arrSchede ? elem.catalogo.arrSchede .filter(scheda => scheda.scheda?.isTemplate) .map(scheda => ({ ...scheda, // mantieni i dati originali della scheda idPageOrig: elem.idPage // aggiungi l'idPage - })) + })) : [] ); diff --git a/src/server/models/myscheda.js b/src/server/models/myscheda.js index e6022f5..e2c3156 100755 --- a/src/server/models/myscheda.js +++ b/src/server/models/myscheda.js @@ -130,7 +130,7 @@ const scheletroScheda = { excludeproductTypes: [{ type: Number }], editore: [{ type: String }], argomenti: [{ type: String }], - idCollana: { type: Number }, + idCollane: [{ type: Number }], author: { type: String }, sort_field: { type: String }, sort_dir: { type: Number }, diff --git a/src/server/models/user.js b/src/server/models/user.js index 5490b14..7fc0904 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -870,6 +870,9 @@ UserSchema.statics.findByCredentials = function (idapp, username, password, pwdc UserSchema.statics.findByUsername = async function (idapp, username, alsoemail, onlyifVerifiedByAportador) { const User = this; + if (!username) + return null; + const myreg = ['^', username, '$'].join(''); let regexusername = new RegExp(myreg, 'i'); diff --git a/src/server/populate/contribtypes.js b/src/server/populate/contribtypes.js index 46b03e5..d6826c8 100644 --- a/src/server/populate/contribtypes.js +++ b/src/server/populate/contribtypes.js @@ -1,189 +1,189 @@ -const {ObjectId} = require('mongodb'); +const { ObjectId } = require('mongodb'); module.exports = { list: [ { - "_id" : ObjectId("615a353c002c8298f4495be7"), - "idapp" : "1", - "label" : "Dono", - "__v" : 0 + "_id": ObjectId("615a353c002c8298f4495be7"), + "idapp": "1", + "label": "Dono", + "__v": 0 }, { - "_id" : ObjectId("61bc466567de9a1f54b25494"), - "idapp" : "1", - "label" : "Offerta Libera", - "__v" : 0 + "_id": ObjectId("61bc466567de9a1f54b25494"), + "idapp": "1", + "label": "Offerta Libera", + "__v": 0 }, { - "_id" : ObjectId("61bc454867de9a1f54b25462"), - "idapp" : "1", - "label" : "Baratto (scambio Beni o Servizi)", - "__v" : 0 + "_id": ObjectId("61bc454867de9a1f54b25462"), + "idapp": "1", + "label": "Baratto (scambio Beni o Servizi)", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f54b2549c"), - "idapp" : "1", - "label" : "Scambio Lavoro", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f54b2549c"), + "idapp": "1", + "label": "Scambio Lavoro", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f54b2649c"), - "idapp" : "1", - "label" : "Monete Alternative", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f54b2649c"), + "idapp": "1", + "label": "Monete Alternative", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f54b3549e"), - "idapp" : "1", - "label" : "Euro", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f54b3549e"), + "idapp": "1", + "label": "Euro", + "__v": 0 }, { - "_id" : ObjectId("615a353c002c8298f4495bf7"), - "idapp" : "12", - "label" : "Dono", - "__v" : 0 + "_id": ObjectId("615a353c002c8298f4495bf7"), + "idapp": "12", + "label": "Dono", + "__v": 0 }, { - "_id" : ObjectId("61bc466567de9a1f54b254f4"), - "idapp" : "12", - "label" : "Offerta Libera", - "__v" : 0 + "_id": ObjectId("61bc466567de9a1f54b254f4"), + "idapp": "12", + "label": "Offerta Libera", + "__v": 0 }, { - "_id" : ObjectId("61bc454867de9a1f54b254f2"), - "idapp" : "12", - "label" : "Baratto", - "__v" : 0 + "_id": ObjectId("61bc454867de9a1f54b254f2"), + "idapp": "12", + "label": "Baratto", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f54b25412"), - "idapp" : "12", - "label" : "Scambio Lavoro", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f54b25412"), + "idapp": "12", + "label": "Scambio Lavoro", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f64b254ab"), - "idapp" : "12", - "label" : "Monete Alternative", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f64b254ab"), + "idapp": "12", + "label": "Monete Alternative", + "__v": 0 }, { - "_id" : ObjectId("61bc482667de9a1f64b254fb"), - "idapp" : "12", - "label" : "Euro", - "__v" : 0 + "_id": ObjectId("61bc482667de9a1f64b254fb"), + "idapp": "12", + "label": "Euro", + "__v": 0 }, { - "_id" : ObjectId("5dbc6b0801234f629f75e98d"), - "idapp" : "2", - "__v" : 0, - "label" : "Offerta Libera" + "_id": ObjectId("5dbc6b0801234f629f75e98d"), + "idapp": "2", + "__v": 0, + "label": "Offerta Libera" }, /* 2 */ { - "_id" : ObjectId("5dbc6b1001234f629f75e98e"), - "idapp" : "2", - "__v" : 0, - "label" : "Ingresso Gratuito" + "_id": ObjectId("5dbc6b1001234f629f75e98e"), + "idapp": "2", + "__v": 0, + "label": "Ingresso Gratuito" }, /* 3 */ { - "_id" : ObjectId("5dbc6b1801234f629f75e98f"), - "idapp" : "2", - "__v" : 0, - "label" : "Contributo", - "showprice" : true + "_id": ObjectId("5dbc6b1801234f629f75e98f"), + "idapp": "2", + "__v": 0, + "label": "Contributo", + "showprice": true }, /* 4 */ { - "_id" : ObjectId("5dbc6b3001234f629f75e990"), - "idapp" : "2", - "__v" : 0 + "_id": ObjectId("5dbc6b3001234f629f75e990"), + "idapp": "2", + "__v": 0 }, { - "_id" : ObjectId("602c315137d9f0738ded312f"), - "idapp" : "10", - "__v" : 0, - "label" : "Contributo", - "showprice" : true + "_id": ObjectId("602c315137d9f0738ded312f"), + "idapp": "10", + "__v": 0, + "label": "Contributo", + "showprice": true }, /* 7 */ { - "_id" : ObjectId("602c316037d9f0738ded3132"), - "idapp" : "10", - "__v" : 0, - "label" : "Gratuito" + "_id": ObjectId("602c316037d9f0738ded3132"), + "idapp": "10", + "__v": 0, + "label": "Gratuito" }, /* 8 */ { - "_id" : ObjectId("60514b3f733ce468d09366f2"), - "idapp" : "10", - "__v" : 0, - "label" : "Evento ONLINE Gratuito" + "_id": ObjectId("60514b3f733ce468d09366f2"), + "idapp": "10", + "__v": 0, + "label": "Evento ONLINE Gratuito" }, { - "_id" : ObjectId("515a353c002c8298f4495bf7"), - "idapp" : "13", - "label" : "Dono", - "__v" : 0 + "_id": ObjectId("515a353c002c8298f4495bf7"), + "idapp": "13", + "label": "🎁 Dono", + "__v": 0 }, { - "_id" : ObjectId("51bc466567de9a1f54b254f4"), - "idapp" : "13", - "label" : "Offerta Libera", - "__v" : 0 + "_id": ObjectId("51bc466567de9a1f54b254f4"), + "idapp": "13", + "label": "💸 Offerta Libera", + "__v": 0 }, { - "_id" : ObjectId("51bc454867de9a1f54b254f2"), - "idapp" : "13", - "label" : "Baratto", - "__v" : 0 + "_id": ObjectId("51bc454867de9a1f54b254f2"), + "idapp": "13", + "label": "🤝 Baratto", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f54b25412"), - "idapp" : "13", - "label" : "Scambio Lavoro", - "__v" : 0 + "_id": ObjectId("51bc482667de9a1f54b25412"), + "idapp": "13", + "label": "💪 Scambio Lavoro", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f64b254ab"), - "idapp" : "13", - "label" : "Monete Alternative", - "__v" : 0 + "_id": ObjectId("51bc482667de9a1f64b254ab"), + "idapp": "13", + "label": "🪙 Monete Alternative", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f64b254ac"), - "idapp" : "13", - "label" : "RIS", - "__v" : 0 + "_id": ObjectId("51bc482667de9a1f64b254ac"), + "idapp": "13", + "label": "🍚 RIS", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f64b254fb"), - "idapp" : "13", - "label" : "Euro", - "__v" : 0 + "_id": ObjectId("51bc482667de9a1f64b254fb"), + "idapp": "13", + "label": "💶 Euro", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f64b254ff"), - "idapp" : "13", - "label" : "Bitcoin", - "__v" : 0 + "_id": ObjectId("51bc482667de9a1f64b254ff"), + "idapp": "13", + "label": "₿ Bitcoin", + "__v": 0 }, { - "_id" : ObjectId("51bc482667de9a1f64b255ff"), - "idapp" : "13", - "label" : "Banca del Tempo", - "__v" : 0 - }, + "_id": ObjectId("51bc482667de9a1f64b255ff"), + "idapp": "13", + "label": "⏳ Banca del Tempo", + "__v": 0 + } ] } diff --git a/src/server/router/admin_router.js b/src/server/router/admin_router.js index 178b9f0..25f2384 100755 --- a/src/server/router/admin_router.js +++ b/src/server/router/admin_router.js @@ -776,7 +776,6 @@ router.post('/import', authenticate, async (req, res) => { let imported = 0; let errors = 0; - const ripopola = true; if (ripopola) { @@ -901,7 +900,8 @@ router.post('/import', authenticate, async (req, res) => { } // Aggiorna la collana solo se non è stata già impostata nel record attuale - if (recproductInfoAttuale && !recproductInfoAttuale.idCollana && product.DescrizioneCollana) { + //if (recproductInfoAttuale && !recproductInfoAttuale.idCollana && product.DescrizioneCollana) { + if (recproductInfoAttuale && product.DescrizioneCollana) { const idCollanaNum = parseInt(product.IdCollana) productInfo.idCollana = idCollanaNum; @@ -909,7 +909,7 @@ router.post('/import', authenticate, async (req, res) => { if (!reccollana) { try { // Non esiste questa collana, quindi la creo ! - reccoll = new Collana({ idapp, idCollana: idCollanaNum, descrizione: product.DescrizioneCollana }); + reccoll = new Collana({ idapp, idCollana: idCollanaNum, title: product.DescrizioneCollana }); ris = await reccoll.save(); } catch (e) { console.error('Err', e); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 96d5daa..450f6b9 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -220,58 +220,65 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, async (req, res) => { // Invio la Nuova Password richiesta dal reset! // Ritorna il token per poter effettuare le chiamate... router.post(process.env.LINK_UPDATE_PWD, async (req, res) => { - const body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'tokenforgot_code', 'password']); - const idapp = body.idapp; - const email = body.email.toLowerCase().trim(); - const tokenforgot = body.tokenforgot; - const tokenforgot_code = body.tokenforgot_code; - const password = body.password; - const msg = 'Richiesta Nuova Password: idapp= ' + idapp + ' email = ' + email; - console.log(msg); + + try { + const body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'tokenforgot_code', 'password']); + const idapp = body.idapp; + const email = body.email.toLowerCase().trim(); + const tokenforgot = body.tokenforgot; + const tokenforgot_code = body.tokenforgot_code; + const password = body.password; + const msg = 'Richiesta Nuova Password: idapp= ' + idapp + ' email = ' + email; + + console.log(msg); - // telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg); + // telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg); - let user = null; + let user = null; - user = await User.findByLinkTokenforgot(idapp, email, tokenforgot) - .then((user) => { - return user; - }).catch((e) => { - console.log(process.env.LINK_UPDATE_PWD, e.message); - res.status(400).send(); - }); - - if (!user) { - user = await User.findByLinkTokenforgotCode(idapp, email, tokenforgot_code) + user = await User.findByLinkTokenforgot(idapp, email, tokenforgot) .then((user) => { return user; }).catch((e) => { console.log(process.env.LINK_UPDATE_PWD, e.message); res.status(400).send(); }); - } - if (!user) { - return res.send( - { code: server_constants.RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND }); - } else { - // aggiorna la nuova password - user.password = password; - user.lasttimeonline = new Date(); + if (!user) { + user = await User.findByLinkTokenforgotCode(idapp, email, tokenforgot_code) + .then((user) => { + return user; + }).catch((e) => { + console.log(process.env.LINK_UPDATE_PWD, e.message); + res.status(400).send(); + }); + } - // Crea token - user.generateAuthToken(req).then(ris => { - user.tokenforgot = ''; // Svuota il tokenforgot perché non ti servirà più... - user.tokenforgot_code = ''; // Svuota il tokenforgot perché non ti servirà più... + if (!user) { + return res.send( + { code: server_constants.RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND }); + } else { + // aggiorna la nuova password + user.password = password; + user.lasttimeonline = new Date(); - // Salva lo User - user.save().then(() => { - res.header('x-auth', ris.token) - .header('x-refrtok', ris.refreshToken) - .send({ code: server_constants.RIS_CODE_OK }); // Ritorna il token di ritorno + // Crea token + user.generateAuthToken(req).then(ris => { + user.tokenforgot = ''; // Svuota il tokenforgot perché non ti servirà più... + user.tokenforgot_code = ''; // Svuota il tokenforgot perché non ti servirà più... + + // Salva lo User + user.save().then(() => { + res.header('x-auth', ris.token) + .header('x-refrtok', ris.refreshToken) + .send({ code: server_constants.RIS_CODE_OK }); // Ritorna il token di ritorno + }); }); - }); + } + } catch (e) { + console.error('Error: ', e); } + }); router.post('/testServer', authenticate_noerror, async (req, res) => { diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index c559b42..0482d94 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -87,308 +87,313 @@ router.post('/test1', async (req, res) => { // POST /users router.post('/', async (req, res) => { - tools.mylog('POST /users'); - const body = _.pick(req.body, [ - 'email', - 'password', - 'username', - 'group', - 'name', - 'surname', - 'idapp', - 'keyappid', - 'lang', - 'profile', - 'aportador_solidario']); - body.email = body.email.toLowerCase(); + try { + tools.mylog('POST /users'); + const body = _.pick(req.body, [ + 'email', + 'password', + 'username', + 'group', + 'name', + 'surname', + 'idapp', + 'keyappid', + 'lang', + 'profile', + 'aportador_solidario']); + body.email = body.email.toLowerCase(); - const user = new User(body); - user.ipaddr = tools.getiPAddressUser(req); + const user = new User(body); + user.ipaddr = tools.getiPAddressUser(req); - user.email = user.email.trim(); - user.username = user.username.trim(); - user.name = user.name.trim(); - user.surname = user.surname.trim(); + user.email = user.email.trim(); + user.username = user.username.trim(); + user.name = user.name.trim(); + user.surname = user.surname.trim(); - if ((user.aportador_solidario === 'tuo_username') || (user.aportador_solidario === '{username}')) { - user.aportador_solidario = 'paoloar77'; - } - - // tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp); - - if (!tools.isAlphaNumericAndSpecialCharacter(body.username) || - body.email.length < 6 || - body.username.length < 4 || body.password.length < 5) { - await tools.snooze(5000); - console.log('Username non valido in Registrazione: ' + body.username); - res.status(400). - send({ code: server_constants.RIS_CODE_USERNAME_NOT_VALID, msg: '' }); - return 1; - } - - if (tools.blockwords(body.username) || tools.blockwords(body.name) || - tools.blockwords(body.surname)) { - // tools.writeIPToBan(user.ipaddr + ': [' + user.username + '] ' + user.name + ' ' + user.surname); - await tools.snooze(5000); - return res.status(404).send(); - } - - user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username); - user.verified_email = false; - user.lasttimeonline = new Date(); - user.date_reg = new Date(); - user.aportador_iniziale = user.aportador_solidario; - - let regexpire = req.body['regexpire']; - let nonchiedereverifica = false; - if (regexpire) { - nonchiedereverifica = await User.getifRegTokenIsValid(body.idapp, regexpire); - } - - if (!nonchiedereverifica) - regexpire = ''; - - if (!tools.getAskToVerifyReg(body.idapp) || nonchiedereverifica) { - // Se non devo chiedere di verificare all'Invitato, allora lo verifico direttamente - user.verified_by_aportador = true; - } - - /* if (user.idapp === tools.AYNI) { - user.profile.paymenttypes = ['paypal']; - } */ - - // Controlla se anche l'ultimo record era dallo stesso IP: - const lastrec = await User.getLastRec(body.idapp); - if (!!lastrec) { - if (process.env.LOCALE !== '1') { - if (lastrec.ipaddr === user.ipaddr) { - // Se l'ha fatto troppo ravvicinato - if (lastrec.date_reg) { - let ris = tools.isdiffSecDateLess(lastrec.date_reg, 3); - if (ris) { - const msg = user.ipaddr + ': [' + user.username + '] ' + user.name + ' ' + - user.surname; - tools.writeIPToBan(msg); - - await User.findOneAndUpdate({ _id: user._id }, { $set: { banIp: true } }); - - await telegrambot.sendMsgTelegramToTheAdmin(body.idapp, '‼️ BAN: ' + msg, true); - - await tools.snooze(5000); - res.status(400). - send({ code: server_constants.RIS_CODE_BANIP, msg: '' }); - return 1; - } - } - } + if ((user.aportador_solidario === 'tuo_username') || (user.aportador_solidario === '{username}')) { + user.aportador_solidario = 'paoloar77'; } - } - // user.perm = 3; - // if (tools.testing()) { - // user.verified_email = true; - // } + // tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp); - // if (user.profile.intcode_cell) { - // if (user.profile.cell.substring(0, user.profile.intcode_cell.length) === user.profile.intcode_cell) { - // user.profile.cell = user.profile.cell.substring(user.profile.intcode_cell.length) - // } - // } - let exit; - - let utentenonancoraVerificato = false; - - const trovarec = await User.findByCredentials(user.idapp, user.username, user.password, true); - - // Check if already esist email or username - exit = await User.findByUsername(user.idapp, user.username). - then((useralreadyexist) => { - if (useralreadyexist) { - - if (tools.getAskToVerifyReg(useralreadyexist.idapp)) { - if (!useralreadyexist.verified_by_aportador && useralreadyexist.profile.teleg_id > 0) { - if (trovarec) { - utentenonancoraVerificato = true; - } - } - - } - - if (!utentenonancoraVerificato) { - res.status(400). - send({ - code: server_constants.RIS_CODE_USERNAME_ALREADY_EXIST, - msg: '', - }); - return 1; - } - } - - }); - - if (!utentenonancoraVerificato) { - - if (exit === 1) - return; - - exit = await User.findByEmail(user.idapp, user.email). - then((useralreadyexist) => { - if (useralreadyexist) { - res.status(400). - send({ - code: server_constants.RIS_CODE_EMAIL_ALREADY_EXIST, - msg: '', - }); - return 1; - } - - }); - - if (exit === 1) - return; - - let recuser = null; - - recuser = await User.findByCellAndNameSurname(user.idapp, user.profile.cell, - user.name, user.surname); - if (recuser && user.name !== '' && user.surname !== '' && - user.profile.cell !== '') { - console.log('UTENTE GIA ESISTENTE:\n'); - console.log(user); - // User already registered! + if (!tools.isAlphaNumericAndSpecialCharacter(body.username) || + body.email.length < 6 || + body.username.length < 4 || body.password.length < 5) { + await tools.snooze(5000); + console.log('Username non valido in Registrazione: ' + body.username); res.status(400). - send({ code: server_constants.RIS_CODE_USER_ALREADY_EXIST, msg: '' }); + send({ code: server_constants.RIS_CODE_USERNAME_NOT_VALID, msg: '' }); return 1; } - } - - let recextra = null; - - user.aportador_solidario = user.aportador_solidario.trim(); - - - user.aportador_solidario = user.aportador_solidario.replace('@', ''); - - let id_aportador = await User.getIdByUsername(user.idapp, user.aportador_solidario); - if (!id_aportador) { - // Cerca se esiste l'aportador solidario con l'username Telegram - const useraportador = await User.getUserByUsernameTelegram(user.idapp, user.aportador_solidario); - if (useraportador) { - id_aportador = useraportador._id; - user.aportador_solidario = useraportador.username; + if (tools.blockwords(body.username) || tools.blockwords(body.name) || + tools.blockwords(body.surname)) { + // tools.writeIPToBan(user.ipaddr + ': [' + user.username + '] ' + user.name + ' ' + user.surname); + await tools.snooze(5000); + return res.status(404).send(); } - } + user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username); + user.verified_email = false; + user.lasttimeonline = new Date(); + user.date_reg = new Date(); + user.aportador_iniziale = user.aportador_solidario; - let idMyGroupSite = tools.getidMyGroupBySite(body.idapp); - user.idMyGroup = idMyGroupSite ? idMyGroupSite : ''; + let regexpire = req.body['regexpire']; + let nonchiedereverifica = false; + if (regexpire) { + nonchiedereverifica = await User.getifRegTokenIsValid(body.idapp, regexpire); + } - if (id_aportador) { - // Ottiene l'username "corretto" (senza maiuscole o minuscole) - user.aportador_solidario = await User.getRealUsernameByUsername(user.idapp, user.aportador_solidario); - } + if (!nonchiedereverifica) + regexpire = ''; - if (!id_aportador && tools.getAskToVerifyReg(body.idapp)) { - // Si sta tentando di registrare una persona sotto che non corrisponde! - let msg = 'Il link di registrazione non sembra risultare valido.
invitante: ' + - user.aportador_solidario + '
username: ' + user.username; + if (!tools.getAskToVerifyReg(body.idapp) || nonchiedereverifica) { + // Se non devo chiedere di verificare all'Invitato, allora lo verifico direttamente + user.verified_by_aportador = true; + } - await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); - res.status(400). - send({ - code: server_constants.RIS_CODE_USER_APORTADOR_NOT_VALID, - msg: '', - }); - return 1; - } + /* if (user.idapp === tools.AYNI) { + user.profile.paymenttypes = ['paypal']; + } */ + // Controlla se anche l'ultimo record era dallo stesso IP: + const lastrec = await User.getLastRec(body.idapp); + if (!!lastrec) { + if (process.env.LOCALE !== '1') { + if (lastrec.ipaddr === user.ipaddr) { + // Se l'ha fatto troppo ravvicinato + if (lastrec.date_reg) { + let ris = tools.isdiffSecDateLess(lastrec.date_reg, 3); + if (ris) { + const msg = user.ipaddr + ': [' + user.username + '] ' + user.name + ' ' + + user.surname; + tools.writeIPToBan(msg); - if (utentenonancoraVerificato) { - if (id_aportador) { - // Se mi sono registrato ma l'invitante non mi abilita, allora il posso registrarmi nuovamente, con lo stesso username e password, - // con un'altro link di un'altro invitante ! - await User.setaportador_solidario(user.idapp, user.username, - user.aportador_solidario); + await User.findOneAndUpdate({ _id: user._id }, { $set: { banIp: true } }); - const myuser = await User.findOne({ _id: trovarec._id }); - if (myuser) { + await telegrambot.sendMsgTelegramToTheAdmin(body.idapp, '‼️ BAN: ' + msg, true); - await telegrambot.askConfirmationUser(myuser.idapp, shared_consts.CallFunz.REGISTRATION, myuser); - - const { token, refreshToken } = await myuser.generateAuthToken(req); - res - .header('x-auth', token) - .header('x-refrtok', refreshToken) - .send(myuser); - return true; + await tools.snooze(5000); + res.status(400). + send({ code: server_constants.RIS_CODE_BANIP, msg: '' }); + return 1; + } + } + } } } - } - // let already_registered = (recextra || user.aportador_solidario === tools.APORTADOR_NONE) && (user.idapp === tools.AYNI); + // user.perm = 3; + // if (tools.testing()) { + // user.verified_email = true; + // } - // Check if is an other people aportador_solidario + // if (user.profile.intcode_cell) { + // if (user.profile.cell.substring(0, user.profile.intcode_cell.length) === user.profile.intcode_cell) { + // user.profile.cell = user.profile.cell.substring(user.profile.intcode_cell.length) + // } + // } + let exit; - /*if (already_registered) { - // Check in the extraList if is present! - const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username; - console.log('Utente non trovato; ', msg); - await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); - res.status(400).send({ - code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, - msg: 'Controlla se il numero ' + user.profile.cell + ' è corretto.' - }); - return 1; - } */ + let utentenonancoraVerificato = false; - return user.save().then(async () => { - return User.findByUsername(user.idapp, user.username, false). - then((usertrovato) => { + const trovarec = await User.findByCredentials(user.idapp, user.username, user.password, true); - // tools.mylog("TROVATO USERNAME ? ", user.username, usertrovato); - if (usertrovato !== null) { - return user.generateAuthToken(req); - } else { - res.status(400).send(); - return 0; + // Check if already esist email or username + exit = await User.findByUsername(user.idapp, user.username). + then((useralreadyexist) => { + if (useralreadyexist) { + + if (tools.getAskToVerifyReg(useralreadyexist.idapp)) { + if (!useralreadyexist.verified_by_aportador && useralreadyexist.profile.teleg_id > 0) { + if (trovarec) { + utentenonancoraVerificato = true; + } + } + + } + + if (!utentenonancoraVerificato) { + res.status(400). + send({ + code: server_constants.RIS_CODE_USERNAME_ALREADY_EXIST, + msg: '', + }); + return 1; + } } - }). - then(async (ris) => { - // tools.mylog("passo il TOKEN: ", token); - if (recextra) { - recextra.registered = true; - recextra.username = user.username; - await recextra.save(); - - // await User.fixUsername(user.idapp, user.ind_order, user.username); - } - return ris; - }). - then(async (ris) => { - - // tools.mylog("LINKREG = " + user.linkreg); - // Invia un'email all'utente - // tools.mylog('process.env.TESTING_ON', process.env.TESTING_ON); - console.log('res.locale', res.locale); - - await telegrambot.askConfirmationUser(user.idapp, shared_consts.CallFunz.REGISTRATION, user, '', '', '', regexpire); - - // if (!tools.testing()) { - await sendemail.sendEmail_Registration(user.lang, user.email, user, - user.idapp, user.linkreg); - // } - res - .header('x-auth', ris.token) - .header('x-refrtok', ris.refreshToken) - .send(user); - return true; }); - }).catch((e) => { + + if (!utentenonancoraVerificato) { + + if (exit === 1) + return; + + exit = await User.findByEmail(user.idapp, user.email). + then((useralreadyexist) => { + if (useralreadyexist) { + res.status(400). + send({ + code: server_constants.RIS_CODE_EMAIL_ALREADY_EXIST, + msg: '', + }); + return 1; + } + + }); + + if (exit === 1) + return; + + let recuser = null; + + recuser = await User.findByCellAndNameSurname(user.idapp, user.profile.cell, + user.name, user.surname); + if (recuser && user.name !== '' && user.surname !== '' && + user.profile.cell !== '') { + console.log('UTENTE GIA ESISTENTE:\n'); + console.log(user); + // User already registered! + res.status(400). + send({ code: server_constants.RIS_CODE_USER_ALREADY_EXIST, msg: '' }); + return 1; + } + + } + + let recextra = null; + + user.aportador_solidario = user.aportador_solidario.trim(); + + + user.aportador_solidario = user.aportador_solidario.replace('@', ''); + + let id_aportador = await User.getIdByUsername(user.idapp, user.aportador_solidario); + if (!id_aportador) { + // Cerca se esiste l'aportador solidario con l'username Telegram + const useraportador = await User.getUserByUsernameTelegram(user.idapp, user.aportador_solidario); + if (useraportador) { + id_aportador = useraportador._id; + user.aportador_solidario = useraportador.username; + } + } + + + let idMyGroupSite = tools.getidMyGroupBySite(body.idapp); + user.idMyGroup = idMyGroupSite ? idMyGroupSite : ''; + + if (id_aportador) { + // Ottiene l'username "corretto" (senza maiuscole o minuscole) + user.aportador_solidario = await User.getRealUsernameByUsername(user.idapp, user.aportador_solidario); + } + + if (!id_aportador && tools.getAskToVerifyReg(body.idapp)) { + // Si sta tentando di registrare una persona sotto che non corrisponde! + let msg = 'Il link di registrazione non sembra risultare valido.
invitante: ' + + user.aportador_solidario + '
username: ' + user.username; + + await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); + res.status(400). + send({ + code: server_constants.RIS_CODE_USER_APORTADOR_NOT_VALID, + msg: '', + }); + return 1; + } + + + if (utentenonancoraVerificato) { + if (id_aportador) { + // Se mi sono registrato ma l'invitante non mi abilita, allora il posso registrarmi nuovamente, con lo stesso username e password, + // con un'altro link di un'altro invitante ! + await User.setaportador_solidario(user.idapp, user.username, + user.aportador_solidario); + + const myuser = await User.findOne({ _id: trovarec._id }); + if (myuser) { + + await telegrambot.askConfirmationUser(myuser.idapp, shared_consts.CallFunz.REGISTRATION, myuser); + + const { token, refreshToken } = await myuser.generateAuthToken(req); + res + .header('x-auth', token) + .header('x-refrtok', refreshToken) + .send(myuser); + return true; + } + } + } + + // let already_registered = (recextra || user.aportador_solidario === tools.APORTADOR_NONE) && (user.idapp === tools.AYNI); + + // Check if is an other people aportador_solidario + + /*if (already_registered) { + // Check in the extraList if is present! + const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username; + console.log('Utente non trovato; ', msg); + await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); + res.status(400).send({ + code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, + msg: 'Controlla se il numero ' + user.profile.cell + ' è corretto.' + }); + return 1; + } */ + + return user.save().then(async () => { + return User.findByUsername(user.idapp, user.username, false). + then((usertrovato) => { + + // tools.mylog("TROVATO USERNAME ? ", user.username, usertrovato); + if (usertrovato !== null) { + return user.generateAuthToken(req); + } else { + res.status(400).send(); + return 0; + } + }). + then(async (ris) => { + // tools.mylog("passo il TOKEN: ", token); + + if (recextra) { + recextra.registered = true; + recextra.username = user.username; + await recextra.save(); + + // await User.fixUsername(user.idapp, user.ind_order, user.username); + } + return ris; + }). + then(async (ris) => { + + // tools.mylog("LINKREG = " + user.linkreg); + // Invia un'email all'utente + // tools.mylog('process.env.TESTING_ON', process.env.TESTING_ON); + console.log('res.locale', res.locale); + + await telegrambot.askConfirmationUser(user.idapp, shared_consts.CallFunz.REGISTRATION, user, '', '', '', regexpire); + + // if (!tools.testing()) { + await sendemail.sendEmail_Registration(user.lang, user.email, user, + user.idapp, user.linkreg); + // } + res + .header('x-auth', ris.token) + .header('x-refrtok', ris.refreshToken) + .send(user); + return true; + }); + }).catch((e) => { + console.error(e.message); + res.status(400).send(e); + }); + } catch (e) { console.error(e.message); - res.status(400).send(e); - }); + } + }); router.get('/:idapp/:username', async (req, res) => { @@ -1595,7 +1600,7 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) { const deleteCart = await Cart.deleteMany({ idapp }); ris = deleteCart; - + } catch (e) { console.error('Err:', e); } diff --git a/src/server/server.js b/src/server/server.js index 93ffa9b..d3493c0 100755 --- a/src/server/server.js +++ b/src/server/server.js @@ -820,7 +820,7 @@ function startServer(app, port) { // Configurazione CORS dettagliata const corsOptions = { origin: '*', - + /*origin: function (origin, callback) { // Array di domini consentiti const allowedOrigins = [ @@ -1043,11 +1043,11 @@ function startServer(app, port) { ws.send(JSON.stringify({ type: 'output', data: data })); // Controlla se c'è una richiesta di input - if (buffer.endsWith(': ') || buffer.includes('? ') || + if (buffer && (buffer.endsWith(': ') || buffer.includes('? ') || buffer.toLowerCase().includes('password') || buffer.includes('Inserisci') || buffer.includes('Inserted') - || buffer.includes('(Y') + || buffer.includes('(Y')) ) { ws.send(JSON.stringify({ type: 'input_required', prompt: data.trim() })); buffer = ''; diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index d171208..1b272de 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -927,7 +927,7 @@ const MyTelegramBot = { let useraportador = await User.getUserShortDataByUsername(idapp, userDest); - if (useraportador && useraportador.tokenreg && (regexpire.toLowerCase() === useraportador.tokenreg.toLowerCase())) { + if (useraportador && useraportador.tokenreg && useraportador.tokenreg && (regexpire && (regexpire?.toLowerCase() === useraportador.tokenreg?.toLowerCase()))) { const nonchiedereverifica = await User.getifRegTokenIsValid(idapp, useraportador.tokenreg); if (nonchiedereverifica) notask_verif = true; @@ -2103,7 +2103,7 @@ class Telegram { // await this.menumsg_to_Nave(msg, cmd2); // } else if (testo === Menu.MSG_SI_INVITATI_NO_7REQ_INVITATI) { // await this.menumsg_Si_Invitati_No_7Req(msg); - } else if (cmd1.toLowerCase() === Menu.MSG_TO_USER) { + } else if (cmd1 && cmd1.toLowerCase() === Menu.MSG_TO_USER) { await this.menumsg_A_Utente(msg); } else if (testo === Menu.SETPICPROFILE) { await this.setPhotoProfile(rec.user, msg.from.id); @@ -2838,7 +2838,7 @@ class Telegram { async setUsernameInvitante(msg) { try { - let mymsg = msg.text.toString().trim().toLowerCase(); + let mymsg = msg.text?.toString().trim().toLowerCase(); let nomeapp = tools.getNomeAppByIdApp(this.idapp); @@ -3271,7 +3271,7 @@ class Telegram { getInvitanteByMsg(msg) { try { - let mymsg = msg.text.toString().trim().toLowerCase(); + let mymsg = msg.text?.toString().trim().toLowerCase(); let invitante = ''; let regexpire = ''; const sep = '-' @@ -3324,8 +3324,7 @@ class Telegram { } const rec = this.getRecInMem(msg); - let testo = msg.text.toLowerCase().trim(); - + let testo = msg.text?.toLowerCase().trim(); status = this.getstatus(rec); if (testo === Menu.EXIT_TELEGRAM) { @@ -3389,7 +3388,7 @@ class Telegram { rec.chatId = msg.chat.id; rec.messageId = msg.message_id; rec.msgall_status = StatusMSGALL.CONFIRM; - const cmd = rec.msgtosent.toLowerCase(); + const cmd = rec?.msgtosent?.toString().toLowerCase() ?? ''; let achi = this.getDestinStr(msg, rec.msgall_achi, rec); let domanda = ''; if (rec.msgall_domanda) { @@ -3716,7 +3715,7 @@ class Telegram { for (const rec of recuser.menuDb) { if (rec.active_mem) { if (rec.idapp === idapp && rec.lang === lang && - rec.label.toLowerCase() === testo) { + rec.label?.toLowerCase() === testo) { return true; } } @@ -3800,7 +3799,7 @@ class Telegram { for (const recdb of recuser.menuDb) { if (recdb.active_mem) { if (recdb.idapp === idapp && recdb.lang === lang && - recdb.label.toLowerCase() === testo) { + recdb.label?.toLowerCase() === testo) { if (recdb.type === shared_consts.BOTTYPE_BOTTONI_INLINE) { const jsonString = '[{"text": "primo", "callback_data": "1"}, {"text": "sec", "callback_data": "2"}]'; const jsonObject = JSON.parse(jsonString); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index c98e27e..d0c9835 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -5396,7 +5396,7 @@ module.exports = { contatto = ''; } } - if ((myrec.contact_telegram && myrec.contact_telegram.toLowerCase() !== contatto_telegram.toLowerCase()) || !contatto) { + if ((myrec.contact_telegram && myrec.contact_telegram?.toLowerCase() !== contatto_telegram?.toLowerCase()) || !contatto) { contatto += '\n' + myrec.contact_telegram; } /*if (myrec.contact_phone) { @@ -5709,7 +5709,7 @@ module.exports = { const allElements = document.body.querySelectorAll('*'); allElements.forEach(element => { - const tagName = element.tagName.toLowerCase(); + const tagName = element.tagName?.toLowerCase(); if (!allowedTags.includes(tagName)) { // Crea un nodo di testo e sostituisci l'elemento con quel nodo di testo diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index e8c248b..0300313 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -274,7 +274,7 @@ module.exports = { { table: 'catgrps', key: 'descr' }, { table: 'contribtypes', - key: 'descr', + keyOLD: 'descr', }, { table: 'goods', key: 'descr', key2: 'idSectorGood' }, { table: 'levels', key: 'descr' },