PageSourceSearch

https://ocms.eurosai.org/system/modules/com.saga.login/resources/js/functions.jsp

js eurosai.org collected 2026-10-02 04:21:49 UTC 35,925 bytes, 1,051 lines download raw bytes

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.