estructura: los ficheros de la rama, donde los pondria el dev
Upstream no usa ni un solo subdirectorio en src/views, src/backend, src/models, src/client/assets/styles ni translations: todo plano. La rama habia creado dos (views/fork/ y translations/fork/), que es lo que mas se separaba de su forma de organizar el codigo. Se deshacen, y los ficheros pasan a llamarse como los suyos: views/fork/hive_nav.js -> views/hive_views.js (como main_views.js) views/fork/identities.js -> views/identities_view.js (como *_view.js) translations/fork/i18n_fork.js -> translations/i18n_fork.js (junto a i18n.js) backend/fork_routes.js -> backend/karvan_routes.js (familia karvan_*) Ademas se retira una ruta duplicada: /legacy/export estaba declarada dos veces, en backend.js (la del dev) y en el fichero de rutas de la rama, con el mismo cuerpo salvo un && defensivo. Nacio cuando el formulario se paso a GET; al devolverlo a POST quedo como copia exacta. Con ella se van legacyModel y onboardingModel, que ya no hacia falta inyectar. La cabecera del fichero de rutas explica ahora por que sigue existiendo, con los datos medidos y no de memoria: backend.js concentra 625 rutas y se reescribe 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. Quedan diez ficheros propios, todos siguiendo la convencion de upstream, y +247 lineas repartidas en 21 ficheros suyos (sin contar OasisMobile.css, que es el tema de la rama). Comprobado tras mover: arranque, las siete rutas principales, el selector de identidades con sus siete entradas y su aviso, crear sala y enviar mensaje en Karvan, y la exportacion de identidad por la ruta del dev.
This commit is contained in:
parent
e0ff70c138
commit
5c769a5a10
8 changed files with 22 additions and 36 deletions
|
|
@ -9442,8 +9442,8 @@ const middleware = [
|
||||||
await next();
|
await next();
|
||||||
},
|
},
|
||||||
// rutas propias de la rama (Karvan, barra inferior, exportacion): fuera de la cadena de upstream
|
// rutas propias de la rama (Karvan, barra inferior, exportacion): fuera de la cadena de upstream
|
||||||
require('./fork_routes')({ cooler, pull, pmModel, checkMod, getViewerId,
|
require('./karvan_routes')({ cooler, pull, pmModel, checkMod, getViewerId,
|
||||||
getConfig, saveConfig, legacyModel, onboardingModel,
|
getConfig, saveConfig,
|
||||||
isLoopbackRequest, sendErrorPage }),
|
isLoopbackRequest, sendErrorPage }),
|
||||||
routes,
|
routes,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
// Rutas propias de la rama experimental (modulo Karvan: salas efimeras en RAM,
|
// Rutas del modulo Karvan (salas efimeras en RAM, mensajes temporales y
|
||||||
// mensajes temporales y senalizacion WebRTC).
|
// 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 pone todas sus rutas en backend.js: 625 en una sola cadena fluida.
|
||||||
// upstream en una sola cadena fluida y se mueve +905/-298 lineas por release, asi
|
// Estas viven aparte porque ese fichero se reescribe entero en cada release
|
||||||
// que cualquier ruta anadida en medio entra en conflicto en cada integracion.
|
// (+833/-286 en la 0.9.2, +266/-31 en la 0.9.1), asi que una ruta anadida en
|
||||||
// Aqui se montan en un router propio que se inserta en la cadena de middleware
|
// medio entra en conflicto cada vez. Se montan en un router propio insertado
|
||||||
// antes del router de upstream; lo que no casa cae a next() y sigue su curso.
|
// 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
|
// Las dependencias se inyectan en lugar de reconstruirse: cooler abre la conexion
|
||||||
// al sbot y duplicarla abriria un segundo cliente muxrpc.
|
// 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");
|
const { karvanView, karvanRoomView } = require("../views/karvan_view");
|
||||||
|
|
||||||
module.exports = ({ cooler, pull, pmModel, checkMod, getViewerId,
|
module.exports = ({ cooler, pull, pmModel, checkMod, getViewerId,
|
||||||
getConfig, saveConfig, legacyModel, onboardingModel,
|
getConfig, saveConfig, isLoopbackRequest, sendErrorPage }) => {
|
||||||
isLoopbackRequest, sendErrorPage }) => {
|
|
||||||
// FORK_IA_UX Fase 2 (cross-device): relay de MENSAJES de Karvan por privados SSB. Funciona vía un pub
|
// 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).
|
// (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.
|
// No toca el arranque del SSB. Ingesta por stream EN VIVO (no polling) → eficiente.
|
||||||
|
|
@ -229,22 +231,6 @@ async function karvanInviteAuthor(roomId) {
|
||||||
);
|
);
|
||||||
// se responde primero: si se sale antes, el navegador se queda sin pagina
|
// se responde primero: si se sale antes, el navegador se queda sin pagina
|
||||||
setTimeout(() => process.exit(0), 500);
|
setTimeout(() => process.exit(0), 500);
|
||||||
})
|
|
||||||
// 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();
|
return forkRouter.routes();
|
||||||
|
|
@ -13,7 +13,7 @@ languages.forEach(language => {
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
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 || {}));
|
languages.forEach(l => Object.assign(i18n[l] = i18n[l] || {}, overlay[l] || overlay.en || {}));
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@
|
||||||
// cada integracion. Aqui solo depende de i18n, que se inyecta porque main_views
|
// cada integracion. Aqui solo depende de i18n, que se inyecta porque main_views
|
||||||
// lo muta en cada peticion sin reasignarlo.
|
// 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 { 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 { getConfig } = require("../configs/config-manager.js");
|
||||||
const sharedState = require("../../configs/shared-state");
|
const sharedState = require("../configs/shared-state");
|
||||||
|
|
||||||
module.exports = ({ i18n }) => {
|
module.exports = ({ i18n }) => {
|
||||||
// === Oasis UX (portado de 0.8.7_UX): topbar + bottombar + hive ===
|
// === Oasis UX (portado de 0.8.7_UX): topbar + bottombar + hive ===
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
module.exports = ({ i18n, html }) => {
|
module.exports = ({ i18n, html }) => {
|
||||||
const { form, button, div, h2, p, section, input, span, ul, li, a } = 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 renderIdentities = (activeAccount) => {
|
||||||
const names = accounts.list();
|
const names = accounts.list();
|
||||||
|
|
@ -1190,9 +1190,9 @@ const renderTasksLink = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// === Oasis UX: topbar + bottombar + hive ===
|
// === 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.
|
// 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 renderMobileTopbar = forkNav.renderMobileTopbar;
|
||||||
const renderBottomBar = forkNav.renderBottomBar;
|
const renderBottomBar = forkNav.renderBottomBar;
|
||||||
const renderHiveNav = forkNav.renderHiveNav;
|
const renderHiveNav = forkNav.renderHiveNav;
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ const { template, selectedLanguage, i18n, setLanguage } = require('./main_views'
|
||||||
const i18nBase = require("../client/assets/translations/i18n");
|
const i18nBase = require("../client/assets/translations/i18n");
|
||||||
const { WORKFLOWS, currentWorkflow } = require('../models/workflows_model');
|
const { WORKFLOWS, currentWorkflow } = require('../models/workflows_model');
|
||||||
const html = require("../server/node_modules/hyperaxe");
|
const html = require("../server/node_modules/hyperaxe");
|
||||||
// selector de identidades: la implementacion vive en ./fork/identities.js
|
// selector de identidades: la implementacion vive en ./identities_view.js
|
||||||
const { renderIdentities } = require('./fork/identities')({ i18n, html });
|
const { renderIdentities } = require('./identities_view')({ i18n, html });
|
||||||
|
|
||||||
const snhUrl = "https://wiki.solarnethub.com/socialnet/overview";
|
const snhUrl = "https://wiki.solarnethub.com/socialnet/overview";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue