mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	* [Added] Postgres SSL Support * [Added]Postgres SSL Support * [Added] Postgres SSL Support
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.8 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,
 | |
| 	postgres: require('../src/database/postgres').questions,
 | |
| };
 | |
| 
 | |
| module.exports = function (config, callback) {
 | |
| 	async.waterfall([
 | |
| 		function (next) {
 | |
| 			winston.info('\nNow 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']) || config['mongo:uri']) {
 | |
| 			callback(null, config);
 | |
| 		} else {
 | |
| 			prompt.get(questions.mongo, callback);
 | |
| 		}
 | |
| 	} else if (config.database === 'postgres') {
 | |
| 		if (config['postgres:host'] && config['postgres:port']) {
 | |
| 			callback(null, config);
 | |
| 		} else {
 | |
| 			prompt.get(questions.postgres, 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'],
 | |
| 			uri: databaseConfig['mongo:uri'],
 | |
| 		};
 | |
| 	} else if (config.database === 'postgres') {
 | |
| 		config.postgres = {
 | |
| 			host: databaseConfig['postgres:host'],
 | |
| 			port: databaseConfig['postgres:port'],
 | |
| 			username: databaseConfig['postgres:username'],
 | |
| 			password: databaseConfig['postgres:password'],
 | |
| 			database: databaseConfig['postgres:database'],
 | |
| 			ssl: databaseConfig['postgres:ssl'],
 | |
| 		};
 | |
| 	} else {
 | |
| 		return callback(new Error('unknown database : ' + config.database));
 | |
| 	}
 | |
| 
 | |
| 	var allQuestions = questions.redis.concat(questions.mongo).concat(questions.postgres);
 | |
| 	for (var x = 0; x < allQuestions.length; x += 1) {
 | |
| 		delete config[allQuestions[x].name];
 | |
| 	}
 | |
| 
 | |
| 	callback(null, config);
 | |
| }
 |