From 64d07ef26f4dd0ea709c7595d7402bb44aae5f26 Mon Sep 17 00:00:00 2001 From: AgustinRodriguez-Andes <63318331+agustin1996ra@users.noreply.github.com> Date: Thu, 10 Jul 2025 12:15:34 -0300 Subject: [PATCH 1/4] =?UTF-8?q?Cambio=20de=20la=20expiraci=C3=B3n=20de=20T?= =?UTF-8?q?oken=20reset-password?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/mobileApp/controller/AuthController.ts | 2 +- templates/emails/reset-password.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/mobileApp/controller/AuthController.ts b/modules/mobileApp/controller/AuthController.ts index 93e08ddb6b..0a57b6cd40 100644 --- a/modules/mobileApp/controller/AuthController.ts +++ b/modules/mobileApp/controller/AuthController.ts @@ -9,7 +9,7 @@ import { IPushNotification, sendPushNotification } from './PushClientFCM'; const log = debug('AuthController'); -export const expirationOffset = 1000 * 60 * 60 * 24; +export const expirationOffset = 1000 * 60 * 60 * 72; // 72 horas export function verificarCodigo(codigoIngresado, codigo) { if (codigoIngresado === codigo) { diff --git a/templates/emails/reset-password.html b/templates/emails/reset-password.html index c5f5535095..1a19d7829c 100644 --- a/templates/emails/reset-password.html +++ b/templates/emails/reset-password.html @@ -191,7 +191,7 @@ Hola {{username}}, has solicitado el cambio de contraseña de la cuenta de ANDES App.
- El código para el cambio de contraseña estará disponible sólo por 24 horas. + El código para el cambio de contraseña estará disponible sólo por 72 horas.

From 4e2091c1eb64387aa6c8a0cfdb8c7589562f9866 Mon Sep 17 00:00:00 2001 From: AgustinRodriguez-Andes <63318331+agustin1996ra@users.noreply.github.com> Date: Mon, 21 Jul 2025 11:57:06 -0300 Subject: [PATCH 2/4] =?UTF-8?q?AM-336:=20Robosender:=20restriccciones=20en?= =?UTF-8?q?=20el=20env=C3=ADo=20de=20token=20por=20mails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth/auth.controller.ts | 14 +++++++++----- auth/schemas/authUsers.ts | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/auth/auth.controller.ts b/auth/auth.controller.ts index 3b6284c5f7..8b9d7403db 100644 --- a/auth/auth.controller.ts +++ b/auth/auth.controller.ts @@ -184,10 +184,13 @@ export async function setValidationTokenAndNotify(username) { try { const usuario = await AuthUsers.findOne({ usuario: username }); if (usuario && usuario.tipo === 'temporal' && usuario.email) { - usuario.validationToken = new mongoose.Types.ObjectId().toHexString(); - usuario.audit(userScheduler); - await usuario.save(); - + if (!usuario.validationToken || usuario.validationTokenExpiration < new Date()) { + // Si no tiene un token de validación o esta vencido, se genera uno nuevo + usuario.validationToken = new mongoose.Types.ObjectId().toHexString(); + usuario.validationTokenExpiration = new Date(Date.now() + 72 * 60 * 60 * 1000); // Expira en 72 horas + usuario.audit(userScheduler); + await usuario.save(); + } const extras: any = { titulo: 'Recuperación de contraseña', usuario, @@ -307,8 +310,9 @@ export async function validateOtpAndResetPassword(username, otpCode, newPassword export async function reset(token, password) { try { const usuario = await AuthUsers.findOne({ validationToken: token }); - if (usuario) { + if (usuario && usuario.validationTokenExpiration > new Date()) { usuario.validationToken = null; + usuario.validationTokenExpiration = null; usuario.password = sha1Hash(password); usuario.audit(userScheduler); await usuario.save(); diff --git a/auth/schemas/authUsers.ts b/auth/schemas/authUsers.ts index 3dc8cb5f54..4afc8c50b5 100644 --- a/auth/schemas/authUsers.ts +++ b/auth/schemas/authUsers.ts @@ -27,6 +27,7 @@ export interface IAuthUsers { lastLogin: Date; tipo?: String; validationToken?: String; + validationTokenExpiration?: Date; email?: String; configuracion?: { [key: string]: any }; disclaimers?: { From ba2caa5fbfee79465dc1799d724189b2a59d7420 Mon Sep 17 00:00:00 2001 From: Fabio-Ramirez Date: Thu, 4 Sep 2025 09:57:36 -0300 Subject: [PATCH 3/4] Se agrega tiempo de activacion para el pacienteApp --- modules/mobileApp/auth_routes/autenticacionApp.ts | 8 +++++--- utils/roboSender/index.ts | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/mobileApp/auth_routes/autenticacionApp.ts b/modules/mobileApp/auth_routes/autenticacionApp.ts index ac29cb7614..d6c95cbd77 100644 --- a/modules/mobileApp/auth_routes/autenticacionApp.ts +++ b/modules/mobileApp/auth_routes/autenticacionApp.ts @@ -89,17 +89,19 @@ router.post('/olvide-password', (req, res, next) => { return res.status(422).send({ error: 'Se debe ingresar una dirección de e-Mail' }); } const email = req.body.email.toLowerCase(); + const diaHoy = new Date(); + return PacienteApp.findOne({ email }, (err, datosUsuario: any) => { if (err) { return next(err); } - if (!datosUsuario) { + if (!datosUsuario || !datosUsuario.activacionApp) { return res.status(422).send({ error: 'El e-mail ingresado no existe' }); } - if (!datosUsuario.activacionApp) { - return res.status(422).send({ error: 'El e-mail ingresado no existe' }); + if (datosUsuario.restablecerPassword?.fechaExpiracion > diaHoy && datosUsuario.restablecerPassword?.codigo) { + return res.status(422).send({ error: 'Ya posee un código de verificación para cambiar su password' }); } datosUsuario.restablecerPassword.codigo = authController.generarCodigoVerificacion(); diff --git a/utils/roboSender/index.ts b/utils/roboSender/index.ts index ed1d44924d..d0ea4a343b 100644 --- a/utils/roboSender/index.ts +++ b/utils/roboSender/index.ts @@ -55,7 +55,7 @@ export function sendEmail(data: IEmail, options: any = {}) { createdAt: moment().toDate(), updatedAt: moment().toDate(), - expiredAt: moment().add(1, 'd').toDate(), + expiredAt: moment().add(3, 'd').toDate(), scheduledAt: options.scheduledAt ? options.scheduledAt : moment().toDate(), tries: 0, }); From 178eebd8b2edbf743c98071a20e2b61f3ebf5ec6 Mon Sep 17 00:00:00 2001 From: Fabio-Ramirez Date: Tue, 24 Feb 2026 18:12:17 -0300 Subject: [PATCH 4/4] Corregir activacion --- modules/mobileApp/auth_routes/autenticacionApp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mobileApp/auth_routes/autenticacionApp.ts b/modules/mobileApp/auth_routes/autenticacionApp.ts index d6c95cbd77..64be58ef07 100644 --- a/modules/mobileApp/auth_routes/autenticacionApp.ts +++ b/modules/mobileApp/auth_routes/autenticacionApp.ts @@ -96,7 +96,7 @@ router.post('/olvide-password', (req, res, next) => { return next(err); } - if (!datosUsuario || !datosUsuario.activacionApp) { + if (!datosUsuario) { return res.status(422).send({ error: 'El e-mail ingresado no existe' }); }