mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			184 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const fs = require('fs');
 | 
						|
const path = require('path');
 | 
						|
const yaml = require('js-yaml');
 | 
						|
const inquirer = require('inquirer');
 | 
						|
const chalk = require('chalk');
 | 
						|
 | 
						|
const configDirPath = `${__dirname}/../.config`;
 | 
						|
const configPath = `${configDirPath}/default.yml`;
 | 
						|
 | 
						|
const form = [
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'maintainer',
 | 
						|
		message: 'Maintainer name(and email address):'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'url',
 | 
						|
		message: 'PRIMARY URL:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'secondary_url',
 | 
						|
		message: 'SECONDARY URL:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'port',
 | 
						|
		message: 'Listen port:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'confirm',
 | 
						|
		name: 'https',
 | 
						|
		message: 'Use TLS?',
 | 
						|
		default: false
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'https_key',
 | 
						|
		message: 'Path of tls key:',
 | 
						|
		when: ctx => ctx.https
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'https_cert',
 | 
						|
		message: 'Path of tls cert:',
 | 
						|
		when: ctx => ctx.https
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'https_ca',
 | 
						|
		message: 'Path of tls ca:',
 | 
						|
		when: ctx => ctx.https
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'mongo_host',
 | 
						|
		message: 'MongoDB\'s host:',
 | 
						|
		default: 'localhost'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'mongo_port',
 | 
						|
		message: 'MongoDB\'s port:',
 | 
						|
		default: '27017'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'mongo_db',
 | 
						|
		message: 'MongoDB\'s db:',
 | 
						|
		default: 'misskey'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'mongo_user',
 | 
						|
		message: 'MongoDB\'s user:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'password',
 | 
						|
		name: 'mongo_pass',
 | 
						|
		message: 'MongoDB\'s password:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'redis_host',
 | 
						|
		message: 'Redis\'s host:',
 | 
						|
		default: 'localhost'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'redis_port',
 | 
						|
		message: 'Redis\'s port:',
 | 
						|
		default: '6379'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'password',
 | 
						|
		name: 'redis_pass',
 | 
						|
		message: 'Redis\'s password:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'confirm',
 | 
						|
		name: 'elasticsearch',
 | 
						|
		message: 'Use Elasticsearch?',
 | 
						|
		default: false
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'es_host',
 | 
						|
		message: 'Elasticsearch\'s host:',
 | 
						|
		default: 'localhost',
 | 
						|
		when: ctx => ctx.elasticsearch
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'es_port',
 | 
						|
		message: 'Elasticsearch\'s port:',
 | 
						|
		default: '9200',
 | 
						|
		when: ctx => ctx.elasticsearch
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'password',
 | 
						|
		name: 'es_pass',
 | 
						|
		message: 'Elasticsearch\'s password:',
 | 
						|
		when: ctx => ctx.elasticsearch
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'recaptcha_site',
 | 
						|
		message: 'reCAPTCHA\'s site key:'
 | 
						|
	},
 | 
						|
	{
 | 
						|
		type: 'input',
 | 
						|
		name: 'recaptcha_secret',
 | 
						|
		message: 'reCAPTCHA\'s secret key:'
 | 
						|
	}
 | 
						|
];
 | 
						|
 | 
						|
inquirer.prompt(form).then(as => {
 | 
						|
	// Mapping answers
 | 
						|
	const conf = {
 | 
						|
		maintainer: as['maintainer'],
 | 
						|
		url: as['url'],
 | 
						|
		secondary_url: as['secondary_url'],
 | 
						|
		port: parseInt(as['port'], 10),
 | 
						|
		https: {
 | 
						|
			enable: as['https'],
 | 
						|
			key: as['https_key'] || null,
 | 
						|
			cert: as['https_cert'] || null,
 | 
						|
			ca: as['https_ca'] || null
 | 
						|
		},
 | 
						|
		mongodb: {
 | 
						|
			host: as['mongo_host'],
 | 
						|
			port: parseInt(as['mongo_port'], 10),
 | 
						|
			db: as['mongo_db'],
 | 
						|
			user: as['mongo_user'],
 | 
						|
			pass: as['mongo_pass']
 | 
						|
		},
 | 
						|
		redis: {
 | 
						|
			host: as['redis_host'],
 | 
						|
			port: parseInt(as['redis_port'], 10),
 | 
						|
			pass: as['redis_pass']
 | 
						|
		},
 | 
						|
		elasticsearch: {
 | 
						|
			enable: as['elasticsearch'],
 | 
						|
			host: as['es_host'] || null,
 | 
						|
			port: parseInt(as['es_port'], 10) || null,
 | 
						|
			pass: as['es_pass'] || null
 | 
						|
		},
 | 
						|
		recaptcha: {
 | 
						|
			siteKey: as['recaptcha_site'],
 | 
						|
			secretKey: as['recaptcha_secret']
 | 
						|
		}
 | 
						|
	};
 | 
						|
 | 
						|
	console.log(`Thanks. Writing the configuration to ${chalk.bold(path.resolve(configPath))}`);
 | 
						|
 | 
						|
	try {
 | 
						|
		fs.mkdirSync(configDirPath);
 | 
						|
		fs.writeFileSync(configPath, yaml.dump(conf));
 | 
						|
		console.log(chalk.green('Well done.'));
 | 
						|
	} catch (e) {
 | 
						|
		console.error(e);
 | 
						|
	}
 | 
						|
});
 |