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' });
}