From 086bd55ddd22a35a1e8344cbe22dde73d0ed48f5 Mon Sep 17 00:00:00 2001 From: Ilia Date: Tue, 29 Mar 2022 23:21:54 +0300 Subject: [PATCH] Add support for configuring internal redirects using UI #1588 --- usermin/change_web.cgi | 37 +++++++++++++++++++++++++++++++++++++ usermin/edit_web.cgi | 20 ++++++++++++++++++++ webmin/change_web.cgi | 25 +++++++++++++++++++++++++ webmin/edit_web.cgi | 15 +++++++++++++++ webmin/lang/en | 10 ++++++++++ 5 files changed, 107 insertions(+) diff --git a/usermin/change_web.cgi b/usermin/change_web.cgi index 7a5f665bc..5c64e6c7e 100755 --- a/usermin/change_web.cgi +++ b/usermin/change_web.cgi @@ -26,6 +26,43 @@ for(my $i=0; defined($p = $in{"expirespath_$i"}); $i++) { } $miniserv{'expires_paths'} = join("\t", map { $_->[0]."=".$_->[1] } @expires_paths); +# Save redirects +delete($miniserv{'redirect_host'}); +delete($miniserv{'redirect_port'}); +delete($miniserv{'redirect_prefix'}); +delete($miniserv{'redirect_ssl'}); +my $redir_host = $in{'redirect_host'}; +$redir_host =~ /^[A-z0-9\-\.\:]+$/ || + $redir_host =~ /^\s*$/ || + &error(&text('web_eredirhost', &html_escape($redir_host))); +$miniserv{'redirect_host'} = $redir_host + if ($redir_host); +my $redir_port = &trim($in{'redirect_port'}); +($redir_port =~ /^\d+$/ && $redir_port < 65536) || + $redir_port =~ /^\s*$/ || + &error(&text('bind_eport2', &html_escape($redir_port))); +$miniserv{'redirect_port'} = $redir_port + if ($redir_port); +my $redir_pref = &trim($in{'redirect_prefix'}); +$redir_pref =~ /^\// || $redir_pref =~ /^\s*$/ || + &error($text{'web_eredirpref'}); +$redir_pref !~ /\s/ || &error($text{'web_eredirpref2'}); +$miniserv{'redirect_prefix'} = $redir_pref + if ($redir_pref); +my $redir_ssl = $in{'redirect_ssl'}; +$miniserv{'redirect_ssl'} = 1 if ($redir_ssl == 1); + +# Save switch redirect to Usermin URL +if ($in{'redirect_url_def'}) { + delete($miniserv{'redirect_url'}); + } +else { + my $rediruurl = &trim($in{'redirect_url'}); + $rediruurl !~ /\s/ || + &error(&text('web_eredirurl', + &html_escape($rediruurl))); + $miniserv{'redirect_url'} = $rediruurl; + } # Save stack trace option $uconfig{'error_stack'} = $in{'stack'}; diff --git a/usermin/edit_web.cgi b/usermin/edit_web.cgi index 4dd781715..d353a0eda 100755 --- a/usermin/edit_web.cgi +++ b/usermin/edit_web.cgi @@ -34,6 +34,26 @@ for(my $i=0; $i<@expires_paths; $i++) { $etable .= &ui_columns_end(); print &ui_table_row($text{'web_expirespaths'}, $etable); +# Display redirects +my $rtable = &ui_columns_start([ $text{'web_redirhost'}, + $text{'web_redirport'}, + $text{'web_redirpref'}, + $text{'web_redirssl'} ], 'auto'); +$rtable .= &ui_columns_row([ + &ui_textbox('redirect_host', $miniserv{'redirect_host'}, 30), + &ui_textbox('redirect_port', $miniserv{'redirect_port'}, 5), + &ui_textbox('redirect_prefix', $miniserv{'redirect_prefix'}, 10), + &ui_checkbox("redirect_ssl", 1, $text{'redirect_ssl'}, + $miniserv{'redirect_ssl'}), + ], ['', '', '', ' style="text-align: center"']); +$rtable .= &ui_columns_end(); +print &ui_table_row($text{'web_redirdesc'}, $rtable); + +# Display switch redirect to Usermin URL +print &ui_table_row($text{'web_rediruurl'}, + &ui_opt_textbox("redirect_url", $miniserv{'redirect_url'}, 40, $text{'default'})); + + # Show call stack on error print &ui_table_row($text{'advanced_stack'}, &ui_yesno_radio("stack", int($uconfig{'error_stack'})), undef); diff --git a/webmin/change_web.cgi b/webmin/change_web.cgi index 226115194..1d0ebb747 100755 --- a/webmin/change_web.cgi +++ b/webmin/change_web.cgi @@ -25,6 +25,31 @@ for(my $i=0; defined($p = $in{"expirespath_$i"}); $i++) { } $miniserv{'expires_paths'} = join("\t", map { $_->[0]."=".$_->[1] } @expires_paths); +# Save redirects +delete($miniserv{'redirect_host'}); +delete($miniserv{'redirect_port'}); +delete($miniserv{'redirect_prefix'}); +delete($miniserv{'redirect_ssl'}); +my $redir_host = $in{'redirect_host'}; +$redir_host =~ /^[A-z0-9\-\.\:]+$/ || + $redir_host =~ /^\s*$/ || + &error(&text('web_eredirhost', &html_escape($redir_host))); +$miniserv{'redirect_host'} = $redir_host + if ($redir_host); +my $redir_port = &trim($in{'redirect_port'}); +($redir_port =~ /^\d+$/ && $redir_port < 65536) || + $redir_port =~ /^\s*$/ || + &error(&text('bind_eport2', &html_escape($redir_port))); +$miniserv{'redirect_port'} = $redir_port + if ($redir_port); +my $redir_pref = &trim($in{'redirect_prefix'}); +$redir_pref =~ /^\// || $redir_pref =~ /^\s*$/ || + &error($text{'web_eredirpref'}); +$redir_pref !~ /\s/ || &error($text{'web_eredirpref2'}); +$miniserv{'redirect_prefix'} = $redir_pref + if ($redir_pref); +my $redir_ssl = $in{'redirect_ssl'}; +$miniserv{'redirect_ssl'} = 1 if ($redir_ssl == 1); # Save stack trace option $gconfig{'error_stack'} = $in{'stack'}; diff --git a/webmin/edit_web.cgi b/webmin/edit_web.cgi index 44cdd191e..929396db3 100755 --- a/webmin/edit_web.cgi +++ b/webmin/edit_web.cgi @@ -33,6 +33,21 @@ for(my $i=0; $i<@expires_paths; $i++) { $etable .= &ui_columns_end(); print &ui_table_row($text{'web_expirespaths'}, $etable); +# Display redirects +my $rtable = &ui_columns_start([ $text{'web_redirhost'}, + $text{'web_redirport'}, + $text{'web_redirpref'}, + $text{'web_redirssl'} ], 'auto'); +$rtable .= &ui_columns_row([ + &ui_textbox('redirect_host', $miniserv{'redirect_host'}, 30), + &ui_textbox('redirect_port', $miniserv{'redirect_port'}, 5), + &ui_textbox('redirect_prefix', $miniserv{'redirect_prefix'}, 10), + &ui_checkbox("redirect_ssl", 1, $text{'redirect_ssl'}, + $miniserv{'redirect_ssl'}), + ], ['', '', '', ' style="text-align: center"']); +$rtable .= &ui_columns_end(); +print &ui_table_row($text{'web_redirdesc'}, $rtable); + # Show call stack on error print &ui_table_row($text{'advanced_stack'}, &ui_yesno_radio("stack", int($gconfig{'error_stack'})), undef); diff --git a/webmin/lang/en b/webmin/lang/en index 85a5144b8..0817023af 100644 --- a/webmin/lang/en +++ b/webmin/lang/en @@ -1080,6 +1080,16 @@ web_expirespaths=Client-side cache times based on URL path web_expirespath=Path regular expression web_expirestime=Cache time in seconds web_eexpires2=Missing or non-numeric client side cache time in row $1 +web_rediruurl=Post-login switch redirect URL +web_redirdesc=Internal redirect URL overrides +web_eredirurl='$1' contains spaces and is not a valid URL +web_redirhost=Redirect host +web_eredirhost='$1' is not a valid hostname +web_redirport=Redirect port +web_redirpref=Redirect prefix +web_eredirpref=Prefix must start with forward slash +web_eredirpref2=Prefix must not contain spaces +web_redirssl=Redirect SSL webmincron_title=Webmin Scheduled Functions webmincron_emodule=The Webmin Cron Jobs module is not installed!