const fs = require('fs') const path = require('path') const os = require('os') const argv = require('minimist')(process.argv.slice(2)) const _ = require('lodash/fp') require('dotenv').config({ path: process.env.NODE_ENV === 'production' ? path.resolve('/etc', 'lamassu', '.env') : path.resolve(__dirname, '../.env') }) const DATABASE = process.env.LAMASSU_DB ?? 'PROD' const dbMapping = psqlConf => ({ STRESS_TEST: _.replace('lamassu', 'lamassu_stress', psqlConf), PAZUZ: _.replace('lamassu', 'lamassu_pazuz', psqlConf), RELEASE: _.replace('lamassu', 'lamassu_release', psqlConf), DEV: _.replace('lamassu', 'lamassu', psqlConf), PROD: _.replace('lamassu', 'lamassu', psqlConf) }) /** * @return {{path: string, opts: any}} */ function load () { if (process.env.LAMASSU_CONFIG) { const configPath = process.env.LAMASSU_CONFIG return { path: configPath, opts: JSON.parse(fs.readFileSync(configPath)) } } if (argv.f) { const configPath = argv.f return { path: configPath, opts: JSON.parse(fs.readFileSync(configPath)) } } try { const globalConfigPath = path.resolve('/etc', 'lamassu', 'lamassu.json') const config = { path: globalConfigPath, opts: JSON.parse(fs.readFileSync(globalConfigPath)) } config.opts.postgresql = dbMapping(config.opts.postgresql)[DATABASE] return config } catch (_) { try { const homeConfigPath = path.resolve(os.homedir(), '.lamassu', 'lamassu.json') const config = { path: homeConfigPath, opts: JSON.parse(fs.readFileSync(homeConfigPath)) } config.opts.postgresql = dbMapping(config.opts.postgresql)[DATABASE] return config } catch (_) { console.error("Couldn't open lamassu.json config file.") process.exit(1) } } } module.exports = load