|
|
@ -19,8 +19,13 @@ var mkdirp = promisify(require('@root/mkdirp')); |
|
|
|
// and wanting to be fairly sure it works and produces
|
|
|
|
// meaningful errors
|
|
|
|
|
|
|
|
// IMPORTANT
|
|
|
|
// For your use case you'll probably find a better example
|
|
|
|
// in greenlock-manager-test
|
|
|
|
// in greenlock-manager-test:
|
|
|
|
//
|
|
|
|
// npm install --save greenlock-manager-test
|
|
|
|
// npx greenlock-manager-init
|
|
|
|
//
|
|
|
|
|
|
|
|
Manage.create = function(CONF) { |
|
|
|
if (!CONF) { |
|
|
@ -75,6 +80,31 @@ Manage.create = function(CONF) { |
|
|
|
return manage._txPromise; |
|
|
|
}; |
|
|
|
|
|
|
|
manage.get = async function(args) { |
|
|
|
manage._txPromise = manage._txPromise.then(async function() { |
|
|
|
var config = await Manage._getLatest(manage, CONF); |
|
|
|
var site; |
|
|
|
Object.keys(config.sites).some(function(k) { |
|
|
|
// if subject is specified, don't return anything else
|
|
|
|
var _site = config.sites[k]; |
|
|
|
|
|
|
|
// altnames, servername, and wildname all get rolled into one
|
|
|
|
return _site.altnames.some(function(altname) { |
|
|
|
if ([args.servername, args.wildname].includes(altname)) { |
|
|
|
site = _site; |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
if (site && !site.deletedAt) { |
|
|
|
return doctor.site(config.sites, site.subject); |
|
|
|
} |
|
|
|
return null; |
|
|
|
}); |
|
|
|
|
|
|
|
return manage._txPromise; |
|
|
|
}; |
|
|
|
|
|
|
|
manage._merge = function(config, current, args) { |
|
|
|
if (!current || current.deletedAt) { |
|
|
|
current = config.sites[args.subject] = { |
|
|
@ -250,8 +280,16 @@ Manage.create = function(CONF) { |
|
|
|
manage._save = async function(config) { |
|
|
|
await mkdirp(path.dirname(CONF.configFile)); |
|
|
|
// pretty-print the config file
|
|
|
|
var data = JSON.stringify(config, null, 2); |
|
|
|
await sfs.writeFileAsync(CONF.configFile, data, 'utf8'); |
|
|
|
var data = JSON.parse(JSON.stringify(config)); |
|
|
|
var sites = data.sites || {}; |
|
|
|
data.sites = Object.keys(sites).map(function(k) { |
|
|
|
return sites[k]; |
|
|
|
}); |
|
|
|
await sfs.writeFileAsync( |
|
|
|
CONF.configFile, |
|
|
|
JSON.stringify(data, null, 2), |
|
|
|
'utf8' |
|
|
|
); |
|
|
|
|
|
|
|
// this file may contain secrets, so keep it safe
|
|
|
|
return chmodFile(CONF.configFile, parseInt('0600', 8)) |
|
|
@ -266,8 +304,9 @@ Manage.create = function(CONF) { |
|
|
|
}; |
|
|
|
|
|
|
|
manage.init = async function(deps) { |
|
|
|
var request = deps.request; |
|
|
|
// how nice...
|
|
|
|
// even though we don't need it
|
|
|
|
manage.request = deps.request; |
|
|
|
return null; |
|
|
|
}; |
|
|
|
|
|
|
|
return manage; |
|
|
@ -310,7 +349,10 @@ doctor.config = function(config) { |
|
|
|
doctor.sites(config); |
|
|
|
|
|
|
|
Object.keys(config).forEach(function(key) { |
|
|
|
if (['defaults', 'routes', 'sites'].includes(key)) { |
|
|
|
// .greenlockrc and greenlock.json shall merge as one
|
|
|
|
// and be called greenlock.json because calling it
|
|
|
|
// .greenlockrc seems to rub people the wrong way
|
|
|
|
if (['manager', 'defaults', 'routes', 'sites'].includes(key)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
config.defaults[key] = config[key]; |
|
|
|