| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | 
							- #!/usr/bin/env node
 
- const logger = require('./logger').global;
 
- async function appStart () {
 
- 	// Create config file db settings if environment variables have been set
 
- 	await createDbConfigFromEnvironment();
 
- 	const migrate             = require('./migrate');
 
- 	const setup               = require('./setup');
 
- 	const app                 = require('./app');
 
- 	const apiValidator        = require('./lib/validator/api');
 
- 	const internalCertificate = require('./internal/certificate');
 
- 	const internalIpRanges    = require('./internal/ip_ranges');
 
- 	return migrate.latest()
 
- 		.then(setup)
 
- 		.then(() => {
 
- 			return apiValidator.loadSchemas;
 
- 		})
 
- 		.then(internalIpRanges.fetch)
 
- 		.then(() => {
 
- 			internalCertificate.initTimer();
 
- 			internalIpRanges.initTimer();
 
- 			const server = app.listen(3000, () => {
 
- 				logger.info('Backend PID ' + process.pid + ' listening on port 3000 ...');
 
- 				process.on('SIGTERM', () => {
 
- 					logger.info('PID ' + process.pid + ' received SIGTERM');
 
- 					server.close(() => {
 
- 						logger.info('Stopping.');
 
- 						process.exit(0);
 
- 					});
 
- 				});
 
- 			});
 
- 		})
 
- 		.catch((err) => {
 
- 			logger.error(err.message);
 
- 			setTimeout(appStart, 1000);
 
- 		});
 
- }
 
- async function createDbConfigFromEnvironment() {
 
- 	return new Promise((resolve, reject) => {
 
- 		const envMysqlHost  = process.env.DB_MYSQL_HOST || null;
 
- 		const envMysqlPort  = process.env.DB_MYSQL_PORT || null;
 
- 		const envMysqlUser  = process.env.DB_MYSQL_USER || null;
 
- 		const envMysqlName  = process.env.DB_MYSQL_NAME || null;
 
- 		const envSqliteFile = process.env.DB_SQLITE_FILE || null;
 
- 		if ((envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) || envSqliteFile) {
 
- 			const fs       = require('fs');
 
- 			const filename = (process.env.NODE_CONFIG_DIR || './config') + '/' + (process.env.NODE_ENV || 'default') + '.json';
 
- 			let configData = {};
 
- 			try {
 
- 				configData = require(filename);
 
- 			} catch (err) {
 
- 				// do nothing
 
- 			}
 
- 			if (configData.database && configData.database.engine && !configData.database.fromEnv) {
 
- 				logger.info('Manual db configuration already exists, skipping config creation from environment variables');
 
- 				resolve();
 
- 				return;
 
- 			}
 
- 			if (envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) {
 
- 				const newConfig = {
 
- 					fromEnv:  true,
 
- 					engine:   'mysql',
 
- 					host:     envMysqlHost,
 
- 					port:     envMysqlPort,
 
- 					user:     envMysqlUser,
 
- 					password: process.env.DB_MYSQL_PASSWORD,
 
- 					name:     envMysqlName,
 
- 				};
 
- 				if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
 
- 					// Config is unchanged, skip overwrite
 
- 					resolve();
 
- 					return;
 
- 				}
 
- 				logger.info('Generating MySQL db configuration from environment variables');
 
- 				configData.database = newConfig;
 
- 			} else {
 
- 				const newConfig = {
 
- 					fromEnv: true,
 
- 					engine:  'knex-native',
 
- 					knex:    {
 
- 						client:     'sqlite3',
 
- 						connection: {
 
- 							filename: envSqliteFile
 
- 						}
 
- 					}
 
- 				};
 
- 				if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
 
- 					// Config is unchanged, skip overwrite
 
- 					resolve();
 
- 					return;
 
- 				}
 
- 				logger.info('Generating Sqlite db configuration from environment variables');
 
- 				configData.database = newConfig;
 
- 			}
 
- 			// Write config
 
- 			fs.writeFile(filename, JSON.stringify(configData, null, 2), (err) => {
 
- 				if (err) {
 
- 					logger.error('Could not write db config to config file: ' + filename);
 
- 					reject(err);
 
- 				} else {
 
- 					logger.info('Wrote db configuration to config file: ' + filename);
 
- 					resolve();
 
- 				}
 
- 			});
 
- 		} else {
 
- 			resolve();
 
- 		}
 
- 	});
 
- }
 
- try {
 
- 	appStart();
 
- } catch (err) {
 
- 	logger.error(err.message, err);
 
- 	process.exit(1);
 
- }
 
 
  |