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 (~/.) 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. // // Manda la variable de entorno; si no esta, la cuenta que dejo anotada el selector // de identidades de los ajustes; y si tampoco, 'ssb'. const ACCOUNT_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/; let annotated = null; try { const f = path.resolve(__dirname, '../configs', 'active-account'); annotated = fs.readFileSync(f, 'utf8').trim() || null; } catch (_) {} const rawAccount = process.env.OASIS_ACCOUNT || annotated || 'ssb'; const account = ACCOUNT_RE.test(rawAccount) ? rawAccount : 'ssb'; if (account !== rawAccount) { console.error(`[oasis] cuenta no valida (${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;