88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
const dotenv = require("dotenv")
|
|
const fs = require("fs")
|
|
const { string } = require("../questions")
|
|
const { getPouch } = require("../core/db")
|
|
|
|
exports.DEFAULT_COUCH = "http://budibase:budibase@localhost:10000/db/"
|
|
exports.DEFAULT_MINIO = "http://localhost:10000/"
|
|
exports.TEMP_DIR = ".temp"
|
|
exports.COUCH_DIR = "couchdb"
|
|
exports.MINIO_DIR = "minio"
|
|
|
|
const REQUIRED = [
|
|
{ value: "MAIN_PORT", default: "10000" },
|
|
{ value: "COUCH_DB_URL", default: exports.DEFAULT_COUCH },
|
|
{ value: "MINIO_URL", default: exports.DEFAULT_MINIO },
|
|
{ value: "MINIO_ACCESS_KEY" },
|
|
{ value: "MINIO_SECRET_KEY" },
|
|
]
|
|
|
|
exports.checkURLs = config => {
|
|
const mainPort = config["MAIN_PORT"],
|
|
username = config["COUCH_DB_USER"],
|
|
password = config["COUCH_DB_PASSWORD"]
|
|
if (!config["COUCH_DB_URL"] && mainPort && username && password) {
|
|
config[
|
|
"COUCH_DB_URL"
|
|
] = `http://${username}:${password}@localhost:${mainPort}/db/`
|
|
}
|
|
if (!config["MINIO_URL"]) {
|
|
config["MINIO_URL"] = exports.DEFAULT_MINIO
|
|
}
|
|
return config
|
|
}
|
|
|
|
exports.askQuestions = async () => {
|
|
console.log(
|
|
"*** NOTE: use a .env file to load these parameters repeatedly ***"
|
|
)
|
|
let config = {}
|
|
for (let property of REQUIRED) {
|
|
config[property.value] = await string(property.value, property.default)
|
|
}
|
|
return config
|
|
}
|
|
|
|
exports.loadEnvironment = path => {
|
|
if (!fs.existsSync(path)) {
|
|
throw "Unable to file specified .env file"
|
|
}
|
|
const env = fs.readFileSync(path, "utf8")
|
|
const config = exports.checkURLs(dotenv.parse(env))
|
|
for (let required of REQUIRED) {
|
|
if (!config[required.value]) {
|
|
throw `Cannot find "${required.value}" property in .env file`
|
|
}
|
|
}
|
|
return config
|
|
}
|
|
|
|
// true is the default value passed by commander
|
|
exports.getConfig = async (envFile = true) => {
|
|
let config
|
|
if (envFile !== true) {
|
|
config = exports.loadEnvironment(envFile)
|
|
} else {
|
|
config = await exports.askQuestions()
|
|
}
|
|
return config
|
|
}
|
|
|
|
exports.replication = (from, to) => {
|
|
return new Promise((resolve, reject) => {
|
|
from.replicate
|
|
.to(to)
|
|
.on("complete", () => {
|
|
resolve()
|
|
})
|
|
.on("error", err => {
|
|
reject(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
exports.getPouches = config => {
|
|
const Remote = getPouch(config["COUCH_DB_URL"])
|
|
const Local = getPouch()
|
|
return { Remote, Local }
|
|
}
|