moved domains up a level to allow multiple module groups with same domain names
This commit is contained in:
parent
ea55d3cc73
commit
61af4707ee
|
@ -30,43 +30,6 @@ function mergeSettings(orig, changes) {
|
||||||
function fixRawConfig(config) {
|
function fixRawConfig(config) {
|
||||||
var updated = false;
|
var updated = false;
|
||||||
|
|
||||||
function updateModules(list) {
|
|
||||||
if (!Array.isArray(list)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
list.forEach(function (mod) {
|
|
||||||
if (!mod.id) {
|
|
||||||
mod.id = crypto.randomBytes(4).toString('hex');
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
if (mod.name) {
|
|
||||||
mod.type = mod.type || mod.name;
|
|
||||||
delete mod.name;
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function updateDomains(list) {
|
|
||||||
if (!Array.isArray(list)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
list.forEach(function (mod) {
|
|
||||||
if (!mod.id) {
|
|
||||||
mod.id = crypto.randomBytes(8).toString('hex');
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
updateModules(mod.modules);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
[ 'dns', 'tcp', 'http', 'tls' ].forEach(function (key) {
|
|
||||||
if (!config[key]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
updateModules(config[key].modules);
|
|
||||||
updateDomains(config[key].domains);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (config.tcp && config.tcp && !Array.isArray(config.tcp)) {
|
if (config.tcp && config.tcp && !Array.isArray(config.tcp)) {
|
||||||
config.tcp.bind = [ config.tcp.bind ];
|
config.tcp.bind = [ config.tcp.bind ];
|
||||||
updated = true;
|
updated = true;
|
||||||
|
@ -90,6 +53,70 @@ function fixRawConfig(config) {
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateModules(list) {
|
||||||
|
if (!Array.isArray(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
list.forEach(function (mod) {
|
||||||
|
if (!mod.id) {
|
||||||
|
mod.id = crypto.randomBytes(4).toString('hex');
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
if (mod.name) {
|
||||||
|
mod.type = mod.type || mod.name;
|
||||||
|
delete mod.name;
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function moveDomains(name) {
|
||||||
|
if (!config[name].domains) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updated = true;
|
||||||
|
var domList = config[name].domains;
|
||||||
|
delete config[name].domains;
|
||||||
|
|
||||||
|
if (!Array.isArray(domList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!Array.isArray(config.domains)) {
|
||||||
|
config.domains = [];
|
||||||
|
}
|
||||||
|
domList.forEach(function (dom) {
|
||||||
|
updateModules(dom.modules);
|
||||||
|
|
||||||
|
var strDoms = dom.names.slice().sort().join(',');
|
||||||
|
var added = config.domain.some(function (existing) {
|
||||||
|
if (strDoms !== existing.names.slice().sort().join(',')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
existing.modules = existing.modules || {};
|
||||||
|
existing.modules[name] = (existing.modules[name] || []).concat(dom.modules);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
if (added) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newDom = {
|
||||||
|
id: crypto.randomBytes(8).toString('hex'),
|
||||||
|
names: dom.names,
|
||||||
|
modules: {}
|
||||||
|
};
|
||||||
|
newDom.modules[name] = dom.modules;
|
||||||
|
config.domains.push(newDom);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[ 'udp', 'tcp', 'http', 'tls' ].forEach(function (key) {
|
||||||
|
if (!config[key]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updateModules(config[key].modules);
|
||||||
|
moveDomains(key);
|
||||||
|
});
|
||||||
|
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
async function createStorage(filename, filetype) {
|
async function createStorage(filename, filetype) {
|
||||||
|
|
|
@ -65,18 +65,21 @@ module.exports.create = function (deps, conf, greenlockMiddleware) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function hostMatchesDomains(req, domains) {
|
function hostMatchesDomains(req, domainList) {
|
||||||
var host = separatePort((req.headers || req).host).host.toLowerCase();
|
var host = separatePort((req.headers || req).host).host.toLowerCase();
|
||||||
|
|
||||||
return domains.some(function (pattern) {
|
return domainList.some(function (pattern) {
|
||||||
return domainMatches(pattern, host);
|
return domainMatches(pattern, host);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function determinePrimaryHost() {
|
function determinePrimaryHost() {
|
||||||
var result;
|
var result;
|
||||||
if (Array.isArray(conf.http.domains)) {
|
if (Array.isArray(conf.domains)) {
|
||||||
conf.http.domains.some(function (dom) {
|
conf.domains.some(function (dom) {
|
||||||
|
if (!dom.modules || !dom.modules.http) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return dom.names.some(function (domain) {
|
return dom.names.some(function (domain) {
|
||||||
if (domain[0] !== '*') {
|
if (domain[0] !== '*') {
|
||||||
result = domain;
|
result = domain;
|
||||||
|
@ -415,17 +418,20 @@ module.exports.create = function (deps, conf, greenlockMiddleware) {
|
||||||
if (checkAdmin(conn, opts, headers)) { return; }
|
if (checkAdmin(conn, opts, headers)) { return; }
|
||||||
|
|
||||||
var prom = PromiseA.resolve(false);
|
var prom = PromiseA.resolve(false);
|
||||||
(conf.http.domains || []).forEach(function (dom) {
|
(conf.domains || []).forEach(function (dom) {
|
||||||
prom = prom.then(function (handled) {
|
prom = prom.then(function (handled) {
|
||||||
if (handled) {
|
if (handled) {
|
||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
if (!dom.modules || !dom.modules.http) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!hostMatchesDomains(headers, dom.names)) {
|
if (!hostMatchesDomains(headers, dom.names)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var subProm = PromiseA.resolve(false);
|
var subProm = PromiseA.resolve(false);
|
||||||
dom.modules.forEach(function (mod) {
|
dom.modules.http.forEach(function (mod) {
|
||||||
if (moduleChecks[mod.type]) {
|
if (moduleChecks[mod.type]) {
|
||||||
subProm = subProm.then(function (handled) {
|
subProm = subProm.then(function (handled) {
|
||||||
if (handled) { return handled; }
|
if (handled) { return handled; }
|
||||||
|
|
|
@ -27,8 +27,8 @@ module.exports.create = function (deps, config, netHandler) {
|
||||||
return value || '';
|
return value || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function nameMatchesDomains(name, domains) {
|
function nameMatchesDomains(name, domainList) {
|
||||||
return domains.some(function (pattern) {
|
return domainList.some(function (pattern) {
|
||||||
return domainMatches(pattern, name);
|
return domainMatches(pattern, name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -135,13 +135,16 @@ module.exports.create = function (deps, config, netHandler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var handled = false;
|
var handled = false;
|
||||||
if (Array.isArray(config.tls.domains)) {
|
if (Array.isArray(config.domains)) {
|
||||||
handled = config.tls.domains.some(function (dom) {
|
handled = config.domains.some(function (dom) {
|
||||||
|
if (!dom.modules || !dom.modules.tls) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!nameMatchesDomains(opts.domain, dom.names)) {
|
if (!nameMatchesDomains(opts.domain, dom.names)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dom.modules.some(function (mod) {
|
return dom.modules.tls.some(function (mod) {
|
||||||
if (mod.type !== 'acme') {
|
if (mod.type !== 'acme') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -330,12 +333,15 @@ module.exports.create = function (deps, config, netHandler) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var handled = (config.tls.domains || []).some(function (dom) {
|
var handled = (config.domains || []).some(function (dom) {
|
||||||
|
if (!dom.modules || !dom.modules.tls) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!nameMatchesDomains(opts.servername, dom.names)) {
|
if (!nameMatchesDomains(opts.servername, dom.names)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dom.modules.some(checkModule);
|
return dom.modules.tls.some(checkModule);
|
||||||
});
|
});
|
||||||
if (handled) {
|
if (handled) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue