From 19c10866551e34abdd9c5d73459a8a0cfbf96f0c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 10 Apr 2024 17:14:07 +0200 Subject: [PATCH] ovpnmain.cgi: Refactor CCD pool configuration Signed-off-by: Michael Tremer --- html/cgi-bin/ovpnmain.cgi | 254 +++++++++++++++++++++----------------- 1 file changed, 139 insertions(+), 115 deletions(-) diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi index 55c91453b..c0d475451 100755 --- a/html/cgi-bin/ovpnmain.cgi +++ b/html/cgi-bin/ovpnmain.cgi @@ -392,8 +392,7 @@ sub delccdnet($) { # Check if the subnet is in use foreach my $key (keys %conns) { if ($conns{$key}[32] eq $name) { - $errormessage = $Lang::tr{'ccd err hostinnet'}; - return 1; + return $Lang::tr{'ccd err hostinnet'}; } } @@ -412,8 +411,6 @@ sub delccdnet($) { # Update the server configuration to remove routes &writeserverconf(); - - return 0; } # Returns the network with the matching name @@ -442,8 +439,7 @@ sub addccdnet($$) { # Check if the name is valid unless (&validccdname($name)) { - $errormessage = $Lang::tr{'ccd err invalidname'}; - return; + return $Lang::tr{'ccd err invalidname'}; } # Fetch the network address & prefix @@ -452,13 +448,11 @@ sub addccdnet($$) { # If we could not decode the subnet, it must be invalid if (!defined $address || !defined $prefix) { - $errormessage = $Lang::tr{'ccd err invalidnet'}; - return; + return $Lang::tr{'ccd err invalidnet'}; # If the network is smaller than /30, there is no point in using it } elsif ($prefix > 30) { - $errormessage = $Lang::tr{'ccd err invalidnet'}; - return; + return $Lang::tr{'ccd err invalidnet'}; } # Read the configuration @@ -479,17 +473,13 @@ sub addccdnet($$) { } sub modccdnet($$) { + my $subnet = shift; my $newname = shift; - my $oldname = shift; + my $oldname; my %ccdconfhash=(); my %conns=(); - # Do nothing if nothing has changed - if ($newname eq $oldname) { - return; - } - # Check if the new name is valid unless (&validccdname($newname)) { $errormessage = $Lang::tr{'ccd err invalidname'}; @@ -502,14 +492,14 @@ sub modccdnet($$) { # Check if the name already exists foreach my $key (keys %ccdconfhash) { if ($ccdconfhash{$key}[0] eq $newname) { - $errormessage = $Lang::tr{'ccd err netadrexist'}; - return; + return $Lang::tr{'ccd err netadrexist'}; } } # Update! foreach my $key (keys %ccdconfhash) { - if ($ccdconfhash{$key}[0] eq $oldname) { + if ($ccdconfhash{$key}[1] eq $subnet) { + $oldname = $ccdconfhash{$key}[0]; $ccdconfhash{$key}[0] = $newname; last; } @@ -3015,123 +3005,157 @@ END # Add, delete or edit CCD net } elsif ($cgiparams{'ACTION'} eq $Lang::tr{'ccd net'} || - $cgiparams{'ACTION'} eq $Lang::tr{'ccd add'} || - $cgiparams{'ACTION'} eq "kill" || - $cgiparams{'ACTION'} eq "edit" || - $cgiparams{'ACTION'} eq 'editsave'){ + $cgiparams{'ACTION'} eq "ccd-add" || + $cgiparams{'ACTION'} eq "ccd-delete" || + $cgiparams{'ACTION'} eq "ccd-edit" || + $cgiparams{'ACTION'} eq 'ccd-edit-save'){ &Header::showhttpheaders(); + &Header::openpage($Lang::tr{'ccd net'}, 1, ''); + &Header::openbigbox('100%', 'LEFT', '', ''); - if ($cgiparams{'ACTION'} eq "kill"){ - &delccdnet($cgiparams{'net'}); - } + # Delete? + if ($cgiparams{'ACTION'} eq "ccd-delete") { + $errormessage = &delccdnet($cgiparams{'name'}); - if ($cgiparams{'ACTION'} eq 'editsave'){ - my ($a,$b) =split (/\|/,$cgiparams{'ccdname'}); - if ( $a ne $b){ &modccdnet($a,$b);} - $cgiparams{'ccdname'}=''; - $cgiparams{'ccdsubnet'}=''; - } + # Save after edit? + } elsif ($cgiparams{'ACTION'} eq 'ccd-edit-save') { + $errormessage = &modccdnet($cgiparams{'subnet'}, $cgiparams{'name'}); - if ($cgiparams{'ACTION'} eq $Lang::tr{'ccd add'}) { - &addccdnet($cgiparams{'ccdname'},$cgiparams{'ccdsubnet'}); - } - if ($errormessage) { - &Header::openbox('100%', 'LEFT', $Lang::tr{'error messages'}); - print "$errormessage"; - print " "; - &Header::closebox(); + # Clear inputs + if ($errormessage eq "") { + $cgiparams{"name"} = ""; + $cgiparams{"subnet"} = ""; + } + + # Add? + } elsif ($cgiparams{'ACTION'} eq "ccd-add") { + $errormessage = &addccdnet($cgiparams{'name'}, $cgiparams{'subnet'}); + + # Clear inputs + if ($errormessage eq "") { + $cgiparams{"name"} = ""; + $cgiparams{"subnet"} = ""; + } } -if ($cgiparams{'ACTION'} eq "edit"){ - &Header::openbox('100%', 'LEFT', $Lang::tr{'ccd modify'}); + &Header::errorbox($errormessage); - print < -
- $Lang::tr{'ccd name'}: - $Lang::tr{'ccd subnet'}: -
- - -
-END -; - &Header::closebox(); + my %ccdconfhash = (); + &General::readhasharray("${General::swroot}/ovpn/ccd.conf", \%ccdconfhash); - &Header::openbox('100%', 'LEFT',$Lang::tr{'ccd net'} ); - print < - - $Lang::tr{'ccd name'}$Lang::tr{'network'}$Lang::tr{'ccd used'} -END -; -} -else{ - if (! -e "/var/run/openvpn.pid"){ - &Header::openbox('100%', 'LEFT', $Lang::tr{'ccd add'}); + &Header::opensection(); print < -
- $Lang::tr{'ccd hint'}

- - $Lang::tr{'ccd name'}: - $Lang::tr{'ccd subnet'}: -
- -
-END + + + - &Header::closebox(); -} - &Header::openbox('100%', 'LEFT',$Lang::tr{'ccd net'} ); - if ( -e "/var/run/openvpn.pid"){ - print "$Lang::tr{'attention'}:
"; - print "$Lang::tr{'ccd noaddnet'}

"; - } + - print < - - + + + + END -; -} - my %ccdconfhash=(); - &General::readhasharray("${General::swroot}/ovpn/ccd.conf", \%ccdconfhash); - my @ccdconf=(); - my $count=0; + foreach my $key (sort { uc($ccdconfhash{$a}[0]) cmp uc($ccdconfhash{$b}[0]) } keys %ccdconfhash) { - @ccdconf=($ccdconfhash{$key}[0],$ccdconfhash{$key}[1]); - $count++; - my $ccdhosts = scalar &get_addresses_in_use($ccdconf[1]); - if ($count % 2){ print" ";} - else{ print" ";} - print" - - + my $name = $ccdconfhash{$key}[0]; + my $subnet = $ccdconfhash{$key}[1]; + + my $ccdhosts = scalar &get_addresses_in_use($subnet); + my $maxhosts = &ccdmaxclients($subnet); + + print < + + + + + + + + + + END -; } - print "
+ $Lang::tr{'ccd name'} + + $Lang::tr{'network'} +
$Lang::tr{'ccd name'}$Lang::tr{'network'}$Lang::tr{'ccd used'}
+ $Lang::tr{'ccd used'} +
$ccdconf[0]$ccdconf[1]$ccdhosts/".(&ccdmaxclients($ccdconf[1])+1).""; - print < - - - - -
- - -
+ $name + + $subnet + + ${ccdhosts}/${maxhosts} + +
+ + + + +
+
+
+ + + +
+
"; + print ""; + &Header::closesection(); + + &Header::openbox('100%', 'LEFT', + ($cgiparams{'ACTION'} eq "ccd-edit") ? $Lang::tr{'ccd modify'} : $Lang::tr{'ccd add'}); + + # The subnet cannot be edited + my $readonly = ($cgiparams{'ACTION'} eq "ccd-edit") ? "readonly" : ""; + my $action = ($cgiparams{'ACTION'} eq "ccd-edit") ? "ccd-edit-save" : "ccd-add"; + + print < + + + + + + + + + + + + + + +
$Lang::tr{'ccd name'} + +
$Lang::tr{'ccd subnet'} + +
+ + +
+ +END &Header::closebox(); - print ""; + + print < + $Lang::tr{'back'} + +END + &Header::closebigbox(); &Header::closepage(); - exit(0); -#END CCD + exit(0); ### ### Openvpn Connections Statistics -- 2.39.5