Skip to content

Commit 14f84f0

Browse files
authored
Merge pull request #687 from chaptergy/allow-additional-dns-challenge-dependencies
Allow additional dns challenge dependencies
2 parents 96f401c + cb01402 commit 14f84f0

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

backend/internal/certificate.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -789,8 +789,8 @@ const internalCertificate = {
789789
logger.info(`Requesting Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
790790

791791
const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
792-
const credentials_cmd = 'echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'';
793-
const prepare_cmd = 'pip3 install ' + dns_plugin.package_name + '==' + dns_plugin.package_version;
792+
const credentials_cmd = 'mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'';
793+
const prepare_cmd = 'pip3 install ' + dns_plugin.package_name + '==' + dns_plugin.package_version + ' ' + dns_plugin.dependencies;
794794

795795
// Whether the plugin has a --<name>-credentials argument
796796
const has_config_arg = certificate.meta.dns_provider !== 'route53';

backend/setup.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,14 @@ const setupCertbotPlugins = () => {
175175

176176
certificates.map(function (certificate) {
177177
if (certificate.meta && certificate.meta.dns_challenge === true) {
178-
const dns_plugin = dns_plugins[certificate.meta.dns_provider];
179-
const package_to_install = `${dns_plugin.package_name}==${dns_plugin.package_version}`;
178+
const dns_plugin = dns_plugins[certificate.meta.dns_provider];
179+
const packages_to_install = `${dns_plugin.package_name}==${dns_plugin.package_version} ${dns_plugin.dependencies}`;
180180

181-
if (plugins.indexOf(package_to_install) === -1) plugins.push(package_to_install);
181+
if (plugins.indexOf(packages_to_install) === -1) plugins.push(packages_to_install);
182182

183183
// Make sure credentials file exists
184184
const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
185-
const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir /etc/letsencrypt/credentials; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
185+
const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
186186
promises.push(utils.exec(credentials_cmd));
187187
}
188188
});

global/certbot-dns-plugins.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
* display_name: "Name displayed to the user",
1111
* package_name: "Package name in PyPi repo",
1212
* package_version: "Package version in PyPi repo",
13+
* dependencies: "Additional dependencies, space separated (as you would pass it to pip install)",
1314
* credentials: `Template of the credentials file`,
1415
* full_plugin_name: "The full plugin name as used in the commandline with certbot, including prefixes, e.g. 'certbot-dns-njalla:dns-njalla'",
15-
* credentials_file: Whether the plugin has a credentials file
1616
* },
1717
* ...
1818
* }
@@ -24,6 +24,7 @@ module.exports = {
2424
display_name: 'Cloudflare',
2525
package_name: 'certbot-dns-cloudflare',
2626
package_version: '1.8.0',
27+
dependencies: 'cloudflare',
2728
credentials: `# Cloudflare API token
2829
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567`,
2930
full_plugin_name: 'dns-cloudflare',
@@ -33,6 +34,7 @@ dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567`,
3334
display_name: 'CloudXNS',
3435
package_name: 'certbot-dns-cloudxns',
3536
package_version: '1.8.0',
37+
dependencies: '',
3638
credentials: `dns_cloudxns_api_key = 1234567890abcdef1234567890abcdef
3739
dns_cloudxns_secret_key = 1122334455667788`,
3840
full_plugin_name: 'dns-cloudxns',
@@ -42,6 +44,7 @@ dns_cloudxns_secret_key = 1122334455667788`,
4244
display_name: 'Core Networks',
4345
package_name: 'certbot-dns-corenetworks',
4446
package_version: '0.1.4',
47+
dependencies: '',
4548
credentials: `certbot_dns_corenetworks:dns_corenetworks_username = asaHB12r
4649
certbot_dns_corenetworks:dns_corenetworks_password = secure_password`,
4750
full_plugin_name: 'certbot-dns-corenetworks:dns-corenetworks',
@@ -51,6 +54,7 @@ certbot_dns_corenetworks:dns_corenetworks_password = secure_password`,
5154
display_name: 'cPanel',
5255
package_name: 'certbot-dns-cpanel',
5356
package_version: '0.2.2',
57+
dependencies: '',
5458
credentials: `certbot_dns_cpanel:cpanel_url = https://cpanel.example.com:2083
5559
certbot_dns_cpanel:cpanel_username = user
5660
certbot_dns_cpanel:cpanel_password = hunter2`,
@@ -61,6 +65,7 @@ certbot_dns_cpanel:cpanel_password = hunter2`,
6165
display_name: 'DigitalOcean',
6266
package_name: 'certbot-dns-digitalocean',
6367
package_version: '1.8.0',
68+
dependencies: '',
6469
credentials: 'dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff',
6570
full_plugin_name: 'dns-digitalocean',
6671
},
@@ -69,6 +74,7 @@ certbot_dns_cpanel:cpanel_password = hunter2`,
6974
display_name: 'DirectAdmin',
7075
package_name: 'certbot-dns-directadmin',
7176
package_version: '0.0.20',
77+
dependencies: '',
7278
credentials: `directadmin_url = https://my.directadminserver.com:2222
7379
directadmin_username = username
7480
directadmin_password = aSuperStrongPassword`,
@@ -79,6 +85,7 @@ directadmin_password = aSuperStrongPassword`,
7985
display_name: 'DNSimple',
8086
package_name: 'certbot-dns-dnsimple',
8187
package_version: '1.8.0',
88+
dependencies: '',
8289
credentials: 'dns_dnsimple_token = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw',
8390
full_plugin_name: 'dns-dnsimple',
8491
},
@@ -87,6 +94,7 @@ directadmin_password = aSuperStrongPassword`,
8794
display_name: 'DNS Made Easy',
8895
package_name: 'certbot-dns-dnsmadeeasy',
8996
package_version: '1.8.0',
97+
dependencies: '',
9098
credentials: `dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a
9199
dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55`,
92100
full_plugin_name: 'dns-dnsmadeeasy',
@@ -96,6 +104,7 @@ dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55`,
96104
display_name: 'DNSPod',
97105
package_name: 'certbot-dns-dnspod',
98106
package_version: '0.1.0',
107+
dependencies: '',
99108
credentials: `certbot_dns_dnspod:dns_dnspod_email = "DNSPOD-API-REQUIRES-A-VALID-EMAIL"
100109
certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"`,
101110
full_plugin_name: 'certbot-dns-dnspod:dns-dnspod',
@@ -105,9 +114,10 @@ certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"`,
105114
display_name: 'Google',
106115
package_name: 'certbot-dns-google',
107116
package_version: '1.8.0',
117+
dependencies: '',
108118
credentials: `{
109-
"type": "service_account",
110-
...
119+
"type": "service_account",
120+
...
111121
}`,
112122
full_plugin_name: 'dns-google',
113123
},
@@ -116,6 +126,7 @@ certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"`,
116126
display_name: 'Hetzner',
117127
package_name: 'certbot-dns-hetzner',
118128
package_version: '1.0.4',
129+
dependencies: '',
119130
credentials: 'certbot_dns_hetzner:dns_hetzner_api_token = 0123456789abcdef0123456789abcdef',
120131
full_plugin_name: 'certbot-dns-hetzner:dns-hetzner',
121132
},
@@ -124,6 +135,7 @@ certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"`,
124135
display_name: 'INWX',
125136
package_name: 'certbot-dns-inwx',
126137
package_version: '2.1.2',
138+
dependencies: '',
127139
credentials: `certbot_dns_inwx:dns_inwx_url = https://api.domrobot.com/xmlrpc/
128140
certbot_dns_inwx:dns_inwx_username = your_username
129141
certbot_dns_inwx:dns_inwx_password = your_password
@@ -135,6 +147,7 @@ certbot_dns_inwx:dns_inwx_shared_secret = your_shared_secret optional`,
135147
display_name: 'ISPConfig',
136148
package_name: 'certbot-dns-ispconfig',
137149
package_version: '0.2.0',
150+
dependencies: '',
138151
credentials: `certbot_dns_ispconfig:dns_ispconfig_username = myremoteuser
139152
certbot_dns_ispconfig:dns_ispconfig_password = verysecureremoteuserpassword
140153
certbot_dns_ispconfig:dns_ispconfig_endpoint = https://localhost:8080`,
@@ -145,6 +158,7 @@ certbot_dns_ispconfig:dns_ispconfig_endpoint = https://localhost:8080`,
145158
display_name: 'Isset',
146159
package_name: 'certbot-dns-isset',
147160
package_version: '0.0.3',
161+
dependencies: '',
148162
credentials: `certbot_dns_isset:dns_isset_endpoint="https://customer.isset.net/api"
149163
certbot_dns_isset:dns_isset_token="<token>"`,
150164
full_plugin_name: 'certbot-dns-isset:dns-isset',
@@ -154,6 +168,7 @@ certbot_dns_isset:dns_isset_token="<token>"`,
154168
display_name: 'Linode',
155169
package_name: 'certbot-dns-linode',
156170
package_version: '1.8.0',
171+
dependencies: '',
157172
credentials: `dns_linode_key = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ64
158173
dns_linode_version = [<blank>|3|4]`,
159174
full_plugin_name: 'dns-linode',
@@ -163,6 +178,7 @@ dns_linode_version = [<blank>|3|4]`,
163178
display_name: 'LuaDNS',
164179
package_name: 'certbot-dns-luadns',
165180
package_version: '1.8.0',
181+
dependencies: '',
166182
credentials: `dns_luadns_email = user@example.com
167183
dns_luadns_token = 0123456789abcdef0123456789abcdef`,
168184
full_plugin_name: 'dns-luadns',
@@ -172,6 +188,7 @@ dns_luadns_token = 0123456789abcdef0123456789abcdef`,
172188
display_name: 'netcup',
173189
package_name: 'certbot-dns-netcup',
174190
package_version: '1.0.0',
191+
dependencies: '',
175192
credentials: `dns_netcup_customer_id = 123456
176193
dns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567
177194
dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
@@ -182,6 +199,7 @@ dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
182199
display_name: 'Njalla',
183200
package_name: 'certbot-dns-njalla',
184201
package_version: '1.0.0',
202+
dependencies: '',
185203
credentials: 'certbot_dns_njalla:dns_njalla_token = 0123456789abcdef0123456789abcdef01234567',
186204
full_plugin_name: 'certbot-dns-njalla:dns-njalla',
187205
},
@@ -190,6 +208,7 @@ dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
190208
display_name: 'NS1',
191209
package_name: 'certbot-dns-nsone',
192210
package_version: '1.8.0',
211+
dependencies: '',
193212
credentials: 'dns_nsone_api_key = MDAwMDAwMDAwMDAwMDAw',
194213
full_plugin_name: 'dns-nsone',
195214
},
@@ -198,6 +217,7 @@ dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
198217
display_name: 'OVH',
199218
package_name: 'certbot-dns-ovh',
200219
package_version: '1.8.0',
220+
dependencies: '',
201221
credentials: `dns_ovh_endpoint = ovh-eu
202222
dns_ovh_application_key = MDAwMDAwMDAwMDAw
203223
dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
@@ -209,6 +229,7 @@ dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw`,
209229
display_name: 'PowerDNS',
210230
package_name: 'certbot-dns-powerdns',
211231
package_version: '0.2.0',
232+
dependencies: '',
212233
credentials: `certbot_dns_powerdns:dns_powerdns_api_url = https://api.mypowerdns.example.org
213234
certbot_dns_powerdns:dns_powerdns_api_key = AbCbASsd!@34`,
214235
full_plugin_name: 'certbot-dns-powerdns:dns-powerdns',
@@ -218,6 +239,7 @@ certbot_dns_powerdns:dns_powerdns_api_key = AbCbASsd!@34`,
218239
display_name: 'RFC 2136',
219240
package_name: 'certbot-dns-rfc2136',
220241
package_version: '1.8.0',
242+
dependencies: '',
221243
credentials: `# Target DNS server
222244
dns_rfc2136_server = 192.0.2.1
223245
# Target DNS port
@@ -235,6 +257,7 @@ dns_rfc2136_algorithm = HMAC-SHA512`,
235257
display_name: 'Route 53 (Amazon)',
236258
package_name: 'certbot-dns-route53',
237259
package_version: '1.8.0',
260+
dependencies: '',
238261
credentials: `[default]
239262
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
240263
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,
@@ -245,7 +268,8 @@ aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,
245268
display_name: 'Vultr',
246269
package_name: 'certbot-dns-vultr',
247270
package_version: '1.0.3',
271+
dependencies: '',
248272
credentials: 'certbot_dns_vultr:dns_vultr_key = YOUR_VULTR_API_KEY',
249273
full_plugin_name: 'certbot-dns-vultr:dns-vultr',
250274
},
251-
};
275+
};

0 commit comments

Comments
 (0)