From d3c0409f0efd0aa3f75bf0445c29334071448e62 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Tue, 15 Sep 2026 01:04:14 +0200 Subject: [PATCH] Update EAB fields to use placeholders --- webmin/edit_ssl.cgi | 60 +++++++++++++++++++----------------------- webmin/lang/en | 5 ++-- webmin/letsencrypt.cgi | 4 +++ 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/webmin/edit_ssl.cgi b/webmin/edit_ssl.cgi index 5199df5fd..42b56285b 100755 --- a/webmin/edit_ssl.cgi +++ b/webmin/edit_ssl.cgi @@ -261,16 +261,7 @@ print ui_tabs_start_tab("mode", "lets"); my $err = &check_letsencrypt(); print $text{'ssl_letsdesc'}; if (!$err) { - print &ui_tag('span', - &ui_details({ - 'class' => 'inline inlined', - 'title' => '', - 'content' => $text{'ssl_letsdesc2'}, - }))."\n". - &ui_tag('style', - ".ui--span>details.inline>summary+span {\n". - "margin-top: 0;\n". - "}\n"); + print "

", $text{'ssl_letsdesc2'}, "

\n"; } print "

\n"; @@ -283,7 +274,7 @@ if ($err) { } else { # Show form to create a cert - print &ui_form_start("letsencrypt.cgi"); + print &ui_form_start("letsencrypt.cgi", "post"); print &ui_table_start($text{'ssl_letsheader'}, undef, 2); # For domain names @@ -375,31 +366,34 @@ else { [ [ 0, $text{'ssl_staging0'} ], [ 1, $text{'ssl_staging1'} ] ])); - my $acme_extra = &ui_table_start(undef, undef, 2); - $acme_extra .= &ui_table_row($text{'ssl_acmedir'}, + # Provider settings are ordinary rows in the certificate form + print &ui_table_row($text{'ssl_acmedir'}, &ui_textbox("directory_url", - $config{'letsencrypt_directory_url'}, 60)."
\n". + $config{'letsencrypt_directory_url'}, 40)."
\n". &ui_note($text{'ssl_acmedirdesc'}, 0)); - $acme_extra .= &ui_table_row($text{'ssl_acmekid'}, - &ui_textbox("eab_kid", - $config{'letsencrypt_eab_kid'}, 40)."
\n". - &ui_note($text{'ssl_acmekiddesc'}, 0)); - $acme_extra .= &ui_table_row($text{'ssl_acmehmac'}, - &ui_password("eab_hmac", - $config{'letsencrypt_eab_hmac'}, 50)."
\n". + # Keep both EAB credentials controlled by the same choice + my $eab_disabled = $config{'letsencrypt_eab_kid'} eq ''; + print &ui_table_row($text{'ssl_acmeeab'}, + &ui_radio_table("eab_kid_def", $eab_disabled ? 1 : 0, + [ [ 1, $text{'config_none'}, undef, + &js_disable_inputs([ "eab_kid", "eab_hmac" ], + [ ], "onClick") ], + [ 0, $text{'config_setto'}, + &ui_textbox("eab_kid", + $config{'letsencrypt_eab_kid'}, 32, + $eab_disabled, undef, 'autocomplete="off" '. + 'placeholder="'."e_escape($text{'ssl_acmekid'}).'" '. + 'aria-label="'."e_escape($text{'ssl_acmekid'}).'"')."
\n". + &ui_textbox("eab_hmac", + $config{'letsencrypt_eab_hmac'}, 32, + $eab_disabled, undef, + 'autocomplete="new-password" '. + 'placeholder="'."e_escape($text{'ssl_acmehmac'}).'" '. + 'aria-label="'."e_escape($text{'ssl_acmehmac'}).'"'), + &js_disable_inputs([ ], [ "eab_kid", "eab_hmac" ], + "onClick") ] ], 1)."
\n". + &ui_note($text{'ssl_acmekiddesc'}, 0)."
\n". &ui_note($text{'ssl_acmehmacdesc'}, 0)); - $acme_extra .= &ui_table_end(); - print &ui_table_row($text{'ssl_acmeopts'}, - &ui_details({ - 'class' => 'inline inlined', - 'html' => 1, - 'title' => $text{'ssl_acmeextra'}, - 'content' => $acme_extra, - })."\n". - &ui_tag('style', - "tr>td>details.inline>summary+span {\n". - "margin-left: 0;\n". - "}\n")); # Renewal option my $job = &find_letsencrypt_cron_job(); diff --git a/webmin/lang/en b/webmin/lang/en index 8c8e19c9f..4eed7ef12 100644 --- a/webmin/lang/en +++ b/webmin/lang/en @@ -457,9 +457,10 @@ ssl_acmeopts=Provider settings ssl_acmeextra=Show advanced settings ssl_acmedir=Custom ACME directory URL ssl_acmedirdesc=If set, this overrides the default provider server above. -ssl_acmekid=External Account Binding key ID +ssl_acmeeab=External Account Binding +ssl_acmekid=Key ID ssl_acmekiddesc=Optional. Some ACME providers require this in addition to the directory URL. -ssl_acmehmac=External Account Binding HMAC key +ssl_acmehmac=HMAC key ssl_acmehmacdesc=Optional. Requires the native Certbot client when used. newkey_err=Failed to create SSL key diff --git a/webmin/letsencrypt.cgi b/webmin/letsencrypt.cgi index f248df764..fbae93cd7 100755 --- a/webmin/letsencrypt.cgi +++ b/webmin/letsencrypt.cgi @@ -31,6 +31,10 @@ foreach my $dom (@doms) { &error($text{'letsencrypt_edom'}); } my $has_ip_doms = &letsencrypt_doms_have_ips(\@doms); +# Ignore unused EAB fields, even if a password manager filled them in +if ($in{'eab_kid_def'}) { + $in{'eab_kid'} = $in{'eab_hmac'} = ''; + } $in{'directory_url'} = &trim($in{'directory_url'}); $in{'eab_kid'} = &trim($in{'eab_kid'}); $in{'eab_hmac'} = &trim($in{'eab_hmac'});