- aggiornati form registrazione

- Login
- Password dimenticata
- Aggiorna password.
- Email registrazione
- Ammetti Utente
This commit is contained in:
Surya Paolo
2025-11-24 17:42:56 +01:00
parent 00bdc278d8
commit c61572a715
18 changed files with 1278 additions and 284 deletions

View File

@@ -5,4 +5,7 @@
"Nuova Registrazione": "Nuova Registrazione",
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
"partecipanti": "partecipanti",
"Il membro ": "Il membro ",
" è stato già Ammesso!": " è stato già Ammesso!",
"Ottimo! Hai ammesso ": "Ottimo! Hai ammesso "
}

View File

@@ -202,6 +202,12 @@ const UserSchema = new mongoose.Schema({
verified_by_aportador: {
type: Boolean,
},
token_da_ammettere: {
type: String,
},
date_token_ammettere: {
type: Date,
},
notask_verif: {
type: Boolean,
},
@@ -1624,6 +1630,57 @@ UserSchema.statics.setUserQualified = async function (idapp, username) {
return !!myrec;
};
UserSchema.statics.setAmmissioneByTokenAndUsername = async function (idapp, username) {
const User = this;
try {
if (username === undefined) return false;
const myquery = {
idapp: idapp,
username: username,
};
let creatoken = true;
let token = '';
const recfound = await User.findOne(myquery, { verified_by_aportador: 1, username: 1, token_da_ammettere: 1 });
if (recfound) {
if (recfound.token_da_ammettere) {
// token già creato
creatoken = false;
token = recfound.token_da_ammettere;
}
}
if (creatoken) {
token = tools.getTokenRandom();
} else {
return recfound;
}
const rec = await User.findOneAndUpdate(myquery, { $set: { token_da_ammettere: token, date_token_ammettere: new Date(), } }, { new: true });
return rec;
} catch (e) {
console.error('Error setAmmissione', e);
}
};
UserSchema.statics.findAmmissioneByTokenAndUsername = async function (idapp, token, username) {
const User = this;
if (username === undefined) return false;
const myquery = {
idapp: idapp,
token_da_ammettere: token,
};
const rec = await User.findOne(myquery, { verified_by_aportador: 1, username: 1, aportador_solidario: 1, idapp: 1, lang: 1 });
return rec && username.toLowerCase() === rec.username.toLowerCase() ? rec : null;
};
UserSchema.statics.setVerifiedByAportador = async function (idapp, username, valuebool) {
const User = this;

View File

@@ -178,29 +178,6 @@ class CronMod {
}
ris = { num };
/*} else if (mydata.dbop === 'visuPlacca') {
mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' +
'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' +
'AUGURI ALLA NUOVA SOGNATRICE !!!\n' +
'✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨';
const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT');
for (let ind = 0; ind < 8; ind++) {
mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false);
mystr += tools.ACAPO;
if (visu_nave_Bot && ind === 3) {
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
mystr = '';
}
}
if (visu_nave_Bot)
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
ris = { mystr };
*/
} else if (mydata.dbop === 'CorreggiTabHours') {
ris = await Hours.correggiHours(idapp);
} else if (mydata.dbop === 'setVerifiedByAportadorToALL') {

View File

@@ -293,25 +293,6 @@ function () {
ris = {
num: num
};
/*} else if (mydata.dbop === 'visuPlacca') {
mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' +
'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' +
'AUGURI ALLA NUOVA SOGNATRICE !!!\n' +
'✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨';
const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT');
for (let ind = 0; ind < 8; ind++) {
mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false);
mystr += tools.ACAPO;
if (visu_nave_Bot && ind === 3) {
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
mystr = '';
}
}
if (visu_nave_Bot)
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
ris = { mystr };
*/
_context.next = 682;
break;

View File

@@ -5,10 +5,13 @@ const router = express.Router(),
const telegrambot = require('../telegram/telegrambot');
const i18n = require('i18n');
const sharp = require('sharp');
const printf = require('util').format;
const {
authenticate,
authenticate_noerror,
@@ -124,6 +127,78 @@ const UserCost = {
],
};
router.post('/ammetti', (req, res) => {
const body = _.pick(req.body, ['idapp', 'token', 'username']);
const idapp = body.idapp;
const token = body.token;
const username = body.username;
try {
// Cerco il token se è ancora da ammettere
User.findAmmissioneByTokenAndUsername(idapp, token, username)
.then(async (user) => {
if (!user) {
return res.status(404).send();
} else {
const lang = user.lang;
console.log('user', user);
user.verified_by_aportador = false;
if (user.verified_by_aportador) {
res.send({
code: server_constants.RIS_CODE_GIA_AMMESSO,
msg: 'Il membro ' + user.username + ' è stato già Ammesso!',
});
} else {
user.verified_by_aportador = true;
const userDest = await User.getUserShortDataByUsername(user.idapp, user.aportador_solidario);
const myuser = user;
const dati = {
token,
}
const msgOrig = i18n.__(
{ phrase: '✅ Sei stato Ammesso correttamente da %s!', locale: lang },
userDest.username
);
const msgDest = i18n.__(
{ phrase: '✅ %s è stato Ammesso correttamente (da %s)!', locale: lang },
myuser.username,
userDest.username
);
const sendemail = require('../sendemail');
// Invia una email alla persona che è stata ammessa
const ris = await sendemail.sendEmail_Utente_Ammesso(user.lang, userDest.email, userDest, user.idapp, dati);
await telegrambot.sendMsgTelegram(user.idapp, myuser.username, msgOrig);
await telegrambot.sendMsgTelegram(user.idapp, userDest.username, msgDest);
// Invia questo msg anche all'Admin
await telegrambot.sendMsgTelegramToTheAdmin(user.idapp, msgDest, userDest.username);
// user.token_da_ammettere = 'OK';
user.save().then(() => {
res.send({
code: server_constants.RIS_CODE_AMMESSO,
msg: 'Ottimo! Hai ammesso ' + user.username + '!',
//msg: tools.getres__('Ottimo! Hai ammesso', res) + ' ' + user.username + '!',
});
});
}
}
})
.catch((e) => {
console.log('Errore Ammissione:', e.message);
res.status(400).send();
});
} catch (e) {
console.error('Errore: ', e);
res.status(400).send();
}
});
router.post(process.env.LINKVERIF_REG, (req, res) => {
const body = _.pick(req.body, ['idapp', 'idlink']);
const idapp = body.idapp;
@@ -335,7 +410,9 @@ router.post('/sendmailreg', authenticate, async (req, res) => {
const diffMinutes = Math.ceil(diffTime / (1000 * 60));
if (diffMinutes < 5) {
return res.status(200).send({ email_inviata: false, error: 'Attendi qualche minuto prima di reinviare nuovamente.' });
return res
.status(200)
.send({ email_inviata: false, error: 'Attendi qualche minuto prima di reinviare nuovamente.' });
}
ris = await sendemail.sendEmail_Registration(user.lang, user.email, user, user.idapp, user.linkreg);
user.lasttime_email_sent_verify = now;
@@ -396,7 +473,9 @@ router.post('/settable', authenticate, async (req, res) => {
(await !tools.ModificheConsentite(req, params.table, fieldsvalue, mydata ? mydata._id : ''))
) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
if (shared_consts.TABLES_USER_ID.includes(params.table)) {
@@ -533,7 +612,6 @@ router.post('/settable', authenticate, async (req, res) => {
}
}
return await myPromise
.then(async (doupdate) => {
if (false) {
@@ -827,7 +905,9 @@ router.post('/getexp', authenticate, (req, res) => {
if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm) && !User.isFacilitatore(req.user.perm)) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
try {
@@ -1334,7 +1414,9 @@ router.patch('/chval', authenticate, async (req, res) => {
!(mydata.table === 'accounts' && (await Account.canEditAccountAdmins(req.user.username, mydata.id)))
) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
const camporequisiti = UserCost.FIELDS_REQUISITI.includes(Object.keys(fieldsvalue)[0]);
@@ -1617,7 +1699,9 @@ router.patch('/askfunz', authenticate, async (req, res) => {
req.user._id.toString() !== id
) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
}
@@ -1676,7 +1760,9 @@ router.patch('/callfunz', authenticate, async (req, res) => {
req.user._id.toString() !== id
) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
}
@@ -1755,7 +1841,9 @@ router.delete('/delrec/:table/:id', authenticate, async (req, res) => {
(await !tools.ModificheConsentite(req, tablename, fields, id, req.user))
) {
// If without permissions, exit
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
let cancellato = false;
@@ -1863,7 +1951,9 @@ router.post('/duprec/:table/:id', authenticate, async (req, res) => {
const mytable = globalTables.getTableByTableName(tablename);
if (!req.user) {
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
return res
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
/* if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) {

View File

@@ -140,7 +140,7 @@ router.post('/invia-email', authenticate, async (req, res) => {
});
await listainviti.save();
const ris = await sendemail.sendEmail_InvitaAmico('it', emailAmico, null, idapp, dati);
if (ris) {

View File

@@ -498,9 +498,16 @@ module.exports = {
const strlinkreg = tools.getHostByIdApp(idapp) + `/invitetoreg/${dati.token}`;
return strlinkreg;
},
getLinkAmmissione: function (idapp, user) {
if (user.token_da_ammettere) {
const strlink = tools.getHostByIdApp(idapp) + `/ammetti/${user.token_da_ammettere}/${user.username}`;
return strlink;
}
return '';
},
getPathEmail(idapp, email_template) {
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso'];
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso', 'reg_chiedi_ammettere_all_invitante'];
if (idapp === '13') {
if (RISO_TEMPLATES.includes(email_template)) {
@@ -513,6 +520,14 @@ module.exports = {
try {
const nomecognomeInvitante = await User.getNameSurnameByUsername(idapp, user.aportador_solidario, true);
if (!user.verified_by_aportador) {
// Genera Token per Ammettere l'Utente
const r1 = await User.setAmmissioneByTokenAndUsername(idapp, user.username);
if (r1 && r1.token_da_ammettere) {
user.token_da_ammettere = r1.token_da_ammettere;
}
}
let mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
@@ -522,6 +537,7 @@ module.exports = {
strlinksito: tools.getHostByIdApp(idapp),
strlinkreg: this.getlinkReg(idapp, idreg),
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
linkAmmissione: this.getLinkAmmissione(idapp, user),
emailto: emailto,
verified_email: user.verified_email,
usernameInvitante: user.aportador_solidario,
@@ -547,7 +563,7 @@ module.exports = {
//Invia una email al nuovo utente
await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
if (user.verified_email && user.aportador_solidario) {
if (user.verified_email && user.aportador_solidario && user.verified_by_aportador) {
const pathemail = this.getPathEmail(idapp, 'reg_notifica_all_invitante');
// Manda anche una email al suo Invitante
@@ -558,6 +574,17 @@ module.exports = {
mylocalsconf,
''
);
} else if (user.aportador_solidario && !user.verified_by_aportador) {
const pathemail = this.getPathEmail(idapp, 'reg_chiedi_ammettere_all_invitante');
// Manda una email al suo Invitante per chiedere di essere ammesso
const recaportador = await User.getUserShortDataByUsername(idapp, user.aportador_solidario);
const ris = await this.sendEmail_base(
pathemail + '/' + tools.LANGADMIN,
recaportador.email,
mylocalsconf,
''
);
}
// Send to the Admin an Email
@@ -626,15 +653,18 @@ module.exports = {
emailto: emailto,
usernameInvitante: dati.usernameInvitante,
ammessoUtente: true,
user,
};
const ris = await this.sendEmail_base('reg_email_benvenuto_ammesso/' + lang, emailto, mylocalsconf, '');
const quale_email_inviare = this.getPathEmail(idapp, 'reg_email_benvenuto_ammesso') + '/' + lang;
const ris = await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, '');
await telegrambot.notifyToTelegram(telegrambot.phase.AMMETTI_UTENTE, mylocalsconf);
return ris;
} catch (e) {
console.error('Err sendEmail_InvitaAmico', e);
console.error('Err sendEmail_Utente_Ammesso', e);
}
},

View File

@@ -36,6 +36,8 @@ const { MsgTemplate } = require('../models/msg_template');
const i18n = require('i18n');
let url = process.env.URL || 'https://<PUBLIC-URL>';
const Benvenuto = '💓💓💓 Benvenuto/a!';
@@ -916,6 +918,7 @@ const MyTelegramBot = {
callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest,
},
]);
}
/*{
text: '🚫 Rifiuta ' + myuser.username,
@@ -927,7 +930,6 @@ const MyTelegramBot = {
if (telegid > 0) {
cl.setPhotoProfile(myuser, telegid, false);
const rismsg = await MsgTemplate.getMsgByLang(
idapp,
myuser,
@@ -941,7 +943,6 @@ const MyTelegramBot = {
userDest = myuser.aportador_solidario;
let useraportador = await User.getUserShortDataByUsername(idapp, userDest);
const rismsg2 = await MsgTemplate.getMsgByLang(
idapp,
myuser,
@@ -949,7 +950,6 @@ const MyTelegramBot = {
myuser.lang
);
const telegidInvitante = useraportador.profile.teleg_id;
await cl.sendMsgLog(telegidInvitante, rismsg2.body);
@@ -1114,7 +1114,6 @@ const MyTelegramBot = {
}
},
askConfirmationUserFriend: async function (idapp, myfunc, myuser, userDest = '', username = '') {
try {
const cl = getclTelegByidapp(idapp);
@@ -2986,13 +2985,6 @@ class Telegram {
if (recuser) {
rec.user = recuser;
console.log(recuser.username, " SI E' VERIFICATO CON TELEGRAM !");
// let username = recuser.name;
/*if (!!msg.from.username) {
await MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, recuser);
} else {
console.log(' ... MA GLI MANCA L\'USERNAME TELEGRAM !! ');
} */
}
}
}
@@ -3318,7 +3310,6 @@ class Telegram {
await this.verificaTelegramCompleted(msg, recuser);
}
}
}
}
@@ -3335,7 +3326,6 @@ class Telegram {
msg.from.last_name || ''
);
rec.status = Status.VERIFIED;
rec.datemenu_updated = null;
rec.menuDb = null;
@@ -4486,6 +4476,8 @@ if (true) {
// RISPOSTE ALLE CALLBACK (Bottoni)
const sendemail = require('../sendemail');
let testo_notifica_di_risposta = '';
try {
@@ -4578,6 +4570,7 @@ if (true) {
);
// Invia una email alla persona che è stata ammessa
const ris = await sendemail.sendEmail_Utente_Ammesso(user.lang, userDest, null, user.idapp, null);
await local_sendMsgTelegram(user.idapp, data.username, msgOrig);
await local_sendMsgTelegram(user.idapp, data.userDest, msgDest);

View File

@@ -96,6 +96,8 @@ const textlang = {
NON_VERIF: 'Non Verificata',
VERIF: 'Verificata',
EMAIL: 'Email',
MEMBRO_AMMESSO: 'Ottimo! Hai ammesso %s!',
MEMBRO_GIA_AMMESSO: 'Il membro %s è stato già Ammesso!',
BOT: 'BOT',
EMAIL_NON_VERIF:
'Email Non Verificata\nleggi la tua casella email e trova **"Confermare la Registrazione"**\ne clicca sul bottone **"Verifica Registrazione"**',

View File

@@ -6,6 +6,9 @@ module.exports = Object.freeze({
RIS_CODE_EMAIL_ALREADY_VERIFIED: -5,
RIS_CODE_EMAIL_VERIFIED: 1,
RIS_CODE_AMMESSO: 1,
RIS_CODE_GIA_AMMESSO: -5,
RIS_CODE_REC_DUPLICATED_DESCR_CITY_USER: -110,
RIS_CODE_REC_ALREADY_EXIST_SYMBOL: -102,
RIS_CODE_REC_ALREADY_EXIST_CODE: -101,
@@ -31,7 +34,7 @@ module.exports = Object.freeze({
RIS_CODE_HTTP_INVALID_TOKEN: 401,
RIS_CODE_HTTP_FORBIDDEN_PERMESSI: 403,
RIS_CODE_HTTP_TOKEN_EXPIRED: 408,
RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND: -23,
RIS_SUBSCRIBED_OK: 1,
@@ -53,30 +56,30 @@ module.exports = Object.freeze({
es: 'Suscripción al boletín confirmado!',
it: 'Sottoscrizione alla Newsletter Confermata!',
fr: 'Inscription à la newsletter confirmée!',
de: 'Anmeldung zum Newsletter bestätigt!'
} ,
de: 'Anmeldung zum Newsletter bestätigt!',
},
RIS_SUBSCRIBED_MSG_ALREADYEXIST: {
enUs: 'Subscription already made!',
es: 'Suscripción ya realizada!',
it: 'Sottoscrizione già effettuata!',
fr: 'Abonnement déjà fait!',
de: 'Abonnement bereits gemacht!'
} ,
de: 'Abonnement bereits gemacht!',
},
RIS_SUBSCRIBED_MSG_FAILED: {
enUs: 'Sign Up Failed :(',
es: 'Suscripción al boletín fallido',
it: 'Sottoscrizione alla Newsletter Fallita',
fr: 'Abonnement à la newsletter en échec',
de: 'Abonnement des fehlgeschlagenen Newsletters',
} ,
},
RIS_UNSUBSTR_NOT_EXIST: {
enUs: 'Subscription email not found!',
es: 'Suscripción email no encontrada!',
it: 'Sottoscrizione Email non trovata!',
fr: 'Abonnement courriel introuvable!',
de: 'E-Mail-Abonnement nicht gefunden!'
} ,
de: 'E-Mail-Abonnement nicht gefunden!',
},
RIS_UNSUB_ERROR_FAILED: {
enUs: 'Unsubscribed Failed :(',
@@ -84,16 +87,15 @@ module.exports = Object.freeze({
it: 'Desottoscrizione alla Newsletter Fallita',
fr: 'Désabonnement à la newsletter en échec',
de: 'Abmeldung des fehlgeschlagenen Newsletters',
} ,
},
RIS_UNSUBSCRIBED_MSG_ALREADY_DONE: {
enUs: 'Unsubscription already made!',
es: 'Unsuscripción ya realizada!',
it: 'Desottoscrizione già effettuata!',
fr: 'Désabonnement déjà fait!',
de: 'Abmeldung bereits gemacht!'
} ,
de: 'Abmeldung bereits gemacht!',
},
LIST_END: '10000000',
LIST_START: null,
@@ -101,7 +103,7 @@ module.exports = Object.freeze({
PREFIX_IMG: 'm_',
PREFIX_IMG_SMALL: 'sm_',
DIR_UPLOAD: '/upload', //'/upload'
DIR_UPLOAD: '/upload', //'/upload'
DIR_PUBLIC_LOCALE: '/public',
Privacy: {
@@ -109,7 +111,7 @@ module.exports = Object.freeze({
friends: 'friends',
mygroup: 'mygroup',
onlyme: 'onlyme',
inherited: 'inherited'
inherited: 'inherited',
},
TypeProj: {
@@ -117,13 +119,7 @@ module.exports = Object.freeze({
TYPE_SUBDIR: 2,
},
User_Fields: [
'name',
'surname',
'news_on',
'profile',
],
User_Fields: ['name', 'surname', 'news_on', 'profile'],
FILECONFIG_SERVER: 'lists_serverconfig.txt',
});