v0.6.4: allow override of find function
This commit is contained in:
parent
0c88e09d7d
commit
7fb336f989
102
manager.js
102
manager.js
|
@ -111,9 +111,10 @@ Manage.create = function(opts) {
|
||||||
config.sites = {};
|
config.sites = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
var site = config.sites[primary];
|
var existing = config.sites[primary];
|
||||||
if (!site) {
|
var site = existing;
|
||||||
site = config.sites[primary] = { altnames: [] };
|
if (!existing) {
|
||||||
|
site = config.sites[primary] = { altnames: [primary] };
|
||||||
}
|
}
|
||||||
|
|
||||||
// The goal is to make this decently easy to manage by hand without mistakes
|
// The goal is to make this decently easy to manage by hand without mistakes
|
||||||
|
@ -125,6 +126,17 @@ Manage.create = function(opts) {
|
||||||
site.subscriberEmail = subscriberEmail;
|
site.subscriberEmail = subscriberEmail;
|
||||||
}
|
}
|
||||||
site.subject = subject;
|
site.subject = subject;
|
||||||
|
site.renewAt = args.renewAt || site.renewAt || 0;
|
||||||
|
if (
|
||||||
|
altnames
|
||||||
|
.slice(0)
|
||||||
|
.sort()
|
||||||
|
.join(' ') !== site.altnames.slice(0).sort.join(' ')
|
||||||
|
) {
|
||||||
|
// TODO signal to wait for renewal?
|
||||||
|
// it will definitely be renewed on the first request anyway
|
||||||
|
site.renewAt = 0;
|
||||||
|
}
|
||||||
site.altnames = altnames;
|
site.altnames = altnames;
|
||||||
if (!site.issuedAt) {
|
if (!site.issuedAt) {
|
||||||
site.issuedAt = 0;
|
site.issuedAt = 0;
|
||||||
|
@ -167,13 +179,85 @@ Manage.create = function(opts) {
|
||||||
};
|
};
|
||||||
|
|
||||||
manage.find = function(args) {
|
manage.find = function(args) {
|
||||||
var some = _find(args);
|
return _find(args).then(function(existing) {
|
||||||
if (!opts.find) {
|
if (!opts.find) {
|
||||||
return some;
|
return existing;
|
||||||
}
|
}
|
||||||
// TODO function to always add
|
|
||||||
throw new Error('TODO: use the given find');
|
return Promise.resolve(opts.find(args)).then(function(results) {
|
||||||
|
// TODO also detect and delete stale (just ignoring them for now)
|
||||||
|
var changed = [];
|
||||||
|
var same = [];
|
||||||
|
results.forEach(function(_newer) {
|
||||||
|
// Check lowercase subject names
|
||||||
|
var subject = (_newer.subject || '').toLowerCase();
|
||||||
|
// Set the default altnames to the subject, just in case
|
||||||
|
var altnames = _newer.altnames || [];
|
||||||
|
if (!altnames.includes(subject)) {
|
||||||
|
console.warn(
|
||||||
|
"all site configs should include 'subject' and 'altnames': " +
|
||||||
|
subject
|
||||||
|
);
|
||||||
|
altnames.push(subject);
|
||||||
|
}
|
||||||
|
|
||||||
|
existing.some(function(_older) {
|
||||||
|
if (subject !== (_older.subject || '').toLowerCase()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_newer._exists = true;
|
||||||
|
|
||||||
|
// Compare the altnames and update if needed
|
||||||
|
if (
|
||||||
|
altnames
|
||||||
|
.slice(0)
|
||||||
|
.sort()
|
||||||
|
.join(' ') !==
|
||||||
|
(_older.altnames || [])
|
||||||
|
.slice(0)
|
||||||
|
.sort()
|
||||||
|
.join(' ')
|
||||||
|
) {
|
||||||
|
_older.renewAt = 0;
|
||||||
|
_older.altnames = altnames;
|
||||||
|
// TODO signal waitForRenewal (although it'll update on the first access automatically)
|
||||||
|
changed.push(_older);
|
||||||
|
} else {
|
||||||
|
same.push(_older);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!_newer._exists) {
|
||||||
|
changed.push({
|
||||||
|
subject: subject,
|
||||||
|
altnames: altnames,
|
||||||
|
renewAt: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!changed.length) {
|
||||||
|
return same;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kinda redundant to pull again, but whatever...
|
||||||
|
return Manage._getLatest(manage, opts).then(function(config) {
|
||||||
|
changed.forEach(function(site) {
|
||||||
|
config.sites[site.subject] = site;
|
||||||
|
});
|
||||||
|
return manage._save(config).then(function() {
|
||||||
|
// everything was either added, updated, or not different
|
||||||
|
// hence, this is everything
|
||||||
|
var all = changed.concat(same);
|
||||||
|
return all;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function _find(args) {
|
function _find(args) {
|
||||||
return Manage._getLatest(manage, opts).then(function(config) {
|
return Manage._getLatest(manage, opts).then(function(config) {
|
||||||
// i.e. find certs more than 30 days old
|
// i.e. find certs more than 30 days old
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "greenlock-manager-fs",
|
"name": "greenlock-manager-fs",
|
||||||
"version": "0.6.3",
|
"version": "0.6.4",
|
||||||
"description": "A simple file-based management strategy for Greenlock",
|
"description": "A simple file-based management strategy for Greenlock",
|
||||||
"main": "manager.js",
|
"main": "manager.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
Loading…
Reference in New Issue