diff --git a/src/page/login.js b/src/page/login.js index 80bce35..a070335 100644 --- a/src/page/login.js +++ b/src/page/login.js @@ -1,7 +1,169 @@ PAGES.login = { Esconder: true, Title: "Login", + onboarding: function (step) { + // Multi-step onboarding flow + step = step || 'config'; + + if (step === 'config') { + // Step 1: "Configuraci贸n de datos" + var field_couch = safeuuid(); + var field_couch_dbname = safeuuid(); + var field_couch_user = safeuuid(); + var field_couch_pass = safeuuid(); + var field_secret = safeuuid(); + var btn_existing_server = safeuuid(); + var btn_new_server = safeuuid(); + var btn_skip = safeuuid(); + var div_server_config = safeuuid(); + + container.innerHTML = ` +
Para comenzar, elige c贸mo quieres configurar tu base de datos:
+ + + `; + + document.getElementById(btn_existing_server).onclick = () => { + document.getElementById(div_server_config).style.display = 'block'; + }; + + document.getElementById(btn_new_server).onclick = () => { + window.open('https://tech.eus/telesec-signup.php', '_blank'); + toastr.info('Una vez creado el servidor, vuelve aqu铆 y con茅ctate usando el bot贸n "Conectar a un servidor existente"'); + }; + + document.getElementById(btn_skip).onclick = () => { + // Continue to persona creation without server config + location.hash = '#login,onboarding-persona'; + }; + + document.getElementById(btn_skip + '-save').onclick = () => { + var url = document.getElementById(field_couch).value.trim(); + var dbname = document.getElementById(field_couch_dbname).value.trim(); + var user = document.getElementById(field_couch_user).value.trim(); + var pass = document.getElementById(field_couch_pass).value; + var secret = document.getElementById(field_secret).value || ''; + + if (!url) { + toastr.error('Por favor ingresa un servidor CouchDB'); + return; + } + + localStorage.setItem('TELESEC_COUCH_URL', 'https://' + url); + localStorage.setItem('TELESEC_COUCH_DBNAME', dbname); + localStorage.setItem('TELESEC_COUCH_USER', user); + localStorage.setItem('TELESEC_COUCH_PASS', pass); + if (secret) { + localStorage.setItem('TELESEC_SECRET', secret.toUpperCase()); + SECRET = secret.toUpperCase(); + } + + try { + DB.init({ secret: SECRET, remoteServer: 'https://' + url, username: user, password: pass, dbname: dbname || undefined }); + toastr.success('Servidor configurado correctamente'); + // Continue to persona creation + setTimeout(() => { + location.hash = '#login,onboarding-persona'; + }, 500); + } catch (e) { + toastr.error('Error al configurar el servidor: ' + (e.message || e)); + } + }; + + } else if (step === 'persona') { + // Step 2: "Crea una persona" + var field_nombre = safeuuid(); + var btn_crear = safeuuid(); + + container.innerHTML = ` +Para continuar, necesitas crear una cuenta personal con permisos de administrador.
+ + `; + + document.getElementById(btn_crear).onclick = () => { + var nombre = document.getElementById(field_nombre).value.trim(); + if (!nombre) { + toastr.error('Por favor ingresa tu nombre'); + return; + } + + // Create persona with all admin permissions from PERMS object + var allPerms = Object.keys(PERMS).join(',') + ','; + var personaId = 'admin-' + Date.now(); + var persona = { + Nombre: nombre, + Roles: allPerms, + Region: '', + Monedero_Balance: 0, + markdown: 'Cuenta de administrador creada durante el onboarding' + }; + + DB.put('personas', personaId, persona).then(() => { + toastr.success('隆Cuenta creada exitosamente! 馃帀'); + localStorage.setItem('TELESEC_ONBOARDING_COMPLETE', 'true'); + localStorage.setItem('TELESEC_ADMIN_ID', personaId); + + // Auto-login + SUB_LOGGED_IN_ID = personaId; + SUB_LOGGED_IN_DETAILS = persona; + SUB_LOGGED_IN = true; + SetPages(); + + setTimeout(() => { + location.hash = '#index'; + location.reload(); + }, 800); + }).catch((e) => { + toastr.error('Error creando cuenta: ' + (e.message || e)); + }); + }; + } + }, edit: function (mid) { + // Handle onboarding routes + if (mid === 'onboarding-config') { + PAGES.login.onboarding('config'); + return; + } + if (mid === 'onboarding-persona') { + PAGES.login.onboarding('persona'); + return; + } + // Setup form to configure CouchDB remote and initial group/secret var field_couch = safeuuid(); var field_couch_dbname = safeuuid(); @@ -189,6 +351,16 @@ PAGES.login = { }; }, index: function (mid) { + // Check if onboarding is needed + var onboardingComplete = localStorage.getItem('TELESEC_ONBOARDING_COMPLETE'); + var hasPersonas = Object.keys(SC_Personas).length > 0; + + // If no personas exist and onboarding not complete, redirect to onboarding + if (!hasPersonas && !onboardingComplete && !AC_BYPASS) { + location.hash = '#login,onboarding-config'; + return; + } + var field_persona = safeuuid(); var btn_guardar = safeuuid(); var btn_reload = safeuuid();