seance/config.js
Hippo a57add4809 Allow YAML config load, and escape route if it doesn't exist
The "escape route" is the setup command (yet to be implemented)
2020-04-26 18:38:53 +05:30

105 lines
2.4 KiB
JavaScript

// load configuraton from .env file (if exists)
require('dotenv').config()
const convict = require('convict')
const os = require('os')
const path = require('path')
const yaml = require('js-yaml')
const fs = require('fs')
convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad })
let config = convict({
webdav: {
server_url: {
doc: 'WebDAV server URL (eg. https://myhost.com:2078)',
format: 'url',
env: 'WEBDAV_SERVER_URL',
default: null,
},
username: {
doc: 'Username for WebDAV server',
format: 'String',
env: 'WEBDAV_USERNAME',
default: null,
},
password: {
doc: 'Password for WebDAV server',
format: 'String',
env: 'WEBDAV_PASSWORD',
default: null,
sensitive: true,
},
path_prefix: {
doc: 'Where to upload files (eg. /seance-uploads)',
format: 'String',
env: 'WEBDAV_PATH_PREFIX',
default: null,
},
uploaded_path_prefix: {
doc: 'URL where files are uploaded (eg. https://mysitem.com/media)',
format: 'url',
env: 'WEBDAV_UPLOADED_PATH_PREFIX',
default: null,
},
use_digest: {
doc: 'Whether to use digest authentication',
format: 'Boolean',
env: 'WEBDAV_USE_DIGEST',
default: false,
}
},
ghost: {
url: {
doc: 'URL of Ghost installation',
format: 'url',
env: 'GHOST_URL',
default: null,
},
version: {
format: 'String',
env: 'GHOST_VERSION',
default: 'v2',
},
admin_key: {
doc: 'Admin API key for Ghost',
format: 'String',
env: 'GHOST_ADMIN_KEY',
default: null,
sensitive: true,
}
},
scissors: {
doc: 'Separator image (for comparison)',
format: '*', // TODO: validate by checking path
env: 'SEPARATOR_IMAGE',
default: null,
}
})
// Load configs from home directory, if present
userConfig = path.join(os.homedir(), '.config/seance.yaml')
if (fs.existsSync(userConfig)) {
config.loadFile(userConfig)
} else if (!runSetup) {
console.warn(
'Warning: no config file detected! ' +
'Please run `seance setup` to configure your system'
)
}
var validated
// Validate config
try {
config.validate()
validated = true
} catch(e) {
console.error(e)
validated = false
}
allConf = config.getProperties()
allConf.validated = validated
module.exports = allConf