|
|
@ -23,13 +23,9 @@ Manage.create = function(opts) { |
|
|
|
|
|
|
|
var manage = {}; |
|
|
|
|
|
|
|
manage.ping = function() { |
|
|
|
return Manage._ping(manage, opts); |
|
|
|
}; |
|
|
|
|
|
|
|
manage._txPromise = Promise.resolve(); |
|
|
|
|
|
|
|
manage.config = function(conf) { |
|
|
|
manage.defaults = manage.config = function(conf) { |
|
|
|
// get / set default site settings such as
|
|
|
|
// subscriberEmail, store, challenges, renewOffset, renewStagger
|
|
|
|
return Manage._getLatest(manage, opts).then(function(config) { |
|
|
@ -87,39 +83,6 @@ Manage.create = function(opts) { |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
manage._lastStat = { |
|
|
|
size: 0, |
|
|
|
mtimeMs: 0 |
|
|
|
}; |
|
|
|
manage._config = {}; |
|
|
|
|
|
|
|
manage._save = function(config) { |
|
|
|
return mkdirp(path.dirname(opts.configFile)).then(function() { |
|
|
|
return sfs |
|
|
|
.writeFileAsync( |
|
|
|
opts.configFile, |
|
|
|
// pretty-print the config file
|
|
|
|
JSON.stringify(config, null, 2), |
|
|
|
'utf8' |
|
|
|
) |
|
|
|
.then(function() { |
|
|
|
// this file may contain secrets, so keep it safe
|
|
|
|
return chmodFile(opts.configFile, parseInt('0600', 8)) |
|
|
|
.catch(function() { |
|
|
|
/*ignore for Windows */ |
|
|
|
}) |
|
|
|
.then(function() { |
|
|
|
return statFile(opts.configFile).then(function( |
|
|
|
stat |
|
|
|
) { |
|
|
|
manage._lastStat.size = stat.size; |
|
|
|
manage._lastStat.mtimeMs = stat.mtimeMs; |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
manage.add = function(args) { |
|
|
|
manage._txPromise = manage._txPromise.then(function() { |
|
|
|
// if the fs has changed since we last wrote, get the lastest from disk
|
|
|
@ -128,7 +91,8 @@ Manage.create = function(opts) { |
|
|
|
var subscriberEmail = args.subscriberEmail; |
|
|
|
var subject = args.subject || args.domain; |
|
|
|
var primary = subject; |
|
|
|
var altnames = args.altnames || args.domains; |
|
|
|
var altnames = |
|
|
|
args.servernames || args.altnames || args.domains; |
|
|
|
if ('string' !== typeof primary) { |
|
|
|
if (!Array.isArray(altnames) || !altnames.length) { |
|
|
|
throw new Error('there needs to be a subject'); |
|
|
@ -203,6 +167,14 @@ Manage.create = function(opts) { |
|
|
|
}; |
|
|
|
|
|
|
|
manage.find = function(args) { |
|
|
|
var some = _find(args); |
|
|
|
if (!opts.find) { |
|
|
|
return some; |
|
|
|
} |
|
|
|
// TODO function to always add
|
|
|
|
throw new Error('TODO: use the given find'); |
|
|
|
}; |
|
|
|
function _find(args) { |
|
|
|
return Manage._getLatest(manage, opts).then(function(config) { |
|
|
|
// i.e. find certs more than 30 days old
|
|
|
|
//args.issuedBefore = Date.now() - 30 * 24 * 60 * 60 * 1000;
|
|
|
@ -252,27 +224,10 @@ Manage.create = function(opts) { |
|
|
|
|
|
|
|
return sites; |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
manage.remove = function(args) { |
|
|
|
if (!args.subject) { |
|
|
|
throw new Error('should have a subject for sites to remove'); |
|
|
|
} |
|
|
|
manage._txPromise = manage.txPromise.then(function() { |
|
|
|
return Manage._getLatest(manage, opts).then(function(config) { |
|
|
|
var site = config.sites[args.subject]; |
|
|
|
if (!site) { |
|
|
|
return {}; |
|
|
|
} |
|
|
|
site.deletedAt = Date.now(); |
|
|
|
|
|
|
|
return JSON.parse(JSON.stringify(site)); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return manage._txPromise; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
manage.notify = manage.notifications = function(ev, args) { |
|
|
|
manage.notify = opts.notify || _notify; |
|
|
|
function _notify(ev, args) { |
|
|
|
if (!args) { |
|
|
|
args = ev; |
|
|
|
ev = args.event; |
|
|
@ -292,7 +247,7 @@ Manage.create = function(opts) { |
|
|
|
case 'warning': |
|
|
|
console.error( |
|
|
|
'Error%s:', |
|
|
|
args.context ? ' ' + args.context : '' |
|
|
|
(' ' + (args.context || '')).trimRight() |
|
|
|
); |
|
|
|
console.error(args.message); |
|
|
|
if (args.description) { |
|
|
@ -310,7 +265,7 @@ Manage.create = function(opts) { |
|
|
|
args.status || '' |
|
|
|
); |
|
|
|
if (!args.status) { |
|
|
|
console.log(args); |
|
|
|
console.info(args); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
@ -319,17 +274,7 @@ Manage.create = function(opts) { |
|
|
|
'(more info available: ' + Object.keys(args).join(' ') + ')' |
|
|
|
); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
manage.errors = function(err) { |
|
|
|
// err.subject
|
|
|
|
// err.altnames
|
|
|
|
// err.challenge
|
|
|
|
// err.challengeOptions
|
|
|
|
// err.store
|
|
|
|
// err.storeOptions
|
|
|
|
console.error('Failure with ', err.subject); |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
manage.update = function(args) { |
|
|
|
manage._txPromise = manage.txPromise.then(function() { |
|
|
@ -344,6 +289,57 @@ Manage.create = function(opts) { |
|
|
|
return manage._txPromise; |
|
|
|
}; |
|
|
|
|
|
|
|
manage.remove = function(args) { |
|
|
|
if (!args.subject) { |
|
|
|
throw new Error('should have a subject for sites to remove'); |
|
|
|
} |
|
|
|
manage._txPromise = manage.txPromise.then(function() { |
|
|
|
return Manage._getLatest(manage, opts).then(function(config) { |
|
|
|
var site = config.sites[args.subject]; |
|
|
|
if (!site) { |
|
|
|
return {}; |
|
|
|
} |
|
|
|
site.deletedAt = Date.now(); |
|
|
|
|
|
|
|
return JSON.parse(JSON.stringify(site)); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return manage._txPromise; |
|
|
|
}; |
|
|
|
|
|
|
|
manage._lastStat = { |
|
|
|
size: 0, |
|
|
|
mtimeMs: 0 |
|
|
|
}; |
|
|
|
manage._config = {}; |
|
|
|
|
|
|
|
manage._save = function(config) { |
|
|
|
return mkdirp(path.dirname(opts.configFile)).then(function() { |
|
|
|
return sfs |
|
|
|
.writeFileAsync( |
|
|
|
opts.configFile, |
|
|
|
// pretty-print the config file
|
|
|
|
JSON.stringify(config, null, 2), |
|
|
|
'utf8' |
|
|
|
) |
|
|
|
.then(function() { |
|
|
|
// this file may contain secrets, so keep it safe
|
|
|
|
return chmodFile(opts.configFile, parseInt('0600', 8)) |
|
|
|
.catch(function() { |
|
|
|
/*ignore for Windows */ |
|
|
|
}) |
|
|
|
.then(function() { |
|
|
|
return statFile(opts.configFile).then(function( |
|
|
|
stat |
|
|
|
) { |
|
|
|
manage._lastStat.size = stat.size; |
|
|
|
manage._lastStat.mtimeMs = stat.mtimeMs; |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
return manage; |
|
|
|
}; |
|
|
|
|
|
|
@ -373,18 +369,3 @@ Manage._getLatest = function(mng, opts) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
Manage._ping = function(mng, opts) { |
|
|
|
if (mng._pingPromise) { |
|
|
|
return mng._pingPromise; |
|
|
|
} |
|
|
|
|
|
|
|
mng._pringPromise = Promise.resolve().then(function() { |
|
|
|
// TODO file permissions
|
|
|
|
if (!opts.configFile) { |
|
|
|
throw new Error('no config file location provided'); |
|
|
|
} |
|
|
|
JSON.parse(fs.readFileSync(opts.configFile, 'utf8')); |
|
|
|
}); |
|
|
|
return mng._pingPromise; |
|
|
|
}; |
|
|
|