- Sistemato INVITI alla App

- Completamento Profilo
- Registrazione tramite Invito, senza richiedere conferma email.
This commit is contained in:
Surya Paolo
2025-11-18 23:56:15 +01:00
parent 1a342de24a
commit 294155d5a3
17 changed files with 203 additions and 98 deletions

View File

@@ -6,11 +6,44 @@ const nodemailer = require('nodemailer');
const { authenticate, authenticate_noerror, auth_default } = require('../middleware/authenticate');
const sendemail = require('../sendemail');
const tools = require('../tools/general');
const { User } = require('../models/user');
const ListaInvitiEmail = require('../models/listainvitiemail');
// ==========================================
// ENDPOINT API
// ==========================================
router.post('/getinv', async (req, res) => {
try {
const { tok } = req.body;
// Validazione
if (!tok) {
return res.status(400).json({
success: false,
message: 'token non presente',
});
}
const invitoreg = await ListaInvitiEmail.findOne({ token: tok }).lean();
if (invitoreg) {
return res.status(200).json({ success: true, rec: invitoreg });
} else {
return res.status(200).json({ success: false, rec: null });
}
} catch (e) {
return res.status(200).json({
success: false,
message: 'Errore ' + e.message,
});
}
});
/**
* POST /inviti/invia-email
* Invia un invito via email
@@ -38,38 +71,37 @@ router.post('/invia-email', authenticate, async (req, res) => {
const dati = { messaggioPersonalizzato, emailAmico, usernameInvitante };
const userInvitante = await User.findOne({ idapp, username: usernameInvitante }, { username: 1 });
const userInvitante = await User.findOne({ idapp, username: usernameInvitante }, { username: 1 }).lean();
const invitoesiste = await ListaInvitiEmail.findOne({ idapp, email });
const invitoesiste = await ListaInvitiEmail.findOne({ idapp, email: emailAmico });
if (invitoesiste) {
const dateInvito = new Date(invitoesiste.date_Invited);
const dateNow = new Date();
const diffTime = Math.abs(dateNow - dateInvito);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24 * 7));
if (diffDays > 7) {
if (diffDays > 1) {
// Posso reinviare l'invito
await ListaInvitiEmail.deleteOne({ _id: invitoesiste._id });
invitoesiste = null;
} else {
return res.status(200).json({
success: false,
message: `L'invito a questa email è stato già inviato il ${dateInvito.toDateString()}`,
message: 'L\'invito a questa email è stato già inviato il ' + tools.getstrDate_DD_MM_YYYY(dateInvito),
emailInviata: false,
});
}
}
const token = crypto.createHash('sha256').update(JSON.stringify(dati)).digest('hex');
dati.token = token;
dati.token = tools.getTokenRandom();
// aggiungi la email alla lista inviti
const listainviti = new ListaInvitiEmail({
idapp,
email: emailAmico,
userIdInvite: userInvitante.username,
token,
usernameInvitante: userInvitante.username,
userIdInvite: userInvitante._id,
token: dati.token,
});
await listainviti.save();

View File

@@ -3,6 +3,8 @@ const router = express.Router();
const { User } = require('../models/user');
const ListaInvitiEmail = require('../models/listainvitiemail');
// const { Nave } = require('../models/nave');
const Hours = require('../models/hours');
//const { NavePersistente } = require('../models/navepersistente');
@@ -136,6 +138,17 @@ router.post('/', async (req, res) => {
user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username);
user.verified_email = false;
// Se è parte di un invito allora verified_email = true
const recinvito = await ListaInvitiEmail.findOne({ email: body.email });
if (recinvito) {
user.verified_email = true;
recinvito.registered = true;
recinvito.userIdRegistered = user._id;
await recinvito.save();
}
user.lasttimeonline = new Date();
user.date_reg = new Date();
user.aportador_iniziale = user.aportador_solidario;