mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 14:13:29 +00:00
enable-proxy command, fix missing =back in pods
This commit is contained in:
175
bin/enable-proxy
Executable file
175
bin/enable-proxy
Executable file
@@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env perl
|
||||
# enable-proxy - Set Webmin configuration options to support being served
|
||||
# through a proxy.
|
||||
use strict;
|
||||
use warnings;
|
||||
BEGIN { $Pod::Usage::Formatter = 'Pod::Text::Color'; }
|
||||
use 5.010; # Version in CentOS 6
|
||||
|
||||
use Getopt::Long qw(:config permute pass_through);
|
||||
use Pod::Usage;
|
||||
use Term::ANSIColor qw(:constants);
|
||||
use Fcntl qw( :flock );
|
||||
use Sys::Hostname;
|
||||
|
||||
sub main {
|
||||
my ( $argv ) = @_;
|
||||
my %opt;
|
||||
GetOptions(
|
||||
'help|h' => \$opt{'help'},
|
||||
'config|c=s' => \$opt{'config'},
|
||||
'prefix|p=s' => \$opt{'prefix'},
|
||||
'referer|r=s' => \$opt{'referer'}
|
||||
);
|
||||
pod2usage(0) if ( $opt{'help'} );
|
||||
|
||||
$opt{'config'} ||= "/etc/webmin";
|
||||
|
||||
enable_proxy( \%opt );
|
||||
|
||||
return 0;
|
||||
}
|
||||
exit main( \@ARGV ) if !caller(0);
|
||||
|
||||
sub enable_proxy {
|
||||
my ($optref) = @_;
|
||||
|
||||
my @config_lines;
|
||||
my $file = "$optref->{'config'}/config";
|
||||
|
||||
my $referer;
|
||||
if ($optref->{'referer'}) {
|
||||
$referer = $optref->{'referer'};
|
||||
} else {
|
||||
$referer = hostname;
|
||||
}
|
||||
|
||||
# Setup Webmin
|
||||
if ($optref->{'prefix'}) {
|
||||
# Set'em up for proxying on https://domain.tld/prefix
|
||||
set_config('webprefix', $optref->{'prefix'}, $file);
|
||||
set_config('webprefix_noredir', '1', $file);
|
||||
set_config('referer', $referer, $file);
|
||||
set_config('ssl_redirect', '0', "$optref->{'config'}/miniserv.conf");
|
||||
set_config('ssl', '0', "$optref->{'config'}/miniserv.conf");
|
||||
} else {
|
||||
# No prefix, just proxying at the root level: https://domain.tld/
|
||||
set_config('referer', $referer, $file);
|
||||
set_config('ssl_redirect', '0', "$optref->{'config'}/miniserv.conf");
|
||||
set_config('ssl', '0', "$optref->{'config'}/miniserv.conf");
|
||||
}
|
||||
|
||||
# Setup the local web server?
|
||||
|
||||
# Restart Webmin
|
||||
say "Restarting Webmin to apply changes...";
|
||||
system("$optref->{'config'}/restart");
|
||||
exit 0;
|
||||
}
|
||||
|
||||
sub set_config {
|
||||
my ($key, $value, $file, $module, $force) = @_;
|
||||
$key or die RED, "An --option must be specified", RESET;
|
||||
|
||||
my @config_lines;
|
||||
open my $fh, '+<', $file
|
||||
or die RED, "Unable to open $file", RESET;
|
||||
flock($fh, LOCK_EX) or die RED, "Unable to lock $file", RESET;
|
||||
chomp(@config_lines = <$fh>);
|
||||
# Change'em
|
||||
my $found = 0;
|
||||
my $exit_code = 0;
|
||||
# Validate it against the config.info if this is a module and
|
||||
if ($module && !$force) {
|
||||
validate_config_option($key, $value, $module);
|
||||
}
|
||||
for (@config_lines) {
|
||||
if (/^${key}=(.*)/) {
|
||||
s/^${key}=(.*)/${key}=${value}/;
|
||||
$found++;
|
||||
}
|
||||
}
|
||||
unless ($found > 0) {
|
||||
push(@config_lines, "$key=$value");
|
||||
$exit_code++;
|
||||
}
|
||||
# Write'em
|
||||
seek($fh, 0, 0);
|
||||
print $fh qq|$_\n| for @config_lines;
|
||||
close $fh;
|
||||
}
|
||||
|
||||
sub root {
|
||||
my ($config) = @_;
|
||||
open(my $CONF, "<", "$config/miniserv.conf") || die RED,
|
||||
"Failed to open $config/miniserv.conf", RESET;
|
||||
my $root;
|
||||
while (<$CONF>) {
|
||||
if (/^root=(.*)/) {
|
||||
$root = $1;
|
||||
}
|
||||
}
|
||||
close($CONF);
|
||||
# Does the Webmin root exist?
|
||||
if ( $root ) {
|
||||
die "$root is not a directory. Is --config correct?" unless (-d $root);
|
||||
} else {
|
||||
# Try to guess where Webmin lives, since config file didn't know.
|
||||
die "Unable to determine Webmin installation directory from $ENV{'WEBMIN_CONFIG'}";
|
||||
}
|
||||
|
||||
return $root;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
enable-proxy
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Configure the Webmin web server to be proxied through another web server, like Apache or nginx. This is not usually recommended, and disables some security features, but can help traverse a firewall.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
enable-proxy [options]
|
||||
|
||||
=head1 OPTIONS
|
||||
|
||||
=over
|
||||
|
||||
=item --help, -h
|
||||
|
||||
Print this usage summary and exit. Subcommands may also have a usage summary.
|
||||
|
||||
=item --config, -c
|
||||
|
||||
Specify the full path to the Webmin configuration directory. Defaults to
|
||||
C</etc/webmin>
|
||||
|
||||
=item --prefix, -p
|
||||
|
||||
To use a directory prefix for URLs (e.g. https://domain.tld/webmin) provide
|
||||
it using this option.
|
||||
|
||||
=item --refer, -r
|
||||
|
||||
The hostname you'll be using in your browser to contact the server. (e.g.
|
||||
domain.tld)
|
||||
|
||||
=back
|
||||
|
||||
=head1 EXIT CODES
|
||||
|
||||
0 on successfully replacing a config variable
|
||||
|
||||
non-0 on error
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2018 Jamie Cameron <jcameron@webmin.com>, Joe Cooper
|
||||
<joe@virtualmin.com>.
|
||||
|
||||
@@ -193,6 +193,8 @@ Specify a single option to display. By default, the entire configuration file wi
|
||||
|
||||
Display the description of the option from the module C<config.info> file, instead of it's current value. This option is only available for modules, as miniserv.conf does not have a config.info.
|
||||
|
||||
=back
|
||||
|
||||
=head1 EXIT CODES
|
||||
|
||||
0 on success
|
||||
|
||||
@@ -169,6 +169,8 @@ The value to change the option to.
|
||||
|
||||
Skip validation of the option name. Allows modifying hidden options, and adding unknown options.
|
||||
|
||||
=back
|
||||
|
||||
=head1 EXIT CODES
|
||||
|
||||
0 on successfully replacing a config variable
|
||||
|
||||
@@ -206,6 +206,8 @@ List available subcommands.
|
||||
|
||||
When listing commands, briefly describe what they do.
|
||||
|
||||
=back
|
||||
|
||||
=head1 EXIT CODES
|
||||
|
||||
0 on success
|
||||
|
||||
Reference in New Issue
Block a user