Refactor certbot plugin install for setup

This commit is contained in:
Jamie Curnow 2024-01-18 15:13:16 +10:00
parent c722eb1cea
commit 10d9760242
No known key found for this signature in database
GPG Key ID: FFBB624C43388E9E
2 changed files with 47 additions and 21 deletions

View File

@ -2,16 +2,47 @@ const dnsPlugins = require('../global/certbot-dns-plugins.json');
const utils = require('./utils'); const utils = require('./utils');
const error = require('./error'); const error = require('./error');
const logger = require('../logger').certbot; const logger = require('../logger').certbot;
const batchflow = require('batchflow');
// const letsencryptStaging = config.useLetsencryptStaging();
// const letsencryptConfig = '/etc/letsencrypt.ini';
// const certbotCommand = 'certbot';
// const acmeVersion = '1.32.0';
const CERTBOT_VERSION_REPLACEMENT = '$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')'; const CERTBOT_VERSION_REPLACEMENT = '$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')';
const certbot = { const certbot = {
/**
* @param {array} pluginKeys
*/
installPlugins: async function (pluginKeys) {
let hasErrors = false;
return new Promise((resolve, reject) => {
if (pluginKeys.length === 0) {
return;
}
batchflow(pluginKeys).sequential()
.each((i, pluginKey, next) => {
certbot.installPlugin(pluginKey)
.then(() => {
next();
})
.catch((err) => {
hasErrors = true;
next(err);
});
})
.error((err) => {
logger.error(err.message);
})
.end(() => {
if (hasErrors) {
reject(new error.CommandError('Some plugins failed to install. Please check the logs above', 1));
} else {
resolve();
}
});
});
},
/** /**
* Installs a cerbot plugin given the key for the object from * Installs a cerbot plugin given the key for the object from
* ../global/certbot-dns-plugins.json * ../global/certbot-dns-plugins.json

View File

@ -7,7 +7,7 @@ const utils = require('./lib/utils');
const authModel = require('./models/auth'); const authModel = require('./models/auth');
const settingModel = require('./models/setting'); const settingModel = require('./models/setting');
const dns_plugins = require('./global/certbot-dns-plugins'); const dns_plugins = require('./global/certbot-dns-plugins');
const certbot = require('./lib/certbot');
/** /**
* Creates a default admin users if one doesn't already exist in the database * Creates a default admin users if one doesn't already exist in the database
* *
@ -116,10 +116,7 @@ const setupCertbotPlugins = () => {
certificates.map(function (certificate) { certificates.map(function (certificate) {
if (certificate.meta && certificate.meta.dns_challenge === true) { if (certificate.meta && certificate.meta.dns_challenge === true) {
const dns_plugin = dns_plugins[certificate.meta.dns_provider]; plugins.push(certificate.meta.dns_provider);
const packages_to_install = `${dns_plugin.package_name}${dns_plugin.version_requirement || ''} ${dns_plugin.dependencies}`;
if (plugins.indexOf(packages_to_install) === -1) plugins.push(packages_to_install);
// Make sure credentials file exists // Make sure credentials file exists
const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id; const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
@ -130,17 +127,15 @@ const setupCertbotPlugins = () => {
} }
}); });
if (plugins.length) { return certbot.installPlugins(plugins)
const install_cmd = '. /opt/certbot/bin/activate && pip install --no-cache-dir ' + plugins.join(' ') + ' && deactivate'; .then(() => {
promises.push(utils.exec(install_cmd)); if (promises.length) {
} return Promise.all(promises)
.then(() => {
if (promises.length) { logger.info('Added Certbot plugins ' + plugins.join(', '));
return Promise.all(promises) });
.then(() => { }
logger.info('Added Certbot plugins ' + plugins.join(', ')); });
});
}
} }
}); });
}; };