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: 'maintainerName', message: 'Your name:' }, { type: 'input', name: 'maintainerUrl', message: 'Your home page URL or your mailto URL:' }, { type: 'input', name: 'url', message: 'URL you want to run Misskey:' }, { type: 'input', name: 'port', message: 'Listen port (e.g. 443):' }, { 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: { name: as['maintainerName'], url: as['maintainerUrl'] }, url: as['url'], port: parseInt(as['port'], 10), 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'] } }; if (as['https']) { conf.https = { key: as['https_key'] || null, cert: as['https_cert'] || null, ca: as['https_ca'] || null }; } console.log(`Thanks. Writing the configuration to ${chalk.bold(path.resolve(configPath))}`); try { fs.writeFileSync(configPath, yaml.dump(conf)); console.log(chalk.green('Well done.')); } catch (e) { console.error(e); } });