89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| /* global wiki */
 | |
| 
 | |
| const fs = require('fs')
 | |
| const yaml = require('js-yaml')
 | |
| const _ = require('lodash')
 | |
| const path = require('path')
 | |
| const cfgHelper = require('../helpers/config')
 | |
| 
 | |
| module.exports = {
 | |
|   SUBSETS: ['auth', 'features', 'git', 'logging', 'site', 'theme', 'uploads'],
 | |
| 
 | |
|   /**
 | |
|    * Load root config from disk
 | |
|    */
 | |
|   init() {
 | |
|     let confPaths = {
 | |
|       config: path.join(wiki.ROOTPATH, 'config.yml'),
 | |
|       data: path.join(wiki.SERVERPATH, 'app/data.yml'),
 | |
|       dataRegex: path.join(wiki.SERVERPATH, 'app/regex.js')
 | |
|     }
 | |
| 
 | |
|     let appconfig = {}
 | |
|     let appdata = {}
 | |
| 
 | |
|     try {
 | |
|       appconfig = yaml.safeLoad(
 | |
|         cfgHelper.parseConfigValue(
 | |
|           fs.readFileSync(confPaths.config, 'utf8')
 | |
|         )
 | |
|       )
 | |
|       appdata = yaml.safeLoad(fs.readFileSync(confPaths.data, 'utf8'))
 | |
|       appdata.regex = require(confPaths.dataRegex)
 | |
|     } catch (ex) {
 | |
|       console.error(ex)
 | |
|       process.exit(1)
 | |
|     }
 | |
| 
 | |
|     // Merge with defaults
 | |
| 
 | |
|     appconfig = _.defaultsDeep(appconfig, appdata.defaults.config)
 | |
| 
 | |
|     // Check port
 | |
| 
 | |
|     if (appconfig.port < 1) {
 | |
|       appconfig.port = process.env.PORT || 80
 | |
|     }
 | |
| 
 | |
|     // Convert booleans
 | |
| 
 | |
|     appconfig.public = (appconfig.public === true || _.toLower(appconfig.public) === 'true')
 | |
| 
 | |
|     // List authentication strategies
 | |
|     wiki.config = appconfig
 | |
|     wiki.data = appdata
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Load config from DB
 | |
|    *
 | |
|    * @param {Array} subsets Array of subsets to load
 | |
|    * @returns Promise
 | |
|    */
 | |
|   loadFromDb(subsets) {
 | |
|     if (!_.isArray(subsets) || subsets.length === 0) {
 | |
|       subsets = this.SUBSETS
 | |
|     }
 | |
| 
 | |
|     return wiki.db.Setting.findAll({
 | |
|       attributes: ['key', 'config'],
 | |
|       where: {
 | |
|         key: {
 | |
|           $in: subsets
 | |
|         }
 | |
|       }
 | |
|     }).then(results => {
 | |
|       if (_.isArray(results) && results.length > 0) {
 | |
|         results.forEach(result => {
 | |
|           wiki.config[result.key] = result.config
 | |
|         })
 | |
|         return true
 | |
|       } else {
 | |
|         return Promise.reject(new Error('Invalid DB Configuration result set'))
 | |
|       }
 | |
|     })
 | |
|   }
 | |
| }
 |