strider
Version:
Brilliant continuous deployment platform
177 lines • 5.75 kB
JavaScript
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