X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Ftor.cgi;h=fbad2d4d9c4ab2c7ada6ab534b87c59dab36509c;hb=ebfb8996930ec1e3b4f7d09208d2ab60a8f30603;hp=2ae9b6aebca6dbfbedd8c521ca1741d6f7eb623e;hpb=005db20668d04046ad4a9b256fa17dc961258977;p=ipfire-2.x.git diff --git a/html/cgi-bin/tor.cgi b/html/cgi-bin/tor.cgi index 2ae9b6aebc..fbad2d4d9c 100644 --- a/html/cgi-bin/tor.cgi +++ b/html/cgi-bin/tor.cgi @@ -20,13 +20,14 @@ ############################################################################### use strict; -use Locale::Country; +use Locale::Codes::Country; # enable only the following on debugging purpose use warnings; use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; +require "${General::swroot}/geoip-functions.pl"; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; @@ -51,16 +52,48 @@ my @bandwidth_limits = ( 1024, # 1M 512, 256, - 128, - 64 + 160 ); my @accounting_periods = ('daily', 'weekly', 'monthly'); my $TOR_CONTROL_PORT = 9051; +my $string=(); +my $memory=(); +my @memory=(); +my @pid=(); +my @tor=(); +sub daemonstats +{ + $memory = 0; + # for pid and memory + open(FILE, '/usr/local/bin/addonctrl tor status | '); + @tor = ; + close(FILE); + $string = join("", @tor); + $string =~ s/[a-z_]//gi; + $string =~ s/\[[0-1]\;[0-9]+//gi; + $string =~ s/[\(\)\.]//gi; + $string =~ s/ //gi; + $string =~ s///gi; + @pid = split(/\s/,$string); + if (open(FILE, "/proc/$pid[0]/statm")){ + my $temp = ; + @memory = split(/ /,$temp); + close(FILE); + } + $memory+=$memory[0]; +} +daemonstats(); + our %netsettings = (); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); +our %color = (); +our %mainsettings = (); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); + our %settings = (); $settings{'TOR_ENABLED'} = 'off'; @@ -74,8 +107,11 @@ if (&Header::blue_used()) { $settings{'TOR_RELAY_ENABLED'} = 'off'; $settings{'TOR_RELAY_MODE'} = 'exit'; +$settings{'TOR_RELAY_ADDRESS'} = ''; $settings{'TOR_RELAY_PORT'} = 9001; -$settings{'TOR_RELAY_NOADVERTISE'} = 'off'; +$settings{'TOR_RELAY_DIRPORT'} = 0; +$settings{'TOR_RELAY_NICKNAME'} = ''; +$settings{'TOR_RELAY_CONTACT_INFO'} = ''; $settings{'TOR_RELAY_BANDWIDTH_RATE'} = 0; $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0; $settings{'TOR_RELAY_ACCOUNTING_LIMIT'} = 0; @@ -96,6 +132,35 @@ our $torctrl = &TorConnect(); # Toggle enable/disable field. if ($settings{'ACTION'} eq $Lang::tr{'save'}) { + if ($settings{'TOR_RELAY_NICKNAME'} ne '') { + if ($settings{'TOR_RELAY_NICKNAME'} !~ /^[a-zA-Z0-9]+$/) { + $errormessage = "$Lang::tr{'tor errmsg invalid relay name'}: $settings{'TOR_RELAY_NICKNAME'}"; + } + } + + if (!&General::validport($settings{'TOR_SOCKS_PORT'})) { + $errormessage = "$Lang::tr{'tor errmsg invalid socks port'}: $settings{'TOR_SOCKS_PORT'}"; + } + + if (!&General::validport($settings{'TOR_RELAY_PORT'})) { + $errormessage = "$Lang::tr{'tor errmsg invalid relay port'}: $settings{'TOR_RELAY_PORT'}"; + } + if ($settings{'TOR_RELAY_DIRPORT'} ne '0') { + if (!&General::validport($settings{'TOR_RELAY_DIRPORT'})) { + $errormessage = "$Lang::tr{'tor errmsg invalid directory port'}: $settings{'TOR_RELAY_DIRPORT'}"; + } + } + + if ($settings{'TOR_RELAY_ADDRESS'} ne '') { + if ((!&General::validfqdn($settings{'TOR_RELAY_ADDRESS'})) && (!&General::validip($settings{'TOR_RELAY_ADDRESS'}))) { + $errormessage = "$Lang::tr{'tor errmsg invalid relay address'}: $settings{'TOR_RELAY_ADDRESS'}"; + } + } + + if ($settings{'TOR_RELAY_ACCOUNTING_LIMIT'} !~ /^\d+$/) { + $errormessage = "$Lang::tr{'tor errmsg invalid accounting limit'}: $settings{'TOR_RELAY_ACCOUNTING_LIMIT'}"; + } + my @temp = split(/[\n,]/,$settings{'TOR_ALLOWED_SUBNETS'}); $settings{'TOR_ALLOWED_SUBNETS'} = ""; foreach (@temp) { @@ -117,6 +182,14 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) { } } + # Burst bandwidth must be less or equal to bandwidth rate. + if ($settings{'TOR_RELAY_BANDWIDTH_RATE'} == 0) { + $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0; + + } elsif ($settings{'TOR_RELAY_BANDWIDTH_BURST'} < $settings{'TOR_RELAY_BANDWIDTH_RATE'}) { + $settings{'TOR_RELAY_BANDWIDTH_BURST'} = $settings{'TOR_RELAY_BANDWIDTH_RATE'}; + } + if ($errormessage eq '') { # Write configuration settings to file. &General::writehash("${General::swroot}/tor/settings", \%settings); @@ -124,14 +197,11 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) { # Update configuration files. &BuildConfiguration(); } - - # Reset ACTION. - $settings{'ACTION'} = ''; +} else { + # Load settings from file. + &General::readhash("${General::swroot}/tor/settings", \%settings); } -# Load settings from file. -&General::readhash("${General::swroot}/tor/settings", \%settings); - &showMainBox(); # Close Tor control connection. @@ -162,17 +232,42 @@ sub showMainBox() { print "
\n"; - &Header::openbox('100%', 'left', $Lang::tr{'tor configuration'}); + &Header::openbox('100%', 'center', $Lang::tr{'tor'}); + + +if ( ($memory != 0) && (@pid[0] ne "///") ){ + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "
$Lang::tr{'tor service'}
$Lang::tr{'tor daemon'}$Lang::tr{'running'}
PID$Lang::tr{'memory'}
@pid[0]$memory KB
"; + } else { + print ""; + print ""; + print ""; + print ""; + print "
$Lang::tr{'tor service'}
$Lang::tr{'tor daemon'}$Lang::tr{'stopped'}
"; + } + + &Header::closebox(); + + &Header::openbox('100%', 'center', $Lang::tr{'tor configuration'}); print < + - + - + @@ -184,225 +279,220 @@ sub showMainBox() {
$Lang::tr{'tor common settings'}$Lang::tr{'tor common settings'}
$Lang::tr{'tor enabled'}: $Lang::tr{'tor socks port'}:$Lang::tr{'tor socks port'}: *
END - if ($settings{'TOR_ENABLED'} eq 'on') { - my @temp = split(",", $settings{'TOR_ALLOWED_SUBNETS'}); - $settings{'TOR_ALLOWED_SUBNETS'} = join("\n", @temp); + my @temp = split(",", $settings{'TOR_ALLOWED_SUBNETS'}); + $settings{'TOR_ALLOWED_SUBNETS'} = join("\n", @temp); - @temp = split(",", $settings{'TOR_USE_EXIT_NODES'}); - $settings{'TOR_USE_EXIT_NODES'} = join("\n", @temp); + @temp = split(",", $settings{'TOR_USE_EXIT_NODES'}); + $settings{'TOR_USE_EXIT_NODES'} = join("\n", @temp); - print < -
-
+ print < +
- - - - - - - - - - - - -
$Lang::tr{'tor acls'}
- $Lang::tr{'tor allowed subnets'}: -
- -
+ + + + + + + + + + + + +
$Lang::tr{'tor acls'}
+ $Lang::tr{'tor allowed subnets'}: +
+ +
-
-
-
+
+
- - - - - - - - - - + + +
$Lang::tr{'tor exit nodes'}
$Lang::tr{'tor use exit nodes'}:
- + + + + + + + + + - - -
$Lang::tr{'tor exit nodes'}
$Lang::tr{'tor use exit nodes'}:
+ - -
-

+ print ">$country_name ($country_code)\n"; + } + + print < +
+ +
END - } &Header::closebox(); - if ($settings{'TOR_RELAY_ENABLED'} eq 'on') { - $checked{'TOR_RELAY_NOADVERTISE'}{'on'} = ''; - $checked{'TOR_RELAY_NOADVERTISE'}{'off'} = ''; - $checked{'TOR_RELAY_NOADVERTISE'}{$settings{'TOR_RELAY_NOADVERTISE'}} = 'checked'; - - $selected{'TOR_RELAY_MODE'}{'bridge'} = ''; - $selected{'TOR_RELAY_MODE'}{'exit'} = ''; - $selected{'TOR_RELAY_MODE'}{'private-bridge'} = ''; - $selected{'TOR_RELAY_MODE'}{'relay'} = ''; - $selected{'TOR_RELAY_MODE'}{$settings{'TOR_RELAY_MODE'}} = 'selected'; - - $selected{'TOR_RELAY_BANDWIDTH_RATE'}{'0'} = ''; - foreach (@bandwidth_limits) { - $selected{'TOR_RELAY_BANDWIDTH_RATE'}{$_} = ''; - } - $selected{'TOR_RELAY_BANDWIDTH_RATE'}{$settings{'TOR_RELAY_BANDWIDTH_RATE'}} = 'selected'; + # Tor relay box + $selected{'TOR_RELAY_MODE'}{'bridge'} = ''; + $selected{'TOR_RELAY_MODE'}{'exit'} = ''; + $selected{'TOR_RELAY_MODE'}{'private-bridge'} = ''; + $selected{'TOR_RELAY_MODE'}{'relay'} = ''; + $selected{'TOR_RELAY_MODE'}{$settings{'TOR_RELAY_MODE'}} = 'selected'; - $selected{'TOR_RELAY_BANDWIDTH_BURST'}{'0'} = ''; - foreach (@bandwidth_limits) { - $selected{'TOR_RELAY_BANDWIDTH_BURST'}{$_} = ''; - } - $selected{'TOR_RELAY_BANDWIDTH_BURST'}{$settings{'TOR_RELAY_BANDWIDTH_BURST'}} = 'selected'; + $selected{'TOR_RELAY_BANDWIDTH_RATE'}{'0'} = ''; + foreach (@bandwidth_limits) { + $selected{'TOR_RELAY_BANDWIDTH_RATE'}{$_} = ''; + } + $selected{'TOR_RELAY_BANDWIDTH_RATE'}{$settings{'TOR_RELAY_BANDWIDTH_RATE'}} = 'selected'; - foreach (@accounting_periods) { - $selected{'TOR_RELAY_ACCOUNTING_PERIOD'}{$_} = ''; - } - $selected{'TOR_RELAY_ACCOUNTING_PERIOD'}{$settings{'TOR_RELAY_ACCOUNTING_PERIOD'}} = 'selected'; + $selected{'TOR_RELAY_BANDWIDTH_BURST'}{'0'} = ''; + foreach (@bandwidth_limits) { + $selected{'TOR_RELAY_BANDWIDTH_BURST'}{$_} = ''; + } + $selected{'TOR_RELAY_BANDWIDTH_BURST'}{$settings{'TOR_RELAY_BANDWIDTH_BURST'}} = 'selected'; - &Header::openbox('100%', 'left', $Lang::tr{'tor relay configuration'}); + foreach (@accounting_periods) { + $selected{'TOR_RELAY_ACCOUNTING_PERIOD'}{$_} = ''; + } + $selected{'TOR_RELAY_ACCOUNTING_PERIOD'}{$settings{'TOR_RELAY_ACCOUNTING_PERIOD'}} = 'selected'; - print < - - $Lang::tr{'tor relay mode'}: - - - - $Lang::tr{'tor relay port'}: - - - - - - $Lang::tr{'tor relay address'}: * - - - - $Lang::tr{'tor do not advertise relay'}: - - - - - - $Lang::tr{'tor relay nickname'}: * - - - - - - - $Lang::tr{'tor contact info'}: * - - - - - + &Header::openbox('100%', 'center', $Lang::tr{'tor relay configuration'}); -
+ print < + + $Lang::tr{'tor relay mode'}: + + + + $Lang::tr{'tor relay nickname'}: + + + + + + $Lang::tr{'tor relay address'}: + + + + $Lang::tr{'tor relay port'}: * + + + + + +   +   + $Lang::tr{'tor directory port'}: * + +  $Lang::tr{'tor 0 = disabled'} + + + + $Lang::tr{'tor contact info'}: + + + + + - - - - - - - + +
$Lang::tr{'tor bandwidth settings'}
$Lang::tr{'tor bandwidth rate'}: - + + + + + + - - - - - - + + + + + + - - + + - -
$Lang::tr{'tor bandwidth settings'}
$Lang::tr{'tor bandwidth rate'}: + - $Lang::tr{'tor accounting limit'}: - -
$Lang::tr{'tor bandwidth burst'}: - + $Lang::tr{'tor accounting limit'}: * + +
$Lang::tr{'tor bandwidth burst'}: + - $Lang::tr{'tor accounting period'}: - + $Lang::tr{'tor accounting period'}: +
+ print < +
END - &Header::closebox(); - } + &Header::closebox(); print < + - +
- * $Lang::tr{'this field may be blank'} - * $Lang::tr{'required field'}  

- +
@@ -413,13 +503,13 @@ END # If we have a control connection, show the stats. if ($torctrl) { - &Header::openbox('100%', 'left', $Lang::tr{'tor stats'}); + &Header::openbox('100%', 'center', $Lang::tr{'tor stats'}); my @traffic = &TorTrafficStats($torctrl); if (@traffic) { print < +
 
END if ($settings{'TOR_RELAY_ENABLED'} eq 'on') { @@ -460,7 +550,7 @@ END my $accounting = &TorAccountingStats($torctrl); if ($accounting) { print < +
@@ -509,10 +599,12 @@ END my @nodes = &TorORConnStatus($torctrl); if (@nodes) { + my $nodes_length = scalar @nodes; print < +
$Lang::tr{'tor accounting'}
- + + END @@ -528,7 +620,15 @@ END END if (exists($node->{'country_code'})) { - print "$node->{"; + # Get the flag icon of the country. + my $flag_icon = &GeoIP::get_flag_icon($node->{'country_code'}); + + # Check if a flag for the given country is available. + if ($flag_icon) { + print "$node->{"; + } else { + print ""; + } } print </dev/null"); } + # Update pid and memory + daemonstats(); } sub TorConnect() { @@ -876,7 +978,7 @@ sub FormatBytes() { sub FormatBitsPerSecond() { my $bits = shift; - my @units = ("Bit/s", "KBit/s", "MBit/s", "GBit/s", "TBit/s"); + my @units = ("bit/s", "kbit/s", "Mbit/s", "Gbit/s", "Tbit/s"); my $units_index = 0; while (($units_index <= $#units) && ($bits >= 1024)) {
$Lang::tr{'tor connected relays'}$Lang::tr{'tor connected relays'}($nodes_length)