Commit c96e1c01 authored by NGPixel's avatar NGPixel

feat: use of env vars anywhere in config files

parent 4da9c3d7
...@@ -19,9 +19,8 @@ host: http://localhost ...@@ -19,9 +19,8 @@ host: http://localhost
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Port the main server should listen to (80 by default) # Port the main server should listen to (80 by default)
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# To use process.env.PORT, comment the line below:
# port: 80 port: $(PORT)
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Data Directories # Data Directories
...@@ -103,7 +102,6 @@ sessionSecret: 1234567890abcdefghijklmnopqrstuvxyz ...@@ -103,7 +102,6 @@ sessionSecret: 1234567890abcdefghijklmnopqrstuvxyz
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Database Connection String # Database Connection String
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# You can also use an ENV variable by using $ENV_VAR_NAME as the value
db: mongodb://mongo:27017/wiki db: mongodb://mongo:27017/wiki
......
...@@ -3,10 +3,6 @@ ...@@ -3,10 +3,6 @@
# This is reserved for system use! # This is reserved for system use!
# --------------------------------- # ---------------------------------
name: Wiki.js name: Wiki.js
capabilities:
guest: true
rights: true
manyAuthProviders: true
defaults: defaults:
config: config:
title: Wiki title: Wiki
...@@ -65,6 +61,9 @@ langs: ...@@ -65,6 +61,9 @@ langs:
id: en id: en
name: English name: English
- -
id: zh
name: Chinese - 普通话
-
id: fr id: fr
name: French - Français name: French - Français
- -
......
...@@ -26,7 +26,7 @@ module.exports = function (passport) { ...@@ -26,7 +26,7 @@ module.exports = function (passport) {
// Local Account // Local Account
if (!appdata.capabilities.manyAuthProviders || (appconfig.auth.local && appconfig.auth.local.enabled)) { if (appconfig.auth.local && appconfig.auth.local.enabled) {
const LocalStrategy = require('passport-local').Strategy const LocalStrategy = require('passport-local').Strategy
passport.use('local', passport.use('local',
new LocalStrategy({ new LocalStrategy({
...@@ -53,7 +53,7 @@ module.exports = function (passport) { ...@@ -53,7 +53,7 @@ module.exports = function (passport) {
// Google ID // Google ID
if (appdata.capabilities.manyAuthProviders && appconfig.auth.google && appconfig.auth.google.enabled) { if (appconfig.auth.google && appconfig.auth.google.enabled) {
const GoogleStrategy = require('passport-google-oauth20').Strategy const GoogleStrategy = require('passport-google-oauth20').Strategy
passport.use('google', passport.use('google',
new GoogleStrategy({ new GoogleStrategy({
...@@ -73,7 +73,7 @@ module.exports = function (passport) { ...@@ -73,7 +73,7 @@ module.exports = function (passport) {
// Microsoft Accounts // Microsoft Accounts
if (appdata.capabilities.manyAuthProviders && appconfig.auth.microsoft && appconfig.auth.microsoft.enabled) { if (appconfig.auth.microsoft && appconfig.auth.microsoft.enabled) {
const WindowsLiveStrategy = require('passport-windowslive').Strategy const WindowsLiveStrategy = require('passport-windowslive').Strategy
passport.use('windowslive', passport.use('windowslive',
new WindowsLiveStrategy({ new WindowsLiveStrategy({
...@@ -93,7 +93,7 @@ module.exports = function (passport) { ...@@ -93,7 +93,7 @@ module.exports = function (passport) {
// Facebook // Facebook
if (appdata.capabilities.manyAuthProviders && appconfig.auth.facebook && appconfig.auth.facebook.enabled) { if (appconfig.auth.facebook && appconfig.auth.facebook.enabled) {
const FacebookStrategy = require('passport-facebook').Strategy const FacebookStrategy = require('passport-facebook').Strategy
passport.use('facebook', passport.use('facebook',
new FacebookStrategy({ new FacebookStrategy({
...@@ -114,7 +114,7 @@ module.exports = function (passport) { ...@@ -114,7 +114,7 @@ module.exports = function (passport) {
// GitHub // GitHub
if (appdata.capabilities.manyAuthProviders && appconfig.auth.github && appconfig.auth.github.enabled) { if (appconfig.auth.github && appconfig.auth.github.enabled) {
const GitHubStrategy = require('passport-github2').Strategy const GitHubStrategy = require('passport-github2').Strategy
passport.use('github', passport.use('github',
new GitHubStrategy({ new GitHubStrategy({
...@@ -135,7 +135,7 @@ module.exports = function (passport) { ...@@ -135,7 +135,7 @@ module.exports = function (passport) {
// Slack // Slack
if (appdata.capabilities.manyAuthProviders && appconfig.auth.slack && appconfig.auth.slack.enabled) { if (appconfig.auth.slack && appconfig.auth.slack.enabled) {
const SlackStrategy = require('passport-slack').Strategy const SlackStrategy = require('passport-slack').Strategy
passport.use('slack', passport.use('slack',
new SlackStrategy({ new SlackStrategy({
...@@ -155,7 +155,7 @@ module.exports = function (passport) { ...@@ -155,7 +155,7 @@ module.exports = function (passport) {
// LDAP // LDAP
if (appdata.capabilities.manyAuthProviders && appconfig.auth.ldap && appconfig.auth.ldap.enabled) { if (appconfig.auth.ldap && appconfig.auth.ldap.enabled) {
const LdapStrategy = require('passport-ldapauth').Strategy const LdapStrategy = require('passport-ldapauth').Strategy
passport.use('ldapauth', passport.use('ldapauth',
new LdapStrategy({ new LdapStrategy({
...@@ -189,7 +189,7 @@ module.exports = function (passport) { ...@@ -189,7 +189,7 @@ module.exports = function (passport) {
// AZURE AD // AZURE AD
if (appdata.capabilities.manyAuthProviders && appconfig.auth.azure && appconfig.auth.azure.enabled) { if (appconfig.auth.azure && appconfig.auth.azure.enabled) {
const AzureAdOAuth2Strategy = require('passport-azure-ad-oauth2').Strategy const AzureAdOAuth2Strategy = require('passport-azure-ad-oauth2').Strategy
const jwt = require('jsonwebtoken') const jwt = require('jsonwebtoken')
passport.use('azure_ad_oauth2', passport.use('azure_ad_oauth2',
......
...@@ -5,6 +5,15 @@ const yaml = require('js-yaml') ...@@ -5,6 +5,15 @@ const yaml = require('js-yaml')
const _ = require('lodash') const _ = require('lodash')
const path = require('path') const path = require('path')
const deepMap = (obj, iterator, context) => {
return _.transform(obj, (result, val, key) => {
result[key] = _.isObject(val)
? deepMap(val, iterator, context)
: iterator.call(context, val, key, obj)
})
}
_.mixin({ deepMap })
/** /**
* Load Application Configuration * Load Application Configuration
* *
...@@ -22,7 +31,9 @@ module.exports = (confPaths) => { ...@@ -22,7 +31,9 @@ module.exports = (confPaths) => {
let appdata = {} let appdata = {}
try { try {
appconfig = yaml.safeLoad(fs.readFileSync(confPaths.config, 'utf8')) appconfig = yaml.safeLoad(_.deepMap(fs.readFileSync(confPaths.config, 'utf8'), c => {
return _.replace(c, (/\$\([A-Z0-9_]+\)/g, (m) => { return process.env[m] }))
}))
appdata = yaml.safeLoad(fs.readFileSync(confPaths.data, 'utf8')) appdata = yaml.safeLoad(fs.readFileSync(confPaths.data, 'utf8'))
appdata.regex = require(confPaths.dataRegex) appdata.regex = require(confPaths.dataRegex)
} catch (ex) { } catch (ex) {
...@@ -34,19 +45,14 @@ module.exports = (confPaths) => { ...@@ -34,19 +45,14 @@ module.exports = (confPaths) => {
appconfig = _.defaultsDeep(appconfig, appdata.defaults.config) appconfig = _.defaultsDeep(appconfig, appdata.defaults.config)
// Using ENV variables? // Check port
if (appconfig.port < 1) { if (appconfig.port < 1) {
appconfig.port = process.env.PORT || 80 appconfig.port = process.env.PORT || 80
} }
if (_.startsWith(appconfig.db, '$')) {
appconfig.db = process.env[appconfig.db.slice(1)]
}
// List authentication strategies // List authentication strategies
if (appdata.capabilities.manyAuthProviders) {
appconfig.authStrategies = { appconfig.authStrategies = {
list: _.filter(appconfig.auth, ['enabled', true]), list: _.filter(appconfig.auth, ['enabled', true]),
socialEnabled: (_.chain(appconfig.auth).omit('local').filter(['enabled', true]).value().length > 0) socialEnabled: (_.chain(appconfig.auth).omit('local').filter(['enabled', true]).value().length > 0)
...@@ -55,12 +61,6 @@ module.exports = (confPaths) => { ...@@ -55,12 +61,6 @@ module.exports = (confPaths) => {
console.error(new Error('You must enable at least 1 authentication strategy!')) console.error(new Error('You must enable at least 1 authentication strategy!'))
process.exit(1) process.exit(1)
} }
} else {
appconfig.authStrategies = {
list: { local: { enabled: true } },
socialEnabled: false
}
}
return { return {
config: appconfig, config: appconfig,
......
...@@ -16,25 +16,23 @@ module.exports = (req, res, next) => { ...@@ -16,25 +16,23 @@ module.exports = (req, res, next) => {
// Is user authenticated ? // Is user authenticated ?
if (!req.isAuthenticated()) { if (!req.isAuthenticated()) {
if (!appdata.capabilities.guest || req.app.locals.appconfig.public !== true) { if (req.app.locals.appconfig.public !== true) {
return res.redirect('/login') return res.redirect('/login')
} else { } else {
req.user = rights.guest req.user = rights.guest
res.locals.isGuest = true res.locals.isGuest = true
} }
} else if (appdata.capabilities.guest) { } else {
res.locals.isGuest = false res.locals.isGuest = false
} }
// Check permissions // Check permissions
if (appdata.capabilities.rights) {
res.locals.rights = rights.check(req) res.locals.rights = rights.check(req)
if (!res.locals.rights.read) { if (!res.locals.rights.read) {
return res.render('error-forbidden') return res.render('error-forbidden')
} }
}
// Set i18n locale // Set i18n locale
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment