'use strict'; module.exports = (() => { const commandLineArgs = require('command-line-args'); const commandLineUsage = require('command-line-usage'); const commandLineDefs = [ { name: 'help', alias: 'h', type: Boolean, description: 'Show this help' }, { name: 'config', alias: 'c', type: String, description: 'Location of config.json' }, { name: 'version', alias: 'v', type: Boolean, description: 'Show ffffng version' } ]; let commandLineOptions; try { commandLineOptions = commandLineArgs(commandLineDefs); } catch (e) { console.error(e.message); console.error('Try \'--help\' for more information.'); process.exit(1); } const fs = require('graceful-fs'); const packageJsonFile = __dirname + '/../package.json'; let version = 'unknown'; if (fs.existsSync(packageJsonFile)) { version = JSON.parse(fs.readFileSync(packageJsonFile, 'utf8')).version; } function usage () { console.log(commandLineUsage([ { header: 'ffffng - ' + version + ' - Freifunk node management form', optionList: commandLineDefs } ])); } if (commandLineOptions.help) { usage(); process.exit(0); } if (commandLineOptions.version) { console.log('ffffng - ' + version); process.exit(0); } if (!commandLineOptions.config) { usage(); process.exit(1); } const deepExtend = require('deep-extend'); const defaultConfig = { server: { baseUrl: 'http://localhost:8080', port: 8080, databaseFile: '/tmp/ffffng.sqlite', peersPath: '/tmp/peers', logging: { directory: '/tmp/logs', debug: false, profile: false, logRequests: false }, internal: { active: false, user: 'admin', password: 'secret' }, email: { from: 'Freifunk Knotenformular ', // For details see: https://nodemailer.com/2-0-0-beta/setup-smtp/ smtp: { host: 'mail.example.com', port: '465', secure: true, auth: { user: 'user@example.com', pass: 'pass' } } }, map: { nodesJsonUrl: ['http://map.musterstadt.freifunk.net/nodes.json'] } }, client: { community: { name: 'Freifunk Musterstadt', domain: 'musterstadt.freifunk.net', contactEmail: 'kontakt@musterstadt.freifunk.net', sites: [], domains: [] }, legal: { privacyUrl: null, imprintUrl: null }, map: { mapUrl: 'http://map.musterstadt.freifunk.net' }, monitoring: { enabled: false }, coordsSelector: { showInfo: false, showBorderForDebugging: false, localCommunityPolygon: [], lat: 53.565278, lng: 10.001389, defaultZoom: 10, layers: {} } } }; const configJSONFile = commandLineOptions.config; let configJSON = {}; if (fs.existsSync(configJSONFile)) { configJSON = JSON.parse(fs.readFileSync(configJSONFile, 'utf8')); } else { console.error('config.json not found: ' + configJSONFile); process.exit(1); } const _ = require('lodash'); function stripTrailingSlash (obj, field) { const url = obj[field]; if (_.isString(url) && _.last(url) === '/') { obj[field] = url.substr(0, url.length - 1); } } const config = deepExtend({}, defaultConfig, configJSON); stripTrailingSlash(config.server, 'baseUrl'); stripTrailingSlash(config.client.map, 'mapUrl'); const url = require('url'); config.server.rootPath = url.parse(config.server.baseUrl).pathname; config.client.rootPath = config.server.rootPath; return { config, version } })()