X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Ftor.cgi;h=d31eb10862e129b3bbad2f3aa72f540a2128ec11;hb=77c454b267f4a99809226b4a5f0d2c7ca31265b4;hp=ed8964cdbd8f989dfd9812ff9462451e43bbd11b;hpb=818f47d06f0b2126428e8702c5930b9b44c73cc1;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/tor.cgi b/html/cgi-bin/tor.cgi index ed8964cdbd..d31eb10862 100644 --- a/html/cgi-bin/tor.cgi +++ b/html/cgi-bin/tor.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2013 IPFire Team # +# Copyright (C) 2013-2019 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -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'; +#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"; @@ -35,10 +36,10 @@ my @dummy = ( ${Header::colouryellow} ); undef (@dummy); my @bandwidth_limits = ( - 1000 * 1024, # 1G + 1000 * 1024, # 1 GBit/s 500 * 1024, 200 * 1024, - 100 * 1024, # 100M + 100 * 1024, # 100 MBit/s 64 * 1024, 50 * 1024, 25 * 1024, @@ -48,18 +49,48 @@ my @bandwidth_limits = ( 8 * 1024, 4 * 1024, 2 * 1024, - 1024, # 1M - 512, - 256, - 160 + 1024 # 1 MBit/s ); 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'; @@ -72,11 +103,12 @@ if (&Header::blue_used()) { } $settings{'TOR_RELAY_ENABLED'} = 'off'; -$settings{'TOR_RELAY_MODE'} = 'exit'; +$settings{'TOR_RELAY_MODE'} = 'relay'; +$settings{'TOR_RELAY_ADDRESS'} = ''; $settings{'TOR_RELAY_PORT'} = 9001; +$settings{'TOR_RELAY_DIRPORT'} = 0; $settings{'TOR_RELAY_NICKNAME'} = ''; $settings{'TOR_RELAY_CONTACT_INFO'} = ''; -$settings{'TOR_RELAY_NOADVERTISE'} = 'off'; $settings{'TOR_RELAY_BANDWIDTH_RATE'} = 0; $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0; $settings{'TOR_RELAY_ACCOUNTING_LIMIT'} = 0; @@ -97,8 +129,10 @@ our $torctrl = &TorConnect(); # Toggle enable/disable field. if ($settings{'ACTION'} eq $Lang::tr{'save'}) { - if ($settings{'TOR_RELAY_NICKNAME'} !~ /^[a-zA-Z0-9]+$/) { - $errormessage = "$Lang::tr{'tor errmsg invalid relay name'}: $settings{'TOR_RELAY_NICKNAME'}"; + 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'})) { @@ -108,6 +142,21 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) { 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'} = ""; @@ -180,17 +229,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 < + - + - + @@ -202,225 +276,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'}  

- +
@@ -431,13 +500,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') { @@ -447,7 +516,7 @@ END END @@ -478,7 +547,7 @@ END my $accounting = &TorAccountingStats($torctrl); if ($accounting) { print < +
$Lang::tr{'tor relay fingerprint'}: - $fingerprint + $fingerprint
@@ -529,7 +598,7 @@ END if (@nodes) { my $nodes_length = scalar @nodes; print < +
$Lang::tr{'tor accounting'}
@@ -540,7 +609,7 @@ END print < @@ -548,7 +617,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() { @@ -896,7 +975,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'} ($nodes_length) - + $node->{'name'}