Sobre el proyecto
// Variables globales para guardar los IDs de cada widget var widgetId_interes; var widgetId_bienvenida; var widgetId_solicita; var widgetId_calc; const SECRET_KEY_STRING = "XmNmy(tqNM(W]AZr0^kxtR^D0!?=App1"; const ALGORITHM = "aes-256-gcm"; const strToBuf = (str) => new TextEncoder().encode(str); async function encryptValue(text) { try { const keyData = strToBuf(SECRET_KEY_STRING); const key = await window.crypto.subtle.importKey('raw', keyData, { name: 'AES-GCM' }, false, ['encrypt']); const iv = window.crypto.getRandomValues(new Uint8Array(12)); const encodedText = strToBuf(text); const encryptedBuffer = await window.crypto.subtle.encrypt( { name: 'AES-GCM', iv: iv }, key, encodedText ); const ivHex = Array.from(iv).map(b => b.toString(16).padStart(2, '0')).join(''); const encryptedHex = Array.from(new Uint8Array(encryptedBuffer)).map(b => b.toString(16).padStart(2, '0')).join(''); return `${ivHex}:${encryptedHex}`; } catch (error) { console.error('Encryption Error:', error); return text; } } // Esta función es llamada por el script de Google cuando termina de cargar var onRecaptchaLoad = function() { // Renderiza el widget para el formulario de interés si el contenedor existe en la página actual if (document.getElementById('recaptcha-container-interes')) { widgetId_interes = grecaptcha.render('recaptcha-container-interes', { 'sitekey' : '6LfwanYrAAAAANN4IENZLaBA2UKXoAL-YRJRXmDJ' }); } // Renderiza el widget para el formulario de bienvenida si el contenedor existe en la página actual if (document.getElementById('recaptcha-container-bienvenida')) { widgetId_bienvenida = grecaptcha.render('recaptcha-container-bienvenida', { 'sitekey' : '6LfwanYrAAAAANN4IENZLaBA2UKXoAL-YRJRXmDJ' }); } // Renderiza el widget para el formulario de bienvenida si el contenedor existe en la página actual if (document.getElementById('recaptcha-container-solicita')) { widgetId_solicita = grecaptcha.render('recaptcha-container-solicita', { 'sitekey' : '6LfwanYrAAAAANN4IENZLaBA2UKXoAL-YRJRXmDJ' }); } /* Renderiza el widget para el formulario de calc si el contenedor existe en la página actual if (document.getElementById('recaptcha-container-solicita')) { widgetId_solicita = grecaptcha.render('recaptcha-container-solicita', { 'sitekey' : '6LfwanYrAAAAANN4IENZLaBA2UKXoAL-YRJRXmDJ' }); } */ }; document.addEventListener("DOMContentLoaded", function() { const previewModalOverlay = document.getElementById('previewModalOverlayB'); if(!previewModalOverlay) return; // Si el modal no existe, no ejecuta nada. const closeModalBtn = document.getElementById('closeModalBtnB'); const modalTitle = document.getElementById('modalTitleB'); const bienvenidaForm = document.getElementById('form-bienvenida'); $('#form-bienvenida').on('input', 'input, textarea', function(e) { var $input = $(this); var name = $input.attr('name'); var value = $input.val(); if (name === 'email') { // Sin espacios ni caracteres peligrosos value = value.replace(/[\s<>,:;+/*~^%()=?!¡¿?\$#|[\]{}''"]|'|`/g, ""); } $input.val(value); }); function showWelcomeModalB() { modalTitle.textContent = "Bienvenido al portal de Viviendas"; previewModalOverlay.style.display = 'flex'; } function closeWelcomeModalB() { previewModalOverlay.style.display = "none"; localStorage.setItem('modalClosedTimestampV', Date.now()); if (bienvenidaForm) bienvenidaForm.reset(); $(bienvenidaForm).find('.welcome-form-input').removeClass('error').next('label.error').remove(); } closeModalBtn.addEventListener('click', closeWelcomeModalB); previewModalOverlay.addEventListener('click', function(event) { if (event.target === previewModalOverlay) closeWelcomeModalB(); }); $(document).ready(function() { const formElement = $("#form-bienvenida"); if(!formElement.length) return; formElement.validate({ rules: { email: { required: true, email: true } }, messages: { email: { required: "El correo electrónico es obligatorio.", email: "Por favor, ingresa un correo electrónico válido." } }, errorPlacement: function(error, element) { error.addClass('error-message'); error.insertAfter(element); } }); formElement.on('submit',async function(e) { e.preventDefault(); if (!$(this).valid()) return; const recaptchaResponse = grecaptcha.getResponse(widgetId_bienvenida); const errorLabel = $('#bienvenida-recaptcha-error'); if (recaptchaResponse.length === 0) { errorLabel.removeClass('captcha-error-hidden'); return; } errorLabel.addClass('captcha-error-hidden'); var fieldPromises = $(this).serializeArray().map(async field => { console.log('Original:', field.name, field.value); if(field.name === "g-recaptcha-response") { return { name: field.name, value: field.value } } else { const encryptedName = await encryptValue(field.name); const encryptedValue = await encryptValue(field.value); console.log('Encrypted:', encryptedName, encryptedValue); return { name: encryptedName, value: encryptedValue }; } }); var fields = await Promise.all(fieldPromises); console.log('Encrypted Fields:', fields); var submissionData = { submittedAt: Date.now(), fields: fields, context: { pageUri: window.location.href, pageName: document.title }, recaptchaResponse: recaptchaResponse }; formElement.find('.btn-enviar').prop('disabled', true).text('Enviando...'); $.ajax({ url: 'https://vivienda.banrural.com.gt/_hcms/api/envio-forms-v?tipo=bienvenida', type: 'POST', contentType: 'application/json', data: JSON.stringify(submissionData), success: function(response) { grecaptcha.reset(widgetId_bienvenida); errorLabel.addClass('captcha-error-hidden'); localStorage.setItem('emailBienvenidaV', 'true'); formElement.find('.btn-enviar').prop('disabled', false).text('Suscribirse'); closeWelcomeModalB(); Swal.fire('Éxito', '¡Gracias por suscribirte!', 'success'); }, error: function(xhr, status, error) { grecaptcha.reset(widgetId_bienvenida); errorLabel.addClass('captcha-error-hidden'); const errorData = xhr.responseJSON; if (xhr.status === 403 && errorData && errorData.message) { errorLabel.text(errorData.message).removeClass('captcha-error-hidden'); } else { errorLabel.text('Hubo un problema. Inténtalo de nuevo.').removeClass('captcha-error-hidden'); } formElement.find('.btn-enviar').prop('disabled', false).text('Suscribirse'); } }); }); const emailBienvenidaV = localStorage.getItem('emailBienvenidaV'); if (!emailBienvenidaV) { const modalClosedTimestamp = localStorage.getItem('modalClosedTimestampV'); const oneWeekInMillis = 7 * 24 * 60 * 60 * 1000; const currentTime = Date.now(); if (!modalClosedTimestamp || (currentTime - parseInt(modalClosedTimestamp)) > oneWeekInMillis) { setTimeout(showWelcomeModalB, 60000); } } }); });