Se traen los mismos cambios: la cuenta sale de OASIS_ACCOUNT con el nombre validado, statePath se separa por cuenta, y los doce sitios que construian la ruta como os.homedir() + '/.ssb' pasan a usar la de la cuenta activa. El mas importante sigue siendo panicmode_model: con varias identidades habria borrado la que no era. Tambien entra el gate que faltaba en renderMobileTopbar, sin el cual la cabecera de movil se dibujaba encima de la de upstream en escritorio. La configuracion de escritorio no se toca: sigue con tema Dark-SNH y todos los modulos. Verificado arrancando sin OASIS_MOBILE: ocho rutas OK, incluidas /peers y /stats que son las que leen gossip.json, y cero rastro de la interfaz movil.
49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const Config = require('ssb-config/inject');
|
|
const minimist = require('minimist');
|
|
|
|
const configPath = path.resolve(__dirname, '../configs', 'server-config.json');
|
|
const configData = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
|
|
const argv = process.argv.slice(2);
|
|
const i = argv.indexOf('--');
|
|
const conf = argv.slice(i + 1);
|
|
const cliArgs = ~i ? argv.slice(0, i) : argv;
|
|
|
|
// Nombre de la cuenta: define donde vive todo (~/.<cuenta>) y de ahi cuelgan el
|
|
// secret, la base de datos, los blobs y el socket. Sin la variable se usa 'ssb',
|
|
// que es lo de siempre, asi que las instalaciones existentes no notan nada.
|
|
//
|
|
// Se valida a proposito: este nombre acaba en rutas de fichero y hay operaciones
|
|
// destructivas (el modo panico borra el directorio de la cuenta) que no deben poder
|
|
// apuntar fuera de sitio.
|
|
const ACCOUNT_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/;
|
|
const rawAccount = process.env.OASIS_ACCOUNT || 'ssb';
|
|
const account = ACCOUNT_RE.test(rawAccount) ? rawAccount : 'ssb';
|
|
if (account !== rawAccount) {
|
|
console.error(`[oasis] OASIS_ACCOUNT no valido (${rawAccount}); se usa 'ssb'`);
|
|
}
|
|
|
|
let config = Config(account, minimist(conf));
|
|
config = { ...config, ...configData };
|
|
|
|
const debug = process.argv.includes('--debug') || process.env.OASIS_DEBUG === '1' || process.env.OASIS_DEBUG === 'true';
|
|
if (debug) {
|
|
config.logging = { ...(config.logging || {}), level: 'debug' };
|
|
}
|
|
|
|
const megabyte = Math.pow(2, 20);
|
|
config.blobs = config.blobs || {};
|
|
config.blobs.max = 50 * megabyte;
|
|
|
|
config.account = account;
|
|
|
|
config.statePath = (name) => {
|
|
// El directorio externo se separa por cuenta: sin esto dos identidades
|
|
// compartirian estado, que es justo lo que hay que evitar.
|
|
if (process.env.OASIS_STATE_DIR) return path.join(process.env.OASIS_STATE_DIR, account, name);
|
|
return config.path ? path.join(config.path, name) : null;
|
|
};
|
|
|
|
module.exports = config;
|