1 2 3 4 5 6 7 8 9 10 11 12 var error_generico_login = "Unexpected error while logging in. Please try again later and if the error persists contact us."; 13 var error_generico_doble_factor = "Unexpected error when validating the PIN. Please try again later and if the error persists contact us."; 14 var error_generico_solicitud_pin = "Unexpected error when resending the PIN. Please try again later and if the error persists contact us."; 15 var error_generico_recordatorio_contrasenia = "Unexpected error when recovering the password. Please try again later and if the error persists contact us."; 16 var error_generico_cambio_contrasenia = "Unexpected error when changing the password. Please try again later and if the error persists contact us."; 17 var error_generico_lopd = "Unexpected error when accepting the Protection of Personal Data Policy. Please try again later and if the error persists contact us."; 18 var error_generico_desbloqueo_usuario = "Unexpected error when unlocking the user. Please try again later and if the error persists contact us."; 19 var cerrar = "Close"; 20 var usuario_obligatorio = "Please enter a user"; 21 var pin_obligatorio = "Please enter a PIN"; 22 var contrasenia_obligatorio = "Please enter a password"; 23 var contrasenias_deben_coincidir = "The fields for the new password must match."; 24 var contrasenias_min_caracteres = "The new password must contain at least 8 characters."; 25 var recaptcha_obligatorio = "Please complete the reCAPTCHA"; 26 27 28 29 30 31 32 33 34 35 36 37 38 /** 39 * Realiza la llamada AJAX para realizar el login. 40 * La respuesta es un JSON con la información del login. 41 * Si el login es correcto y se indicó destino, el servicio hará redirección a este destino. 42 * Si no se le indicó destino, se recargará la página 43 * @param datos datos de la petición 44 */ 45 function doSimpleLogin(datos) { 46 // console.log('doSimpleLogin', datos); 47 48 $.ajax({ 49 type: 'post', 50 url: '/system/modules/com.saga.login/elements/login_simple_service.jsp', 51 data: datos, 52 success: function (resultado) { 53 // console.log('Resultado login OK: ' + resultado); 54 try { 55 if (resultado.error) { 56 // console.error('Error en el proceso de login:', resultado.mensaje); 57 mostrarResultadoServicio(true, resultado.mensaje) 58 } else { 59 // console.log('Login correcto'); 60 // hacemos redirección 61 // console.log(resultado.redirectLogin); 62 if (resultado.redirectAppend !== '' && resultado.redirectAppend !== undefined) { 63 window.location.href = window.location.pathname + resultado.redirectAppend; 64 } else if (resultado.redirectPath !== '' && resultado.redirectPath !== undefined) { 65 window.location.href = resultado.redirectPath; 66 } else { 67 location.reload(); 68 } 69 } 70 $("#spinnerLogin").addClass("d-none"); // desactivo spinner 71 } catch (e) { 72 // console.error('Error en el proceso de login: ', e); 73 mostrarResultadoServicio(true, error_generico_login); 74 } 75 }, 76 error: function (jqXHR, exception) { 77 // console.log('Resultado login ERROR'); 78 // console.log('jqXHR: ' + jqXHR); 79 // console.log('exception: ' + exception); 80 mostrarResultadoServicio(true, error_generico_login); 81 } 82 }); 83 } 84 85 /** 86 * Realiza llamada AJAX para procesar el doble factor de autenticación. 87 * La respuesta es un JSON con la información del proceso. 88 * @param datos datos de la petición 89 * @param url url del servicio al que llamar 90 */ 91 function doProcesarDobleFactor(datos, url) { 92 // console.log('doProcesarDobleFactor', datos, url); 93 94 $.ajax({ 95 type: 'post', 96 url: url, 97 data: datos, 98 success: function (resultado) { 99 // console.log('Resultado procesar doble factor OK: ' + resultado); 100 try { 101 if (resultado.error) { 102 // console.error('Error procesando doble factor:', resultado.mensaje); 103 mostrarResultadoServicio(true, resultado.mensaje) 104 } else { 105 // console.log('Doble factor correcto'); 106 // hacemos redirección 107 // console.log(resultado.redirectLogin); 108 if (resultado.redirectAppend !== '' && resultado.redirectAppend !== undefined) { 109 window.location.href = window.location.pathname + resultado.redirectAppend; 110 } else if (resultado.redirectPath !== '' && resultado.redirectPath !== undefined) { 111 window.location.href = resultado.redirectPath; 112 } else { 113 location.reload(); 114 } 115 } 116 $("#spinnerDobleFactor").addClass("d-none"); // desactivo spinner 117 } catch (e) { 118 // console.error('Error procesando doble factor: ', e); 119 mostrarResultadoServicio(true, error_generico_doble_factor); 120 } 121 }, 122 error: function (jqXHR, exception) { 123 // console.log('Resultado login ERROR'); 124 // console.log('jqXHR: ' + jqXHR); 125 // console.log('exception: ' + exception); 126 mostrarResultadoServicio(true, error_generico_doble_factor); 127 } 128 }); 129 } 130 131 /** 132 * Realiza llamada AJAX para solicitar un nuevo PIN.
133 * La respuesta es un JSON con la información del proceso. 134 * @param datos datos de la petición 135 * @param url url del servicio al que llamar 136 */ 137 function doSolicitarNuevoPIN(datos, url) { 138 // console.log('doSolicitarNuevoPIN', datos, url); 139 140 $.ajax({ 141 type: 'post', 142 url: url, 143 data: datos, 144 success: function (resultado) { 145 // console.log('Resultado solicitar nuevo PIN OK: ' + resultado); 146 try { 147 if (resultado.error) { 148 // console.error('Error solicitando nuevo PIN:', resultado.mensaje); 149 mostrarResultadoServicio(true, resultado.mensaje) 150 } else { 151 // console.log('Recordatorio de envÃo de nuevo PIN correcto'); 152 let text = ''; 153 if (!resultado.mensaje) { 154 text = error_generico_solicitud_pin; 155 } else { 156 text = resultado.mensaje; 157 } 158 mostrarResultadoServicio(false, text); 159 } 160 $("#spinnerDobleFactor").addClass("d-none"); // desactivo spinner 161 } catch (e) { 162 // console.error('Error solicitando nuevo PIN: ', e); 163 mostrarResultadoServicio(true, error_generico_doble_factor); 164 } 165 }, 166 error: function (jqXHR, exception) { 167 // console.log('Resultado solicitud nuevo PIN ERROR'); 168 // console.log('jqXHR: ' + jqXHR); 169 // console.log('exception: ' + exception); 170 mostrarResultadoServicio(true, error_generico_doble_factor); 171 } 172 }); 173 } 174 175 /** 176 * Realiza llamada AJAX para recordar la contraseña al usuario. 177 * La respuesta es un JSON con la información del proceso. 178 * @param datos datos de la petición 179 * @param url url del servicio al que llamar 180 * @param idSpinner ID del spinner a ocultar cuando se realize la llamada Ajax 181 */ 182 function doRecuperarContrasenia(datos, url, idSpinner) { 183 // console.log('dorecordarContrasenia', datos, url, idSpinner); 184 $("#" + idSpinner).removeClass("d-none"); // activo spinner 185 186 $.ajax({ 187 type: 'post', 188 url: url, 189 data: datos, 190 success: function (resultado) { 191 // console.log('Resultado recordar contraseña OK: ' + resultado); 192 try { 193 if (resultado.error) { 194 // console.error('Error recordando contraseña:', resultado.mensaje); 195 mostrarResultadoServicio(true, resultado.mensaje) 196 } else { 197 // console.log('Recordatorio de contraseña correcto'); 198 let text = ''; 199 if (!resultado.mensaje) { 200 text = error_generico_recordatorio_contrasenia; 201 } else { 202 text = resultado.mensaje; 203 } 204 mostrarResultadoServicio(false, text); 205 } 206 } catch (e) { 207 // console.error('Error recordando contraseña: ', e); 208 mostrarResultadoServicio(true, error_generico_recordatorio_contrasenia); 209 } 210 $("#" + idSpinner).addClass("d-none"); // desactivo spinner 211 }, 212 error: function (jqXHR, exception) { 213 // console.log('Resultado login ERROR'); 214 // console.log('jqXHR: ' + jqXHR); 215 // console.log('exception: ' + exception); 216 mostrarResultadoServicio(true, error_generico_recordatorio_contrasenia); 217 } 218 }); 219 } 220 221 /** 222 * Realiza llamada AJAX para cambiar la contraseña del usuario. 223 * La respuesta es un JSON con la información del proceso. 224 * @param datos datos de la petición 225 */ 226 function doCambiarContrasenia(datos) { 227 // console.log('doCambiarContrasenia', datos); 228 $("#spinner").removeClass("d-none"); // activo spinner 229 230 $.ajax({ 231 type: 'post', 232 url: '/system/modules/com.saga.login/elements/cambiar_contrasenia_service.jsp', 233 data: datos, 234 success: function (resultado) { 235 // console.log('Resultado cambiar contraseña OK: ' + resultado); 236 try { 237 if (resultado.error) { 238 // console.error('Error cambiando la contraseña:', resultado.mensaje); 239 mostrarResultadoServicio(true, resultado.mensaje) 240 } else { 241 // console.log('Cambio de contraseña correcto'); 242 let text = ''; 243 if (!resultado.mensaje) { 244 text = error_generico_cambio_contrasenia; 245 } else { 246 text = resultado.mensaje; 247 } 248 mostrarResultadoServicio(false, text); 249 } 250 $("#spinner").addClass("d-none"); // desactivo spinner 251 } catch (e) { 252 // console.error('Error cambiando la contraseña: ', e); 253 mostrarResultadoServicio(true, error_generico_cambio_contrasenia); 254 } 255 }, 256 error: function (jqXHR, exception) { 257 // console.log('Resultado cambio de contraseña ERROR'); 258 // console.log('jqXHR: ' + jqXHR); 259 // console.log('exception: ' + exception); 260 mostrarResultadoServicio(true, error_generico_cambio_contrasenia); 261 } 262 }); 263 } 264 265 /** 266 * Realiza llamada AJAX para procesar el cambio de contraseña tras iniciar sesión. 267 * La respuesta es un JSON con la información del proceso. 268 * @param datos datos de la petición 269 * @param url url del servicio al que llamar 270 */ 271 function doCambiarContraseniaTrasLogin(datos, url) { 272 // console.log('doCambiarContraseniaTrasLogin', datos, url); 273 $("#spinnerCambiarContrasenia").removeClass("d-none"); // activo spinner 274 275 $.ajax({ 276 type: 'post', 277 url: url, 278 data: datos,
279 success: function (resultado) { 280 // console.log('Resultado procesar cambio contraseña tras login OK: ' + resultado); 281 try { 282 if (resultado.error) { 283 // console.error('Error procesando el cambio de contraseña tras el login:', resultado.mensaje); 284 mostrarResultadoServicio(true, resultado.mensaje) 285 } else { 286 // console.log('Cambio de contraseña tras login correcto'); 287 // hacemos redirección 288 // console.log(resultado.redirectLogin); 289 if (resultado.redirectAppend !== '' && resultado.redirectAppend !== undefined) { 290 window.location.href = window.location.pathname + resultado.redirectAppend; 291 } else if (resultado.redirectPath !== '' && resultado.redirectPath !== undefined) { 292 window.location.href = resultado.redirectPath; 293 } else { 294 location.reload(); 295 } 296 } 297 $("#spinnerCambiarContrasenia").addClass("d-none"); // desactivo spinner 298 } catch (e) { 299 // console.error('Error procesando el cambio de contraseña tras el login: ', e); 300 mostrarResultadoServicio(true, error_generico_cambio_contrasenia); 301 } 302 }, 303 error: function (jqXHR, exception) { 304 // console.log('Resultado cambio de contraseña tras login ERROR'); 305 // console.log('jqXHR: ' + jqXHR); 306 // console.log('exception: ' + exception); 307 mostrarResultadoServicio(true, error_generico_cambio_contrasenia); 308 } 309 }); 310 } 311 312 /** 313 * Realiza llamada AJAX para procesar la aceptación de la LOPD. 314 * La respuesta es un JSON con la información del proceso. 315 * @param datos datos de la petición 316 * @param url url del servicio al que llamar 317 */ 318 function doAceptarLopd(datos, url) { 319 // console.log('doAceptarLopd', datos, url); 320 $("#spinnerLopd").removeClass("d-none"); // activo spinner 321 322 $.ajax({ 323 type: 'post', 324 url: url, 325 data: datos, 326 success: function (resultado) { 327 // console.log('Resultado procesar la aceptación de la LOPD OK: ' + resultado); 328 try { 329 if (resultado.error) { 330 // console.error('Error procesando la aceptación de la LOPD:', resultado.mensaje); 331 mostrarResultadoServicio(true, resultado.mensaje) 332 } else { 333 // console.log('Aceptación de la LOPD correcta'); 334 // hacemos redirección 335 // console.log(resultado.redirectLogin); 336 if (resultado.redirectAppend !== '' && resultado.redirectAppend !== undefined) { 337 window.location.href = window.location.pathname + resultado.redirectAppend; 338 } else if (resultado.redirectPath !== '' && resultado.redirectPath !== undefined) { 339 window.location.href = resultado.redirectPath; 340 } else { 341 location.reload(); 342 } 343 } 344 $("#spinnerLopd").addClass("d-none"); // desactivo spinner 345 } catch (e) { 346 // console.error('Error procesando la aceptación de la LOPD: ', e); 347 mostrarResultadoServicio(true, error_generico_cambio_contrasenia); 348 } 349 }, 350 error: function (jqXHR, exception) { 351 // console.log('Resultado aceptación de la LOPD ERROR'); 352 // console.log('jqXHR: ' + jqXHR); 353 // console.log('exception: ' + exception); 354 mostrarResultadoServicio(true, error_generico_lopd); 355 } 356 }); 357 } 358 359 /** 360 * Realiza llamada AJAX para desbloquear usuario. 361 * La respuesta es un JSON con la información del proceso. 362 * @param datos datos de la petición 363 * @param url url del servicio al que llamar 364 */ 365 function doDesbloquearUsuario(datos, url) { 366 // console.log('doDesbloquearUsuario', datos, url); 367 $("#spinner").removeClass("d-none"); // activo spinner 368 369 $.ajax({ 370 type: 'post', 371 url: url, 372 data: datos, 373 success: function (resultado) { 374 // console.log('Resultado desbloquear usuario OK: ' + resultado); 375 try { 376 if (resultado.error) { 377 // console.error('Error al iniciar el proceso de desbloqueo de usuario:', resultado.mensaje); 378 mostrarResultadoServicio(true, resultado.mensaje) 379 } else { 380 // console.log('Desbloquear usuario correcto'); 381 // hacemos redirección 382 // console.log(resultado.redirectLogin); 383 let text = ''; 384 if (!resultado.mensaje) { 385 text = error_generico_desbloqueo_usuario; 386 } else { 387 text = resultado.mensaje; 388 } 389 mostrarResultadoServicio(false, text); 390 } 391 $("#spinnerDesbloqueo").addClass("d-none"); // desactivo spinner 392 } catch (e) { 393 // console.error('Error al iniciar el proceso de desbloqueo de usuario: ', e); 394 mostrarResultadoServicio(true, error_generico_desbloqueo_usuario); 395 } 396 }, 397 error: function (jqXHR, exception) { 398 // console.log('Resultado desbloqueo usuario ERROR'); 399 // console.log('jqXHR: ' + jqXHR); 400 // console.log('exception: ' + exception); 401 mostrarResultadoServicio(true, error_generico_desbloqueo_usuario); 402 } 403 }); 404 } 405 406 /** 407 * Muestra el resultado de la ejecución en un modal 408 * @param error indica si existe error 409 * @param text mensaje 410 */ 411 function mostrarResultadoServicio(error, text) { 412 let styleClass = ''; 413 if (error) { 414 styleClass = 'negativo'; 415 } else { 416 styleClass = 'positivo'; 417 } 418 419 $('#modalConfirmacion').html('' + 420 ' <div><div class="mensajeInfo ' + styleClass + ' ">
420' + text + '</div></div>' + 421 ' <div>' + 422 ' <a href="" rel="modal:close">' + cerrar + '</a>' + 423 ' </div>'); 424 425 $("#modalConfirmacion").modal({ 426 fadeDuration: 100 427 }); 428 } 429 430 function mostrarContrasenia(idInput, idBoton) { 431 if ($('input#' + idInput).attr('type') == "password") { 432 $('input#' + idInput).attr('type', 'text'); 433 $('#' + idBoton).html('Ocultar'); 434 } else { 435 $('input#' + idInput).attr('type', 'password'); 436 $('#' + idBoton).html('Mostrar'); 437 } 438 } 439 440 $(document).ready(function () { 441 // Login 442 $('input#submitLoginSimple').click(function (e) { 443 e.preventDefault(); 444 445 $.validator.addMethod("recaptchaValida", function () { 446 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 447 if (usarRecaptcha === 'recaptchav2') { 448 return $('#g-recaptcha-response').val() !== ""; 449 } 450 return true; // si no se usa reCAPTCHA v2, se considera válido 451 }, recaptcha_obligatorio); 452 453 $('form#formLoginSimple').submit(function (event) { 454 event.preventDefault(); 455 }).validate({ 456 ignore: "", 457 rules: { 458 usuarioLogin: {required: true}, 459 contrasenia: {required: true}, 460 'g-recaptcha-response': {recaptchaValida: true} 461 }, 462 messages: { 463 usuarioLogin: usuario_obligatorio, 464 contrasenia: contrasenia_obligatorio, 465 'g-recaptcha-response': recaptcha_obligatorio 466 }, 467 errorPlacement: function (error, element) { 468 if (element.attr("name") === "g-recaptcha-response") { 469 $('.g-recaptcha').after(error); 470 } else { 471 error.insertAfter(element); 472 } 473 } 474 }); 475 476 if ($('form#formLoginSimple').valid()) { 477 $("#spinnerLogin").removeClass("d-none"); // activo spinner 478 479 let datos = {}; 480 datos.usuarioLogin = $('input#usuarioLogin').val(); 481 datos.contrasenia = $('input#contrasenia').val(); 482 datos.uuid = $('input#uuid').val(); 483 datos.requestedResource = $('input#requestedResource').val(); 484 485 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 486 487 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 488 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 489 490 if (usarRecaptcha === 'recaptchav3') { 491 grecaptcha.ready(function () { 492 grecaptcha.execute(claveRecaptcha, { action: "login" }).then(function (token) { 493 datos.recaptchaToken = token; 494 doSimpleLogin(datos); 495 }); 496 }); 497 } else { 498 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 499 doSimpleLogin(datos); 500 } 501 502 } else { 503 doSimpleLogin(datos); 504 } 505 506 } else { 507 $('form#formLoginSimple').validate().showErrors(); // muestro errores de validación 508 } 509 }); 510 511 // Redirección a la URL deseada cuando el usuario ya ha iniciado sesión. AsÃ, evitamos que pueda acceder a la página de login si no se quiere. 512 if ($('.logado-contenedor').length) { 513 let urlLogin = $('#urlLogin').val(); 514 let urlActual = window.location.pathname; 515 516 if (urlLogin && urlActual !== urlLogin) { 517 window.location.href = urlLogin; 518 } 519 } 520 521 // Solicitar nuevo PIN 522 $('a#solicitarNuevoPIN').click(function (e) { 523 e.preventDefault(); 524 525 $("#spinnerDobleFactor").removeClass("d-none"); // activo spinner 526 527 // Obtener los valores necesarios del formulario 528 let datos = {}; 529 datos.u = $('input#u').val(); 530 datos.t = $('input#t').val(); 531 datos.uuid = $('input#uuid').val(); 532 533 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 534 535 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 536 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 537 538 if (usarRecaptcha === 'recaptchav3') { 539 grecaptcha.ready(function () { 540 grecaptcha.execute(claveRecaptcha, { action: "solicitarNuevoPIN" }).then(function (token) { 541 datos.recaptchaToken = token; 542 doSolicitarNuevoPIN(datos,'/system/modules/com.saga.login/elements/solicitar_nuevo_pin_service.jsp'); 543 }); 544 }); 545 } else { 546 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 547 doSolicitarNuevoPIN(datos,'/system/modules/com.saga.login/elements/solicitar_nuevo_pin_service.jsp'); 548 } 549 550 } else { 551 doSolicitarNuevoPIN(datos,'/system/modules/com.saga.login/elements/solicitar_nuevo_pin_service.jsp'); 552 } 553 554 }); 555 556 // Procesar doble factor 557 $('input#twoFactorSubmit').click(function (e) { 558 e.preventDefault(); 559 560 $('form#dobleFactor').submit(function (event) { 561 event.preventDefault(); 562 }).validate({ 563 ignore: "", 564 rules: { 565 twoFactorPin: {required: true}, 566 }, 567 messages: { 568 twoFactorPin: pin_obligatorio, 569 }, 570 errorPlacement: function (error, element) { 571 // Agregar el error solo una vez al final del contenedor 572 if ($(".pin-container .error-message").length === 0) { 573 error.addClass("error-message").appendTo(".pin-container"); 574 } 575 } 576 }); 577 578 if ($('form#dobleFactor').validate().checkForm()) { 579 $("#spinnerDobleFactor").removeClass("d-none"); // activo spinner 580 581 // Recoger el PIN concatenando valores de los inputs 582 let pin = ""; 583 $('.pin-input').each(function () { 584 pin += $(this).val(); 585 }) 586 587 // Generamos los datos para hacer el login 588 let datos = {}; 589 datos.twoFactorPin = pin; 590 datos.u = $('input#u').val(); 591 datos.t = $('input#t').val(); 592 datos.uuid = $('input#uuid').val(); 593 594 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 595 596 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') {
597 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 598 599 if (usarRecaptcha === 'recaptchav3') { 600 grecaptcha.ready(function () { 601 grecaptcha.execute(claveRecaptcha, { action: "dobleFactor" }).then(function (token) { 602 datos.recaptchaToken = token; 603 doProcesarDobleFactor(datos, '/system/modules/com.saga.login/elements/procesar_doble_factor_service.jsp'); 604 }); 605 }); 606 } else { 607 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 608 doProcesarDobleFactor(datos, '/system/modules/com.saga.login/elements/procesar_doble_factor_service.jsp'); 609 } 610 611 } else { 612 doProcesarDobleFactor(datos, '/system/modules/com.saga.login/elements/procesar_doble_factor_service.jsp'); 613 } 614 615 } else { 616 $('form#dobleFactor').validate().showErrors(); // muestro errores de validación 617 } 618 }); 619 620 // Inputs de PIN 621 $('.pin-input').on('input', function () { 622 let $this = $(this); 623 let value = $this.val(); 624 625 // Si el usuario ingresa un número, pasa al siguiente input 626 if (value.length === 1) { 627 let nextInput = $this.next('.pin-input'); 628 if (nextInput.length) { 629 nextInput.focus(); 630 } 631 } 632 }); 633 634 $('.pin-input').on('keydown', function (e) { 635 let $this = $(this); 636 637 if (e.key === 'Backspace') { 638 if ($this.val().length !== 0) { 639 $this.val(''); 640 e.preventDefault(); 641 } else { 642 let prevInput = $this.prev('.pin-input'); 643 if (prevInput.length) { 644 prevInput.focus(); 645 } 646 } 647 } 648 }); 649 650 // Restablecer contraseña 651 $('input#submitRecuperarContrasenia').click(function (e) { 652 e.preventDefault(); 653 654 $.validator.addMethod("recaptchaValida", function () { 655 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 656 if (usarRecaptcha === 'recaptchav2') { 657 return $('#g-recaptcha-response').val() !== ""; 658 } 659 return true; // si no se usa reCAPTCHA v2, se considera válido 660 }, recaptcha_obligatorio); 661 662 $('form#recuperarContrasenia').submit(function (event) { 663 event.preventDefault(); 664 }).validate({ 665 ignore: "", 666 rules: { 667 usuarioRecuperarContrasenia: {required: true}, 668 'g-recaptcha-response': {recaptchaValida: true} 669 }, 670 messages: { 671 usuarioRecuperarContrasenia: usuario_obligatorio, 672 'g-recaptcha-response': recaptcha_obligatorio 673 }, 674 errorPlacement: function (error, element) { 675 if (element.attr("name") === "g-recaptcha-response") { 676 $('.g-recaptcha').after(error); 677 } else { 678 error.insertAfter(element); 679 } 680 } 681 }); 682 683 if ($('form#recuperarContrasenia').valid()) { 684 $("#spinner").removeClass("d-none"); // activo spinner 685 686 // Generamos los datos para hacer el login 687 let datos = {}; 688 datos.usuarioRecuperarContrasenia = $('input#usuarioRecuperarContrasenia').val(); 689 datos.uuid = $('input#uuid').val(); 690 691 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 692 693 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 694 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 695 696 if (usarRecaptcha === 'recaptchav3') { 697 grecaptcha.ready(function () { 698 grecaptcha.execute(claveRecaptcha, { action: "recuperarContrasenia" }).then(function (token) { 699 datos.recaptchaToken = token; 700 doRecuperarContrasenia(datos,'/system/modules/com.saga.login/elements/recuperar_contrasenia_service.jsp', 'spinner'); 701 }); 702 }); 703 } else { 704 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 705 doRecuperarContrasenia(datos,'/system/modules/com.saga.login/elements/recuperar_contrasenia_service.jsp', 'spinner'); 706 } 707 708 } else { 709 doRecuperarContrasenia(datos,'/system/modules/com.saga.login/elements/recuperar_contrasenia_service.jsp', 'spinner'); 710 } 711 712 } else { 713 $('form#recuperarContrasenia').validate().showErrors(); // muestro errores de validación 714 } 715 }); 716 717 // Lanzar modal recordar contraseña 718 $('a#recordarContrasenia').click( 719 function () { 720 jQuery("#modalRecordarContrasenia").modal({ 721 fadeDuration: 100 722 }); 723 } 724 ); 725 726 // Lanzamos llamada Ajax del formulario recordar contraseña 727 $('button#confirmarRecordarContrasenia').click( 728 function () { 729 let datos = {}; 730 datos.usuarioRecuperarContrasenia = $('input#usuarioRecuperarContrasenia').val(); 731 datos.uuid = $('input#uuid').val(); 732 733 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 734 735 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') {
736 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 737 738 if (usarRecaptcha === 'recaptchav3') { 739 grecaptcha.ready(function () { 740 grecaptcha.execute(claveRecaptcha, { action: "confirmarRecordarContrasenia" }).then(function (token) { 741 datos.recaptchaToken = token; 742 doRecuperarContrasenia(datos, '/system/modules/com.saga.login/elements/recuperar_contrasenia_popup_service.jsp', 'spinnerRecuperarContrasenia'); 743 }); 744 }); 745 } else { 746 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 747 doRecuperarContrasenia(datos, '/system/modules/com.saga.login/elements/recuperar_contrasenia_popup_service.jsp', 'spinnerRecuperarContrasenia'); 748 } 749 750 } else { 751 doRecuperarContrasenia(datos, '/system/modules/com.saga.login/elements/recuperar_contrasenia_popup_service.jsp', 'spinnerRecuperarContrasenia'); 752 } 753 754 } 755 ); 756 757 // Cambiar contraseña por usuario 758 // Evitamos que se pueda pegar en los inputs 759 $("input#nuevaContrasenia1,input#nuevaContrasenia2").on('paste', function (e) { 760 e.preventDefault(); 761 }); 762 763 // Evitamos que se pueda copiar el contenido de los inputs 764 $("input#nuevaContrasenia1,input#nuevaContrasenia1").on('copy', function (e) { 765 e.preventDefault(); 766 }); 767 768 $('input#submitCambiarContrasenia').click(function (e) { 769 e.preventDefault(); 770 771 $.validator.addMethod("recaptchaValida", function () { 772 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 773 if (usarRecaptcha === 'recaptchav2') { 774 return $('#g-recaptcha-response').val() !== ""; 775 } 776 return true; // si no se usa reCAPTCHA v2, se considera válido 777 }, recaptcha_obligatorio); 778 779 $('form#cambiarContrasenia').submit(function (event) { 780 event.preventDefault(); 781 }).validate({ 782 ignore: "", 783 rules: { 784 nuevaContrasenia1: { 785 minlength: 8 786 }, 787 nuevaContrasenia2: { 788 minlength: 8, 789 equalTo: "#nuevaContrasenia1" 790 }, 791 'g-recaptcha-response': {recaptchaValida: true} 792 }, 793 messages: { 794 nuevaContrasenia1: { 795 minlength: contrasenias_min_caracteres, 796 required: contrasenia_obligatorio 797 }, 798 nuevaContrasenia2: { 799 minlength: contrasenias_min_caracteres, 800 equalTo: contrasenias_deben_coincidir, 801 required: contrasenia_obligatorio 802 }, 803 'g-recaptcha-response': recaptcha_obligatorio 804 }, 805 errorPlacement: function (error, element) { 806 if (element.attr("name") === "g-recaptcha-response") { 807 $('.g-recaptcha').after(error); 808 } else { 809 error.insertAfter(element); 810 } 811 } 812 }); 813 814 if ($('form#cambiarContrasenia').valid()) { 815 // Generamos los datos para hacer el cambio de contraseña 816 let datos = {}; 817 datos.nuevaContrasenia1 = $('input#nuevaContrasenia1').val(); 818 datos.nuevaContrasenia2 = $('input#nuevaContrasenia2').val(); 819 datos.u = $('input#u').val(); 820 datos.t = $('input#t').val(); 821 datos.uuid = $('input#uuid').val(); 822 823 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 824 825 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 826 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 827 828 if (usarRecaptcha === 'recaptchav3') { 829 grecaptcha.ready(function () { 830 grecaptcha.execute(claveRecaptcha, { action: "cambiarContrasenia" }).then(function (token) { 831 datos.recaptchaToken = token; 832 doCambiarContrasenia(datos); 833 }); 834 }); 835 } else { 836 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 837 doCambiarContrasenia(datos); 838 } 839 840 } else { 841 doCambiarContrasenia(datos); 842 } 843 844 } else { 845 $('form#cambiarContrasenia').validate().showErrors(); // muestro errores de validación 846 } 847 }); 848 849 // Cambiar contraseña tras inicio de sesión 850 $('input#changePasswordAfterLoginSubmit').click(function (e) { 851 e.preventDefault(); 852 853 $.validator.addMethod("recaptchaValida", function () { 854 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 855 if (usarRecaptcha === 'recaptchav2') { 856 return $('#g-recaptcha-response').val() !== ""; 857 } 858 return true; // si no se usa reCAPTCHA v2, se considera válido 859 }, recaptcha_obligatorio); 860 861 $('form#resetPasswordFirstLogin').submit(function (event) { 862 event.preventDefault(); 863 }).validate({ 864 ignore: "", 865 rules: { 866 nuevaContrasenia1: { 867 minlength: 8 868 }, 869 nuevaContrasenia2: { 870 minlength: 8, 871 equalTo: "#nuevaContrasenia1" 872 }, 873 'g-recaptcha-response': {recaptchaValida: true} 874 }, 875 messages: { 876 antiguaContrasenia: { 877 minlength: contrasenias_min_caracteres, 878 required: contrasenia_obligatorio 879 }, 880 nuevaContrasenia1: { 881 minlength: contrasenias_min_caracteres, 882 required: contrasenia_obligatorio 883 }, 884 nuevaContrasenia2: { 885 minlength: contrasenias_min_caracteres, 886 equalTo: contrasenias_deben_coincidir, 887 required: contrasenia_obligatorio 888 }, 889 'g-recaptcha-response': recaptcha_obligatorio 890 }, 891 errorPlacement: function (error, element) { 892 if (element.attr("name") === "g-recaptcha-response") { 893 $('.g-recaptcha').after(error); 894 } else { 895 error.insertAfter(element); 896 } 897 } 898 }); 899 900 if ($('form#resetPasswordFirstLogin').valid()) { 901 // Generamos los datos para hacer el cambio de contraseña 902 let datos = {}; 903 datos.antiguaContrasenia = $('input#antiguaContrasenia').val(); 904 datos.nuevaContrasenia1 = $('input#nuevaContrasenia1').val(); 905 datos.nuevaContrasenia2 = $('input#nuevaContrasenia2').val(); 906 datos.u = $('input#u').val(); 907 datos.t = $('input#t').val(); 908 datos.uuid = $('input#uuid').val(); 909 910 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 911 912 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') {
913 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 914 915 if (usarRecaptcha === 'recaptchav3') { 916 grecaptcha.ready(function () { 917 grecaptcha.execute(claveRecaptcha, { action: "resetPasswordFirstLogin" }).then(function (token) { 918 datos.recaptchaToken = token; 919 doCambiarContraseniaTrasLogin(datos, '/system/modules/com.saga.login/elements/cambiar_contrasenia_tras_login_service.jsp'); 920 }); 921 }); 922 } else { 923 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 924 doCambiarContraseniaTrasLogin(datos, '/system/modules/com.saga.login/elements/cambiar_contrasenia_tras_login_service.jsp'); 925 } 926 927 } else { 928 doCambiarContraseniaTrasLogin(datos, '/system/modules/com.saga.login/elements/cambiar_contrasenia_tras_login_service.jsp'); 929 } 930 931 } else { 932 $('form#resetPasswordFirstLogin').validate().showErrors(); // muestro errores de validación 933 } 934 }); 935 936 // Desbloquear usuario 937 $('input#unlockUserSubmit').click(function (e) { 938 e.preventDefault(); 939 940 $.validator.addMethod("recaptchaValida", function () { 941 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 942 if (usarRecaptcha === 'recaptchav2') { 943 return $('#g-recaptcha-response').val() !== ""; 944 } 945 return true; // si no se usa reCAPTCHA v2, se considera válido 946 }, recaptcha_obligatorio); 947 948 $('form#unlockUser').submit(function (event) { 949 event.preventDefault(); 950 }).validate({ 951 ignore: "", 952 rules: { 953 usuarioDesbloqueo: {required: true}, 954 'g-recaptcha-response': {recaptchaValida: true} 955 }, 956 messages: { 957 usuarioDesbloqueo: usuario_obligatorio, 958 'g-recaptcha-response': recaptcha_obligatorio 959 }, 960 errorPlacement: function (error, element) { 961 if (element.attr("name") === "g-recaptcha-response") { 962 $('.g-recaptcha').after(error); 963 } else { 964 error.insertAfter(element); 965 } 966 } 967 }); 968 969 if ($('form#unlockUser').valid()) { 970 // Generamos los datos para hacer el desbloqueo del usuario 971 let datos = {}; 972 datos.usuarioDesbloqueo = $('input#usuarioDesbloqueo').val(); 973 datos.uuid = $('input#uuid').val(); 974 975 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 976 977 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 978 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 979 980 if (usarRecaptcha === 'recaptchav3') { 981 grecaptcha.ready(function () { 982 grecaptcha.execute(claveRecaptcha, { action: "unlockUser" }).then(function (token) { 983 datos.recaptchaToken = token; 984 doDesbloquearUsuario(datos,'/system/modules/com.saga.login/elements/desbloquear_usuario_service.jsp'); 985 }); 986 }); 987 } else { 988 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 989 doDesbloquearUsuario(datos,'/system/modules/com.saga.login/elements/desbloquear_usuario_service.jsp'); 990 } 991 992 } else { 993 doDesbloquearUsuario(datos,'/system/modules/com.saga.login/elements/desbloquear_usuario_service.jsp'); 994 } 995 996 } else { 997 $('form#unlockUser').validate().showErrors(); // muestro errores de validación 998 } 999 }); 1000 1001 // Aceptación de la LOPD 1002 $('input#lopdSubmit').click(function (e) { 1003 e.preventDefault(); 1004 1005 // Generamos los datos para aceptar la LOPD 1006 let datos = {}; 1007 datos.u = $('input#u').val(); 1008 datos.t = $('input#t').val(); 1009 datos.uuid = $('input#uuid').val(); 1010 1011 let usarRecaptcha = $('input#isRecaptchaActivated').val(); 1012 1013 if (usarRecaptcha === 'recaptchav2' || usarRecaptcha === 'recaptchav3') { 1014 let claveRecaptcha = $('form#formLoginSimple').data('recaptcha'); 1015 1016 if (usarRecaptcha === 'recaptchav3') { 1017 grecaptcha.ready(function () { 1018 grecaptcha.execute(claveRecaptcha, { action: "lopd" }).then(function (token) { 1019 datos.recaptchaToken = token; 1020 doAceptarLopd(datos,'/system/modules/com.saga.login/elements/aceptar_lopd_service.jsp'); 1021 }); 1022 }); 1023 } else { 1024 datos.recaptchaToken = document.getElementById('g-recaptcha-response').value; 1025 doAceptarLopd(datos,'/system/modules/com.saga.login/elements/aceptar_lopd_service.jsp'); 1026 } 1027 1028 } else { 1029 doAceptarLopd(datos,'/system/modules/com.saga.login/elements/aceptar_lopd_service.jsp'); 1030 } 1031 1032 }); 1033 console.log("Cargando la jsp de function"); 1034 // Pegar el código de 6 dÃgitos desde el portapapeles al doble factor 1035 let $inputsDobleFactor = $('.pin-container .pin-input'); 1036 $('.pin-container .pin-input:first-of-type').on('paste', function (e) { 1037 console.log("entrando a la funcion!"); 1038 e.preventDefault(); // Evitamos el comportamiento por defecto 1039 let originalEvent = e.originalEvent || {};
1040 let clipboard = originalEvent['clipboardData'] || window['clipboardData']; 1041 let pasteData = clipboard ? clipboard.getData('text') : ''; 1042 1043 // Validamos que el código tenga 6 dÃgitos 1044 $inputsDobleFactor.each(function (index) { 1045 $(this).val(pasteData.charAt(index)); 1046 }); 1047 $inputsDobleFactor.last().trigger('focus'); 1048 }); 1049 1050 }); 1051
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.