mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 20:45:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var async = require('async');
 | 
						|
var prompt = require('prompt');
 | 
						|
var winston = require('winston');
 | 
						|
 | 
						|
var questions = {
 | 
						|
	redis: require('../src/database/redis').questions,
 | 
						|
	mongo: require('../src/database/mongo').questions
 | 
						|
};
 | 
						|
 | 
						|
module.exports = function(config, callback) {
 | 
						|
	async.waterfall([
 | 
						|
		function (next) {
 | 
						|
			process.stdout.write('\n');
 | 
						|
			winston.info('Now configuring ' + config.database + ' database:');
 | 
						|
			getDatabaseConfig(config, next);
 | 
						|
		},
 | 
						|
		function (databaseConfig, next) {
 | 
						|
			saveDatabaseConfig(config, databaseConfig, next);
 | 
						|
		}
 | 
						|
	], callback);
 | 
						|
};
 | 
						|
 | 
						|
function getDatabaseConfig(config, callback) {
 | 
						|
	if (!config) {
 | 
						|
		return callback(new Error('aborted'));
 | 
						|
	}
 | 
						|
 | 
						|
	if (config.database === 'redis') {
 | 
						|
		if (config['redis:host'] && config['redis:port']) {
 | 
						|
			callback(null, config);
 | 
						|
		} else {
 | 
						|
			prompt.get(questions.redis, callback);
 | 
						|
		}
 | 
						|
	} else if (config.database === 'mongo') {
 | 
						|
		if (config['mongo:host'] && config['mongo:port']) {
 | 
						|
			callback(null, config);
 | 
						|
		} else {
 | 
						|
			prompt.get(questions.mongo, callback);
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		return callback(new Error('unknown database : ' + config.database));
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
function saveDatabaseConfig(config, databaseConfig, callback) {
 | 
						|
	if (!databaseConfig) {
 | 
						|
		return callback(new Error('aborted'));
 | 
						|
	}
 | 
						|
 | 
						|
	// Translate redis properties into redis object
 | 
						|
	if (config.database === 'redis') {
 | 
						|
		config.redis = {
 | 
						|
			host: databaseConfig['redis:host'],
 | 
						|
			port: databaseConfig['redis:port'],
 | 
						|
			password: databaseConfig['redis:password'],
 | 
						|
			database: databaseConfig['redis:database']
 | 
						|
		};
 | 
						|
 | 
						|
		if (config.redis.host.slice(0, 1) === '/') {
 | 
						|
			delete config.redis.port;
 | 
						|
		}
 | 
						|
	} else if (config.database === 'mongo') {
 | 
						|
		config.mongo = {
 | 
						|
			host: databaseConfig['mongo:host'],
 | 
						|
			port: databaseConfig['mongo:port'],
 | 
						|
			username: databaseConfig['mongo:username'],
 | 
						|
			password: databaseConfig['mongo:password'],
 | 
						|
			database: databaseConfig['mongo:database']
 | 
						|
		};
 | 
						|
	} else {
 | 
						|
		return callback(new Error('unknown database : ' + config.database));
 | 
						|
	}
 | 
						|
 | 
						|
	var allQuestions = questions.redis.concat(questions.mongo);
 | 
						|
	for (var x=0; x<allQuestions.length; x++) {
 | 
						|
		delete config[allQuestions[x].name];
 | 
						|
	}
 | 
						|
 | 
						|
	callback(null, config);
 | 
						|
} |