| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | var async = require('async'); | 
					
						
							|  |  |  | var prompt = require('prompt'); | 
					
						
							|  |  |  | var winston = require('winston'); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | var questions = { | 
					
						
							|  |  |  | 	redis: require('../src/database/redis').questions, | 
					
						
							|  |  |  | 	mongo: require('../src/database/mongo').questions | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 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); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 	], callback); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | function getDatabaseConfig(config, callback) { | 
					
						
							|  |  |  | 	if (!config) { | 
					
						
							|  |  |  | 		return callback(new Error('aborted')); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 	if (config.database === 'redis') { | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		if (config['redis:host'] && config['redis:port']) { | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 			callback(null, config); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 			prompt.get(questions.redis, callback); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 	} else if (config.database === 'mongo') { | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		if (config['mongo:host'] && config['mongo:port']) { | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 			callback(null, config); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 			prompt.get(questions.mongo, callback); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 		return callback(new Error('unknown database : ' + config.database)); | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | function saveDatabaseConfig(config, databaseConfig, callback) { | 
					
						
							|  |  |  | 	if (!databaseConfig) { | 
					
						
							|  |  |  | 		return callback(new Error('aborted')); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-05-20 14:44:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 	// 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'] | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 		if (config.redis.host.slice(0, 1) === '/') { | 
					
						
							|  |  |  | 			delete config.redis.port; | 
					
						
							| 
									
										
										
										
											2014-04-14 15:03:11 -04:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-12-21 12:02:10 +02:00
										 |  |  | 	} 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); | 
					
						
							|  |  |  | } |