فهرست منبع

feat: use of env vars anywhere in config files

NGPixel 8 سال پیش
والد
کامیت
c96e1c01aa
5فایلهای تغییر یافته به همراه37 افزوده شده و 42 حذف شده
  1. 1 3
      config.docker.yml
  2. 3 4
      server/app/data.yml
  3. 8 8
      server/libs/auth.js
  4. 20 20
      server/libs/config.js
  5. 5 7
      server/middlewares/auth.js

+ 1 - 3
config.docker.yml

@@ -19,9 +19,8 @@ host: http://localhost
 # ---------------------------------------------------------------------
 # 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
@@ -103,7 +102,6 @@ sessionSecret: 1234567890abcdefghijklmnopqrstuvxyz
 # ---------------------------------------------------------------------
 # Database Connection String
 # ---------------------------------------------------------------------
-# You can also use an ENV variable by using $ENV_VAR_NAME as the value
 
 db: mongodb://mongo:27017/wiki
 

+ 3 - 4
server/app/data.yml

@@ -3,10 +3,6 @@
 # This is reserved for system use!
 # ---------------------------------
 name: Wiki.js
-capabilities:
-  guest: true
-  rights: true
-  manyAuthProviders: true
 defaults:
   config:
     title: Wiki
@@ -64,6 +60,9 @@ langs:
   -
     id: en
     name: English
+  -
+    id: zh
+    name: Chinese - 普通话
   -
     id: fr
     name: French - Français

+ 8 - 8
server/libs/auth.js

@@ -26,7 +26,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('local',
       new LocalStrategy({
@@ -53,7 +53,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('google',
       new GoogleStrategy({
@@ -73,7 +73,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('windowslive',
       new WindowsLiveStrategy({
@@ -93,7 +93,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('facebook',
       new FacebookStrategy({
@@ -114,7 +114,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('github',
       new GitHubStrategy({
@@ -135,7 +135,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('slack',
       new SlackStrategy({
@@ -155,7 +155,7 @@ module.exports = function (passport) {
 
   // 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
     passport.use('ldapauth',
       new LdapStrategy({
@@ -189,7 +189,7 @@ module.exports = function (passport) {
 
   // 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 jwt = require('jsonwebtoken')
     passport.use('azure_ad_oauth2',

+ 20 - 20
server/libs/config.js

@@ -5,6 +5,15 @@ const yaml = require('js-yaml')
 const _ = require('lodash')
 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
  *
@@ -22,7 +31,9 @@ module.exports = (confPaths) => {
   let appdata = {}
 
   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.regex = require(confPaths.dataRegex)
   } catch (ex) {
@@ -34,32 +45,21 @@ module.exports = (confPaths) => {
 
   appconfig = _.defaultsDeep(appconfig, appdata.defaults.config)
 
-  // Using ENV variables?
+  // Check port
 
   if (appconfig.port < 1) {
     appconfig.port = process.env.PORT || 80
   }
 
-  if (_.startsWith(appconfig.db, '$')) {
-    appconfig.db = process.env[appconfig.db.slice(1)]
-  }
-
   // List authentication strategies
 
-  if (appdata.capabilities.manyAuthProviders) {
-    appconfig.authStrategies = {
-      list: _.filter(appconfig.auth, ['enabled', true]),
-      socialEnabled: (_.chain(appconfig.auth).omit('local').filter(['enabled', true]).value().length > 0)
-    }
-    if (appconfig.authStrategies.list.length < 1) {
-      console.error(new Error('You must enable at least 1 authentication strategy!'))
-      process.exit(1)
-    }
-  } else {
-    appconfig.authStrategies = {
-      list: { local: { enabled: true } },
-      socialEnabled: false
-    }
+  appconfig.authStrategies = {
+    list: _.filter(appconfig.auth, ['enabled', true]),
+    socialEnabled: (_.chain(appconfig.auth).omit('local').filter(['enabled', true]).value().length > 0)
+  }
+  if (appconfig.authStrategies.list.length < 1) {
+    console.error(new Error('You must enable at least 1 authentication strategy!'))
+    process.exit(1)
   }
 
   return {

+ 5 - 7
server/middlewares/auth.js

@@ -16,24 +16,22 @@ module.exports = (req, res, next) => {
   // Is user authenticated ?
 
   if (!req.isAuthenticated()) {
-    if (!appdata.capabilities.guest || req.app.locals.appconfig.public !== true) {
+    if (req.app.locals.appconfig.public !== true) {
       return res.redirect('/login')
     } else {
       req.user = rights.guest
       res.locals.isGuest = true
     }
-  } else if (appdata.capabilities.guest) {
+  } else {
     res.locals.isGuest = false
   }
 
   // Check permissions
 
-  if (appdata.capabilities.rights) {
-    res.locals.rights = rights.check(req)
+  res.locals.rights = rights.check(req)
 
-    if (!res.locals.rights.read) {
-      return res.render('error-forbidden')
-    }
+  if (!res.locals.rights.read) {
+    return res.render('error-forbidden')
   }
 
   // Set i18n locale