UNPKG

galleon

Version:

A badass SMTP mail server built on Node to make your life simpler.

190 lines (183 loc) 5.83 kB
"use strict"; var inquirer = require('inquirer'); var fs = require('fs'); var path = require('path'); function validateDirectory(input) { var done = this.async(); fs.access(path.resolve(input), fs.R_OK | fs.W_OK, function (err) { done(err ? 'NO ACCESS! USE ABSOLUTE PATHS OR CORRECT FILE PERMISSIONS' : true); }); } function validateFile(input) { var done = this.async(); fs.exists(path.resolve(input), function (exists) { done(!exists ? 'NO ACCESS! FILE NOT FOUND' : true); }) } module.exports = { domain: function () { return inquirer.prompt([{ type: "input", name: "domain", message: "Enter your FQDN (fully qualified domain name) -> IMPORTANT:" }]); }, directory: function () { return inquirer.prompt([{ type: "confirm", name: "auto", message: "Should Galleon automatically create and set permissions of required directories?", }, { type: "checkbox", name: "perform", message: "Should Galleon perform the following? (You can Multi-Select)", choices: [{ value: "attachments", name: "Save attachments", checked: true }, { value: "raw", name: "Store raw emails", checked: true }] }, { type: "input", name: "location_attachments", message: "Enter the location to store attachments in:", when: function (answers) { return !answers.auto && (answers.perform.indexOf('attachments') + 1); }, validate: validateDirectory }, { type: "input", name: "location_raw", message: "Enter the location to store raw emails in:", when: function (answers) { return !answers.auto && (answers.perform.indexOf('raw') + 1); }, validate: validateDirectory }]); }, ssl: function () { return inquirer.prompt([{ type: "confirm", name: "shouldUseSSL", message: "Do you want to setup SSL Certificates with Galleon? (You can use the same cert/key for both options | Certificates and Keys must be stored locally)", }, { type: "checkbox", name: "sslOpt", message: "Should Galleon use SSL Certificates for the following? (You can Multi-Select)", when: function (answers) { return answers.shouldUseSSL; }, choices: [{ value: "ssl-smtp", name: "SMTP Server", checked: true }, { value: "ssl-api", name: "Front-end Server & API", checked: true }] }, { type: "input", name: "ssl-smtp-cert", message: "Enter the location for *SSL Certificate* for (SMTP SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-smtp') + 1); }, validate: validateFile }, { type: "input", name: "ssl-smtp-key", message: "Enter the location for *SSL Key* for (SMTP SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-smtp') + 1); }, validate: validateFile }, { type: "input", name: "ssl-smtp-ca", message: "Enter the location for *SSL CA* for (SMTP SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-smtp') + 1); }, validate: validateFile }, { type: "input", name: "ssl-api-cert", message: "Enter the location for *SSL Certificate* for (API/FRONTEND SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-api') + 1); }, validate: validateFile }, { type: "input", name: "ssl-api-key", message: "Enter the location for *SSL Key* for (API/FRONTEND SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-api') + 1); }, validate: validateFile }, { type: "input", name: "ssl-api-ca", message: "Enter the location for *SSL CA* for (API/FRONTEND SERVER): (if any)", when: function (answers) { return answers.shouldUseSSL && (answers.sslOpt.indexOf('ssl-api') + 1); }, validate: validateFile },]); }, database: function () { return inquirer.prompt([{ type: "list", name: "adapter", message: "Select Database Adapter", choices: [ new inquirer.Separator("Recommended:"), { name: "MongoDB", value: "sails-mongo" }, { name: "Redis", value: "sails-redis" }, new inquirer.Separator("Optional:"), { name: "PostgreSQL", value: "sails-postgresql" }, { name: "MySQL", value: "sails-mysql" }, { name: "Microsoft SQL Server", value: "sails-sqlserver" }, { name: "Disk", value: "sails-disk" }, { name: "Memory", value: "sails-memory" } ] }, { type: "input", name: "database_name", message: "Enter the database name for the selected adapter:", }, { type: "input", name: "host", message: "Enter the host location:", default: "localhost" }, { type: "input", name: "port", message: "Enter the port:", default: function (answers) { var crs = { "sails-mongo": 27017, "sails-redis": 6379, "sails-postgresql": 5432, "sails-mysql": 3306, "sails-sqlserver": 1433, "sails-disk": null, "sails-memory": null } return crs[answers.adapter]; } }, { type: "input", name: "username", message: "Enter database username (requires read/write/delete access):", }, { type: "password", name: "password", message: "Enter password:", }]); } }