mirror of
https://github.com/KeymonSoft/jRDC-Multi.git
synced 2026-04-17 12:56:23 +00:00
- feat: Implementa tolerancia de parámetros configurable y mejora estabilidad general del servidor. - La tolerancia de parametros permite que si un query requiere 3 parametros y se mandan 4, NO mande un error, solo manda a la base de datos los parametros correctos y tira los extras, y guarda una "ADVERTENCIA" en el Log de errores. - Este commit introduce la funcionalidad de `parameterTolerance` configurable y aborda varias mejoras críticas para la estabilidad y eficiencia del jRDC2-Multi. - Principales cambios y beneficios: - **Tolerancia de Parámetros**: Añade la propiedad `parameterTolerance` en `config.properties` para controlar el manejo de parámetros de más. Cuando está habilitada, recorta los parámetros excesivos; si está deshabilitada (modo estricto, por defecto), genera un error, aumentando la robustez de la validación. - **Inicialización Multi-DB Confiable**: Corrige la lógica de inicialización en `Main.AppStart` para `RDCConnector` de DB3 y DB4, asegurando que cada base de datos tenga su propio *pool* de conexiones correctamente configurado. - **Optimización de Ejecución SQL**: Elimina llamadas duplicadas a `ExecQuery2` y `ExecNonQuery2` en `DBHandlerB4X.bas`, garantizando que solo los parámetros validados se utilicen y evitando ejecuciones redundantes en la base de datos. - **Refactorización y Limpieza**: Se eliminó la declaración duplicada de `ActiveRequestsCountByDB` en `Main.bas` y la subrutina `Handle0` obsoleta en `Manager.bas`, mejorando la claridad y mantenibilidad del código.
52 lines
1.9 KiB
QBasic
52 lines
1.9 KiB
QBasic
B4J=true
|
|
Group=Default Group
|
|
ModulesStructureVersion=1
|
|
Type=Class
|
|
Version=10.3
|
|
@EndOfDesignText@
|
|
'Class module: ChangePassHandler
|
|
Sub Class_Globals
|
|
Private bc As BCrypt
|
|
End Sub
|
|
|
|
Public Sub Initialize
|
|
bc.Initialize("BC")
|
|
End Sub
|
|
|
|
Public Sub Handle(req As ServletRequest, resp As ServletResponse)
|
|
Log("--- CHANGEPASSHANDLER FUE LLAMADO ---") ' <--- ¡PON ESTA LÍNEA AQUÍ!
|
|
If req.GetSession.GetAttribute2("user_is_authorized", False) = False Then
|
|
resp.SendRedirect("/login")
|
|
Return
|
|
End If
|
|
|
|
Dim currentUser As String = req.GetSession.GetAttribute("username")
|
|
Dim currentPass As String = req.GetParameter("current_password")
|
|
Dim newPass As String = req.GetParameter("new_password")
|
|
Dim confirmPass As String = req.GetParameter("confirm_password")
|
|
|
|
If newPass <> confirmPass Then
|
|
resp.Write("<script>alert('Error: La nueva contraseña no coincide con la confirmación.'); history.back();</script>")
|
|
Return
|
|
End If
|
|
|
|
Try
|
|
Dim storedHash As String = Main.SQL1.ExecQuerySingleResult2("SELECT password_hash FROM users WHERE username = ?", Array As String(currentUser))
|
|
|
|
Log("Valor de la BD (storedHash): " & storedHash)
|
|
If storedHash = Null Or bc.checkpw(currentPass, storedHash) = False Then ' <<--- CAMBIO CLAVE AQUÍ
|
|
resp.Write("<script>alert('Error: La contraseña actual es incorrecta.'); history.back();</script>")
|
|
Return
|
|
End If
|
|
|
|
' <<--- CORRECCIÓN 2: Usamos el método seguro y consistente con 'Main'.
|
|
Dim newHashedPass As String = bc.hashpw(newPass, bc.gensalt)
|
|
Main.SQL1.ExecNonQuery2("UPDATE users SET password_hash = ? WHERE username = ?", Array As Object(newHashedPass, currentUser))
|
|
|
|
resp.Write("<script>alert('Contraseña actualizada correctamente.'); window.location.href='/manager';</script>")
|
|
|
|
Catch
|
|
Log(LastException)
|
|
resp.Write("<script>alert('Error del servidor al intentar cambiar la contraseña.'); history.back();</script>")
|
|
End Try
|
|
End Sub |