diff --git a/src/backend/backend.js b/src/backend/backend.js index 9ee62e5..0f1e06c 100644 --- a/src/backend/backend.js +++ b/src/backend/backend.js @@ -9442,8 +9442,8 @@ const middleware = [ await next(); }, // rutas propias de la rama (Karvan, barra inferior, exportacion): fuera de la cadena de upstream - require('./fork_routes')({ cooler, pull, pmModel, checkMod, getViewerId, - getConfig, saveConfig, legacyModel, onboardingModel, + require('./karvan_routes')({ cooler, pull, pmModel, checkMod, getViewerId, + getConfig, saveConfig, isLoopbackRequest, sendErrorPage }), routes, ]; diff --git a/src/backend/fork_routes.js b/src/backend/karvan_routes.js similarity index 87% rename from src/backend/fork_routes.js rename to src/backend/karvan_routes.js index 868af50..524d8e3 100644 --- a/src/backend/fork_routes.js +++ b/src/backend/karvan_routes.js @@ -1,12 +1,15 @@ "use strict"; -// Rutas propias de la rama experimental (modulo Karvan: salas efimeras en RAM, -// mensajes temporales y senalizacion WebRTC). +// Rutas del modulo Karvan (salas efimeras en RAM, mensajes temporales y +// senalizacion WebRTC), mas las dos pantallas que la rama anade a los ajustes. // -// Viven fuera de backend.js a proposito: ese fichero concentra las 577 rutas de -// upstream en una sola cadena fluida y se mueve +905/-298 lineas por release, asi -// que cualquier ruta anadida en medio entra en conflicto en cada integracion. -// Aqui se montan en un router propio que se inserta en la cadena de middleware -// antes del router de upstream; lo que no casa cae a next() y sigue su curso. +// Upstream pone todas sus rutas en backend.js: 625 en una sola cadena fluida. +// Estas viven aparte porque ese fichero se reescribe entero en cada release +// (+833/-286 en la 0.9.2, +266/-31 en la 0.9.1), asi que una ruta anadida en +// medio entra en conflicto cada vez. Se montan en un router propio insertado +// antes del de upstream; lo que no casa cae a next() y sigue su curso. +// +// El nombre sigue a la familia del modulo: karvan_model.js, karvan_view.js, +// karvan.js, karvan.css. // // Las dependencias se inyectan en lugar de reconstruirse: cooler abre la conexion // al sbot y duplicarla abriria un segundo cliente muxrpc. @@ -19,8 +22,7 @@ const karvanModel = require('../models/karvan_model')({}); // FORK_IA_UX: salas const { karvanView, karvanRoomView } = require("../views/karvan_view"); module.exports = ({ cooler, pull, pmModel, checkMod, getViewerId, - getConfig, saveConfig, legacyModel, onboardingModel, - isLoopbackRequest, sendErrorPage }) => { + getConfig, saveConfig, isLoopbackRequest, sendErrorPage }) => { // FORK_IA_UX Fase 2 (cross-device): relay de MENSAJES de Karvan por privados SSB. Funciona vía un pub // (el privado se replica al otro móvil); los SIGNAL de WebRTC NO se relayan (serían demasiados/lentos por el log). // No toca el arranque del SSB. Ingesta por stream EN VIVO (no polling) → eficiente. @@ -213,22 +215,6 @@ async function karvanInviteAuthor(roomId) { // que es quien sabe como hacerlo. Basta con anotarla y reiniciar. accounts.setActive(name); ctx.redirect('/settings'); - }) - // POST y no GET: en la direccion, la contraseña acaba en el historial del - // navegador, en el registro del servidor y en el Referer de lo siguiente que - // se cargue. En el cuerpo, no. - .post('/legacy/export', koaBody(), async (ctx) => { - if (!isLoopbackRequest(ctx)) { ctx.status = 403; ctx.body = ''; return; } - const pw = ctx.request.body && ctx.request.body.password; - if (!pw || pw.length < 32) return ctx.redirect('/legacy'); - try { - const { filename, data } = await legacyModel.exportData({ password: pw }); - ctx.set('Content-Type', 'application/octet-stream'); - ctx.set('Content-Disposition', `attachment; filename="${filename}"`); - ctx.set('Content-Length', String(data.length)); - ctx.body = data; - try { onboardingModel.markStep('backup'); } catch (_) {} - } catch (error) { sendErrorPage(ctx, error.message); } }); return forkRouter.routes(); diff --git a/src/client/assets/translations/i18n.js b/src/client/assets/translations/i18n.js index 658c1bf..2ed00fb 100644 --- a/src/client/assets/translations/i18n.js +++ b/src/client/assets/translations/i18n.js @@ -13,7 +13,7 @@ languages.forEach(language => { }); try { - const overlay = require('./fork/i18n_fork.js'); + const overlay = require('./i18n_fork.js'); languages.forEach(l => Object.assign(i18n[l] = i18n[l] || {}, overlay[l] || overlay.en || {})); } catch (e) {} diff --git a/src/client/assets/translations/fork/i18n_fork.js b/src/client/assets/translations/i18n_fork.js similarity index 100% rename from src/client/assets/translations/fork/i18n_fork.js rename to src/client/assets/translations/i18n_fork.js diff --git a/src/views/fork/hive_nav.js b/src/views/hive_views.js similarity index 98% rename from src/views/fork/hive_nav.js rename to src/views/hive_views.js index 6ccad5a..ea30059 100644 --- a/src/views/fork/hive_nav.js +++ b/src/views/hive_views.js @@ -7,9 +7,9 @@ // cada integracion. Aqui solo depende de i18n, que se inyecta porque main_views // lo muta en cada peticion sin reasignarlo. -const { a, button, div, form, h2, h3, img, input, label, nav, p, section, span } = require("../../server/node_modules/hyperaxe"); -const { getConfig } = require("../../configs/config-manager.js"); -const sharedState = require("../../configs/shared-state"); +const { a, button, div, form, h2, h3, img, input, label, nav, p, section, span } = require("../server/node_modules/hyperaxe"); +const { getConfig } = require("../configs/config-manager.js"); +const sharedState = require("../configs/shared-state"); module.exports = ({ i18n }) => { // === Oasis UX (portado de 0.8.7_UX): topbar + bottombar + hive === diff --git a/src/views/fork/identities.js b/src/views/identities_view.js similarity index 97% rename from src/views/fork/identities.js rename to src/views/identities_view.js index 8ad0c2a..22f0a05 100644 --- a/src/views/fork/identities.js +++ b/src/views/identities_view.js @@ -10,7 +10,7 @@ module.exports = ({ i18n, html }) => { const { form, button, div, h2, p, section, input, span, ul, li, a } = html; - const accounts = require('../../backend/accounts.js'); + const accounts = require('../backend/accounts.js'); const renderIdentities = (activeAccount) => { const names = accounts.list(); diff --git a/src/views/main_views.js b/src/views/main_views.js index 4ec97a0..2920101 100644 --- a/src/views/main_views.js +++ b/src/views/main_views.js @@ -1190,9 +1190,9 @@ const renderTasksLink = () => { }; // === Oasis UX: topbar + bottombar + hive === -// La implementacion vive en ./fork/hive_nav.js para que las reescrituras de +// La implementacion vive en ./hive_views.js para que las reescrituras de // upstream sobre este fichero no arrastren la interfaz de la rama. -const forkNav = require('./fork/hive_nav')({ i18n }); +const forkNav = require('./hive_views')({ i18n }); const renderMobileTopbar = forkNav.renderMobileTopbar; const renderBottomBar = forkNav.renderBottomBar; const renderHiveNav = forkNav.renderHiveNav; diff --git a/src/views/settings_view.js b/src/views/settings_view.js index 6208e40..ef5e69e 100644 --- a/src/views/settings_view.js +++ b/src/views/settings_view.js @@ -6,8 +6,8 @@ const { template, selectedLanguage, i18n, setLanguage } = require('./main_views' const i18nBase = require("../client/assets/translations/i18n"); const { WORKFLOWS, currentWorkflow } = require('../models/workflows_model'); const html = require("../server/node_modules/hyperaxe"); -// selector de identidades: la implementacion vive en ./fork/identities.js -const { renderIdentities } = require('./fork/identities')({ i18n, html }); +// selector de identidades: la implementacion vive en ./identities_view.js +const { renderIdentities } = require('./identities_view')({ i18n, html }); const snhUrl = "https://wiki.solarnethub.com/socialnet/overview";