UNPKG

strider

Version:

Brilliant continuous deployment platform

177 lines 5.75 kB
const fs = require('fs'); const path = require('path'); const everypaas = require('everypaas'); const _ = require('lodash'); const debug = require('debug')('strider:config'); const pjson = require('../package.json'); const hasGithub = pjson && pjson.dependencies['strider-github']; const envDefaults = { host: process.env.HOST || '0.0.0.0', port: process.env.PORT || 3000, server_name: 'http://localhost', db_uri: everypaas.getMongodbUrl() || 'mongodb://localhost:27017/strider-foss', smtp_host: '', smtp_port: 587, smtp_user: '', smtp_pass: '', smtp_from: 'Strider <noreply@stridercd.com>', smtp_secure: '', enablePty: false, extpath: 'node_modules', session_secret: '8L8BudMkqBUqrz', github_app_id: '', github_secret: '', cors: false, body_parser_limit: false, ldap: false, jobsQuantityOnPage: { enabled: process.env.JOBS_QUANTITY_ON_PAGE_ENABLED || true, default: process.env.JOBS_QUANTITY_ON_PAGE_DEFAULT || 20, min: process.env.JOBS_QUANTITY_ON_PAGE_MIN || 1, max: process.env.JOBS_QUANTITY_ON_PAGE_MAX || 100, }, }; envDefaults.server_name = `${envDefaults.server_name}:${envDefaults.port}`; const defaults = _.extend({ // Logging configuration logging: { exitOnError: true, file_enabled: false, console: { // Log everything level: 0, colorize: true, timestamp: true, }, console_enabled: true, }, viewpath: path.join(__dirname, 'views'), }, envDefaults); module.exports = { defaults: defaults, deprecated: deprecated, smtp: smtp, filterEnv: filterEnv, addPlugins: addPlugins, camel: camel, getConfig: getConfig, }; // main function. Get the config, using rc function getConfig() { process.env = filterEnv(deprecated(process.env), envDefaults); const rc = require('rc')('strider', defaults); if (!rc.smtp) rc.smtp = smtp(rc); if (!rc.smtp) rc.stubSmtp = true; rc.ldap = getConfigByName('ldap'); addPlugins(rc, process.env); // BACK COMPAT until we get strider config into plugins... if (hasGithub) { rc.plugins.github = rc.plugins.github || {}; rc.plugins.github.hostname = rc.server_name; } debug(rc); return rc; } function getConfigByName(filname) { const configPath = path.join(__dirname, '..', `${filname}.json`); if (fs.existsSync(configPath)) { return require(configPath); } else { return false; } } function camel(words) { return (words[0] + words .slice(1) .map(function (word) { return word[0].toUpperCase() + word.slice(1); }) .join('')); } function addPlugins(rc, env) { let parts; if (!rc.plugins) rc.plugins = {}; for (const key in env) { if (!key.match(/^plugin_/i)) continue; parts = key.toLowerCase().split('_'); if (parts.length === 2) { try { rc.plugins[parts[1]] = JSON.parse(env[key]); } catch (e) { console.warn("Ignoring config because it's not valid JSON: ", key, env[key]); } continue; } if (!rc.plugins[parts[1]]) rc.plugins[parts[1]] = {}; rc.plugins[parts[1]][camel(parts.slice(2))] = env[key]; } } // Filter process.env.FOO to process.env.strider_foo for rc's benefit function filterEnv(env, defaults) { const res = {}; for (const k in env) { if (defaults[k.toLowerCase()] !== undefined) { res[`strider_${k.toLowerCase()}`] = env[k]; } else { res[k] = env[k]; } } return res; } function deprecated(env) { const nenv = _.extend({}, env); if (env.APP_ID) { console.warn('WARNING: You are using APP_ID to configure Github OAuth application id.'); console.warn('This name has been deprecated. Please use PLUGIN_GITHUB_APP_ID instead.\n'); nenv.PLUGIN_GITHUB_APP_ID = env.APP_ID; } if (env.APP_SECRET) { console.warn('WARNING: You are using APP_SECRET to configure Github OAuth application secret.'); console.warn('This name has been deprecated. Please use PLUGIN_GITHUB_APP_SECRET instead.\n'); nenv.PLUGIN_GITHUB_APP_SECRET = env.APP_SECRET; } if (env.GITHUB_APP_ID) { console.warn('WARNING: You are using GITHUB_APP_ID to configure Github OAuth application id.'); console.warn('This name has been deprecated. Please use PLUGIN_GITHUB_APP_ID instead.\n'); nenv.PLUGIN_GITHUB_APP_ID = env.GITHUB_APP_ID; } if (env.GITHUB_SECRET) { console.warn('WARNING: You are using GITHUB_SECRET to configure Github OAuth application secret.'); console.warn('This name has been deprecated. Please use PLUGIN_GITHUB_APP_SECRET instead.\n'); nenv.PLUGIN_GITHUB_APP_SECRET = env.GITHUB_SECRET; } if (env.GITHUB_API_ENDPOINT) { console.warn('WARNING: You are using GITHUB_API_ENDPOINT to configure Github API base URL.'); console.warn('This name has been deprecated. Please use PLUGIN_GITHUB_API_BASE instead.\n'); nenv.PLUGIN_GITHUB_API_BASE = env.GITHUB_API_ENDPOINT; } return nenv; } function smtp(rc) { if (!rc.smtp_host) { return; } const options = { host: rc.smtp_host, port: rc.smtp_port, from: rc.smtp_from, secure: rc.smtp_secure, }; if (rc.smtp_user) { options.auth = { user: rc.smtp_user, pass: rc.smtp_pass, }; } return options; } //# sourceMappingURL=libconfig.js.map